Example #1
0
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)
Example #2
0
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)