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")