def init_conf()

in mysqloperator/init_main.py [0:0]


def init_conf(datadir: str, pod: MySQLPod, cluster, logger: logging.Logger):
    """
    Initialize MySQL configuration files and init scripts, which must be mounted
    in /mnt/mycnfdata.
    The source config files must be mounted in /mnt/initconf.

    Init scripts are executed by the mysql container entrypoint when it's
    initializing for the 1st time.
    """
    if pod.instance_type == "read-replica":
        read_replica_name = pod.read_replica_name
        [rr_spec] = filter(lambda rr: rr.name == read_replica_name,
                           cluster.parsed_spec.readReplicas)
        server_id = pod.index + rr_spec.baseServerId
    elif pod.instance_type == "group-member":
        server_id = pod.index + cluster.parsed_spec.baseServerId
    else:
        raise RuntimeError(f"Invalid instance type: {pod.instance_type}")

    report_host = fqdn.pod_fqdn(pod, logger)

    logger.info(
        f"Setting up configurations for {pod.name}  server_id={server_id}  report_host={report_host}")

    srcdir = "/mnt/initconf/"
    destdir = "/mnt/mycnfdata/"
    mycnf_dir = destdir + "my.cnf.d"
    initdb_dir = destdir + "docker-entrypoint-initdb.d"

    os.makedirs(mycnf_dir, exist_ok=True)
    os.makedirs(initdb_dir, exist_ok=True)

    with open(srcdir + "my.cnf.in") as f:
        data = f.read()
        data = data.replace("@@SERVER_ID@@", str(server_id))
        data = data.replace("@@HOSTNAME@@", str(report_host))
        data = data.replace("@@DATADIR@@", datadir)
        with open(destdir + "my.cnf", "w+") as mycnf:
            mycnf.write(data)

    for f in os.listdir(srcdir):
        file = os.path.join(srcdir, f)
        if f.startswith("initdb-"):
            print(f"Copying {file} to {initdb_dir}")
            shutil.copy(file, initdb_dir)
            if f.endswith(".sh"):
                os.chmod(os.path.join(initdb_dir, f), 0o555)
        elif f.endswith(".cnf"):
            print(f"Copying {file} to {mycnf_dir}")
            shutil.copy(file, mycnf_dir)

    logger.info("Configuration done")