Run the installator

def run(self):
        """ Run the installator """
        self._display_header("BACKEND CONFIGURATION")
        options = {}
        while True:
            options = {}
            backend = self.ask_backend()
            if backend == "local":
                self._display_info("Backend chosen: local. Testing the configuration.")
                options = self._ask_local_config()
                if not self.test_local_docker_conf():
                    self._display_error(
                        "An error occurred while testing the configuration. Please make sure you are able do run `docker info` in "
                        "your command line, and environment parameters like DOCKER_HOST are correctly set.")
                    if self._ask_boolean("Would you like to continue anyway?", False):
                        break
                else:
                    break
            else:
                self._display_warning(
                    "Backend chosen: manual. As it is a really advanced feature, you will have to configure it yourself in "
                    "the configuration file, at the end of the setup process.")
                options = {"backend": backend}
                break

        self._display_header("MONGODB CONFIGURATION")
        mongo_opt = self.configure_mongodb()
        options.update(mongo_opt)

        self._display_header("TASK DIRECTORY")
        task_directory_opt = self.configure_task_directory()
        options.update(task_directory_opt)

        self._display_header("CONTAINERS")
        self.configure_containers(options)

        self._display_header("MISC")
        misc_opt = self.configure_misc()
        options.update(misc_opt)

        database = self.try_mongodb_opts(options["mongo_opt"]["host"], options["mongo_opt"]["database"])

        self._display_header("BACKUP DIRECTORY")
        backup_directory_opt = self.configure_backup_directory()
        options.update(backup_directory_opt)

        self._display_header("AUTHENTIFICATION")
        auth_opts = self.configure_authentication(database)
        options.update(auth_opts)

        self._display_info("You may want to add additional plugins to the configuration file.")

        self._display_header("REMOTE DEBUGGING - IN BROWSER")
        self._display_info(
            "If you want to activate the remote debugging of task in the users' browser, you have to install separately "
            "INGInious-xterm, which is available on Github, according to the parameters you have given for the hostname and the "
            "port range given in the configuration of the remote debugging.")
        self._display_info(
            "You can leave the following question empty to disable this feature; remote debugging will still be available, "
            "but not in the browser.")
        webterm = self._ask_with_default(
            "Please indicate the link to your installation of INGInious-xterm (for example: "
            "https://your-hostname.com:8080).", "")
        if webterm != "":
            options["webterm"] = webterm

        self._display_header("END")
        file_dir = self._config_path or os.path.join(os.getcwd(), self.configuration_filename())
        try:
            yaml.dump(options, open(file_dir, "w"))
            self._display_info("Successfully written the configuration file")
        except:
            self._display_error("Cannot write the configuration file on disk. Here is the content of the file")
            print(yaml.dump(options))