in mysqloperator/controller/innodbcluster/operator_cluster.py [0:0]
def do_create_read_replica(cluster: InnoDBCluster, rr: cluster_objects.ReadReplicaSpec,
set_replicas_to_zero: bool,
indention: str, logger: Logger) -> None:
namespace = cluster.namespace
print(f"{indention}Components ConfigMaps and Secrets")
for cm in cluster_objects.prepare_component_config_configmaps(rr, logger):
if not cluster.get_configmap(cm['metadata']['name']):
print(f"{indention}\tCreating CM {cm['metadata']['name']} ...")
kopf.adopt(cm)
api_core.create_namespaced_config_map(namespace, cm)
for secret in cluster_objects.prepare_component_config_secrets(rr, logger):
if not cluster.get_secret(secret['metadata']['name']):
print(f"{indention}\tCreating Secret {secret['metadata']['name']} ...")
kopf.adopt(secret)
api_core.create_namespaced_secret(namespace, secret)
print(f"{indention}Initconf")
if not ignore_404(lambda: cluster.get_initconf(rr)):
print(f"{indention}\tPreparing... {rr.name}")
configs = cluster_objects.prepare_initconf(cluster, rr, logger)
print(f"{indention}\tCreating...")
kopf.adopt(configs)
api_core.create_namespaced_config_map(namespace, configs)
print(f"{indention}RR ServiceAccount")
existing_sa = ignore_404(lambda: cluster.get_service_account_sidecar(rr))
print(f"{indention}\tExisting SA: {existing_sa}")
print(f"{indention}\tImagePullSecrets: {rr.imagePullSecrets}")
if not existing_sa:
print(f"{indention}\tPreparing...")
sa = cluster_objects.prepare_service_account_sidecar(rr)
print(f"{indention}\tCreating...{sa}")
kopf.adopt(sa)
api_core.create_namespaced_service_account(namespace=namespace, body=sa)
elif rr.imagePullSecrets:
patch = cluster_objects.prepare_service_account_patch_for_image_pull_secrets(rr)
print(f"{indention}\tPatching existing SA with {patch}")
api_core.patch_namespaced_service_account(name=existing_sa.metadata.name, namespace=namespace, body=patch)
print(f"{indention}RR RoleBinding Sidecar")
if not ignore_404(lambda: cluster.get_role_binding_sidecar(rr)):
print(f"{indention}\tPreparing...")
rb = cluster_objects.prepare_role_binding_sidecar(rr)
print(f"{indention}\tCreating RoleBinding {rb['metadata']['name']} {rb}...")
kopf.adopt(rb)
api_rbac.create_namespaced_role_binding(namespace=namespace, body=rb)
print(f"{indention}RR Service")
if not ignore_404(lambda: cluster.get_read_replica_service(rr)):
print(f"{indention}\tPreparing... {rr.name} Service")
service = cluster_objects.prepare_cluster_service(rr, logger)
print(f"{indention}\tCreating...{service}")
kopf.adopt(service)
api_core.create_namespaced_service(namespace=namespace, body=service)
print(f"{indention}RR STS")
if not ignore_404(lambda: cluster.get_read_replica_stateful_set(rr.name)):
print(f"{indention}\tPreparing {rr.name} StatefulSet")
statefulset = cluster_objects.prepare_cluster_stateful_set(cluster, rr, logger)
if set_replicas_to_zero:
# This is initial startup where scaling the read reaplica is delayed
# till the clsuter is read
statefulset['spec']['replicas'] = 0
print(f"{indention}\tCreating...{statefulset}")
kopf.adopt(statefulset)
api_apps.create_namespaced_stateful_set(namespace=namespace, body=statefulset)