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