async def edit_instance(red, cli_flags): no_prompt = cli_flags.no_prompt token = cli_flags.token owner = cli_flags.owner old_name = cli_flags.instance_name new_name = cli_flags.edit_instance_name data_path = cli_flags.edit_data_path copy_data = cli_flags.copy_data confirm_overwrite = cli_flags.overwrite_existing_instance if data_path is None and copy_data: print("--copy-data can't be used without --edit-data-path argument") sys.exit(1) if new_name is None and confirm_overwrite: print("--overwrite-existing-instance can't be used without --edit-instance-name argument") sys.exit(1) if no_prompt and all(to_change is None for to_change in (token, owner, new_name, data_path)): print( "No arguments to edit were provided. Available arguments (check help for more " "information): --edit-instance-name, --edit-data-path, --copy-data, --owner, --token" ) sys.exit(1) await _edit_token(red, token, no_prompt) await _edit_owner(red, owner, no_prompt) data = deepcopy(data_manager.basic_config) name = _edit_instance_name(old_name, new_name, confirm_overwrite, no_prompt) _edit_data_path(data, name, data_path, copy_data, no_prompt) save_config(name, data) if old_name != name: save_config(old_name, {}, remove=True)
def container_setup(): """RedBot Setup using environment vars and secrets Tries to emulate all the functionality of redbot setup but Container Runtime friendly. This writes out the config each time assuming the container runtime is providing us the correct data. """ print("[CONTAINER-INIT] Setting up config") default_dirs = deepcopy(data_manager.basic_config_default) default_data_dir = os.environ.get("RED_DATA_DIR", "/app/data") if os.environ.get("RED_USE_POSTGRES", "False").lower() == "true": logger.info("Setting up using Postgres storage driver") driver_cls = drivers.get_driver_class(BackendType.POSTGRES) else: logger.info("Setting up using JSON storage driver in: {0}".format( default_data_dir)) driver_cls = drivers.get_driver_class(BackendType.JSON) default_dirs["STORAGE_DETAILS"] = driver_cls.get_config_details() try: name = os.environ["RED_INSTANCE_NAME"] except KeyError: logger.critical( "Mandatory config item 'RED_INSTANCE_NAME' was not provided! Exiting..." ) sys.exit(1) if re.fullmatch(r"[a-zA-Z0-9_\-]*", name) is None: logger.critical( "Invalid name provided, please keep within: [A-Za-z0-9_-]") sys.exit(1) save_config(name, default_dirs)
if storage_type == BackendType.POSTGRES \ or storage_type == storage_type.MONGO \ or storage_type == storage_type.MONGOV1: host = os.getenv("REDBOT_DB_HOST") port = os.getenv("REDBOT_DB_PORT") user = os.getenv("REDBOT_DB_USER") password = os.getenv("REDBOT_DB_PASS") database = os.getenv("REDBOT_DB_NAME") if storage_type == storage_type.POSTGRES: default_dirs["STORAGE_DETAILS"] = { "host": host, "port": port, "user": user, "password": password, "database": database, } if storage_type == storage_type.MONGO \ or storage_type == storage_type.MONGOV1: default_dirs["STORAGE_DETAILS"] = { "HOST": host, "PORT": port, "USERNAME": user, "PASSWORD": password, "DB_NAME": database, "URI": "mongodb", } save_config(name, default_dirs)