def do_create_read_replica()

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)