def update_schedules()

in mysqloperator/controller/backup/backup_objects.py [0:0]


def update_schedules(spec: InnoDBClusterSpec, old: dict, new: dict, logger: Logger) -> int:
    logger.info("backup_objects.updates_schedules")
    namespace = spec.namespace
    cluster_name = spec.name

    diff = compare_schedules(spec, old, new, logger)
    logger.info(f"backup_objects.update_schedules: diff={diff}")

    if (len(diff['removed']) == 0 and \
        len(diff['added']) == 0 and \
        len(diff['modified']) == 0):
        logger.info("No backup schedules changes")
        return 0

    if len(diff['removed']):
        logger.info(f"backup_objects.update_schedules: will delete {len(diff['removed'])} backup schedule objects")
        for rm_schedule_name in diff['removed']:
            cj_name = schedule_cron_job_name(cluster_name, rm_schedule_name)
            logger.info(f"backup_objects.update_schedules: deleting schedule {cj_name} in {namespace} ")
            api_cron_job.delete_namespaced_cron_job(cj_name, namespace)

    if len(diff['added']):
        logger.info(f"backup_objects.update_schedules: will add {len(diff['added'])} backup schedule objects")
        cj_template = get_cron_job_template(spec)
        for add_schedule_name, add_schedule_obj in diff['added'].items():
            cj_name = schedule_cron_job_name(cluster_name, add_schedule_name)
            logger.info(f"backup_objects.update_schedules: adding schedule {cj_name} in {namespace}")
            cronjob = patch_cron_template_for_backup_schedule(cj_template, spec.name, add_schedule_obj)
            kopf.adopt(cronjob)
            api_cron_job.create_namespaced_cron_job(namespace=namespace, body=cronjob)

    if len(diff['modified']):
        logger.info(f"backup_objects.update_schedules: will modify {len(diff['modified'])} backup schedule objects")
        cj_template = get_cron_job_template(spec)
        for mod_schedule_name, mod_schedule_objects in diff['modified'].items():
            cj_name = schedule_cron_job_name(cluster_name, mod_schedule_name)
            logger.info(f"backup_objects.update_schedules: modifying schedule {cj_name} in {namespace}")
            cronjob = patch_cron_template_for_backup_schedule(cj_template, spec.name, mod_schedule_objects["new"])
            logger.info(f"backup_objects.update_schedules: {cronjob}")
            api_cron_job.replace_namespaced_cron_job(name=cj_name, namespace=namespace, body=cronjob)