def patch_sts_spec_template_complex_attribute()

in mysqloperator/controller/innodbcluster/logs/logs_types_api.py [0:0]


def patch_sts_spec_template_complex_attribute(sts: Union[dict, api_client.V1StatefulSet], patcher: 'InnoDBClusterObjectModifier', patch: dict, attr: str, add: bool) -> None:
    #print(f"\npatch_sts_spec_template_complex_attribute attr={attr} add={add} patch={patch}")
    attr_c = snail_to_camel(attr)
    if patch is None or len(patch[attr_c]) == 0:
        return
    attr_names = [a["name"] for a in patch[attr_c]]
    #print(f"\npatch_sts_spec_template_complex_attribute: attr_names={attr_names}\n")
    if isinstance(sts, dict):
        # first filter out
        #cleaned_up_attr = [a for a in sts["spec"]["template"]["spec"][attr_c] if a and get_object_name(a) not in attr_names]
        #patcher.patch_sts_overwrite(cleaned_up_attr, f"/spec/template/spec/{attr_c}")
        # This is at startup, when we create ourselves. V1StatefulSet is only when we fetch from the server.
        # For now when we create ourselves we don't use the patcher
        #print(f"\tpatch_sts_spec_template_complex_attribute Dict. Filtering out {attr_c}")
        sts["spec"]["template"]["spec"][attr_c] = [a for a in sts["spec"]["template"]["spec"][attr_c] if a and get_object_name(a) not in attr_names]
        if add:
            #print(f"STS is dict. Patching with {patch}")
            #patcher.patch_sts({"spec":{"template":{"spec": patch}}})
            #print(f"patch_sts_spec_template_complex_attribute: STS is Dict. Adding {attr_c} attribute by patching with {patch}\n")
            utils.merge_patch_object(sts["spec"]["template"]["spec"], patch)
    elif isinstance(sts, api_client.V1StatefulSet):
        # first filter out
        # attribute should be here snail case
        path = f"/spec/template/spec/{attr_c}"
        sts_path = patcher.get_sts_path(path)
        cleaned_up_attr = [a for a in sts_path if a and get_object_name(a) not in attr_names]
        #print(f"\tcleaned_up_attr     = {cleaned_up_attr}\n")
        if cleaned_up_attr != sts_path:
            patcher.patch_sts_overwrite(cleaned_up_attr, path)
        #sts.spec["template"]["spec"][attr_c] = [a for a in sts.spec["template"]["spec"][attr_c] if a and get_object_name(a) not in attr_names]
        if add:
            #print(f"patch_sts_spec_template_complex_attribute: STS is V1StatefulSet. Adding {attr_c} attribute by patching with {patch}\n")
            patcher.patch_sts({"spec": {"template": {"spec": patch}}})