Запросы на резервное копирование/реплицирование/восстановление отправляются пользователями через спецификации, включая политики, которые периодически выполняют запросы моментального копирования/реплицирования.
На широком уровне мы можем выполнить 4–5 операций сравнения (например, привязку/реплицирование и восстановление приложения) с различными вариантами в зависимости от представленной спецификации различий. В настоящее время у меня есть метод, опубликованный ниже, где операция принимает кучу параметров, подобных кваргам, и кучу условий if для выполнения запрошенной операции.
Нам также необходимо проверить эти операции. на бэкэнде, и вид проверки зависит от последовательности и параметров операций, выполненных до проверки.
https://pastebin.com/50t1SH9X
пример аргументов здесь
Код: Выделить всё
application_name = kwargs.pop("application_name")
skip_checks = kwargs.pop("skip_checks", list())
self.skip_checks = skip_checks
start_application = kwargs.pop("start_application", True)
start_auxiliary_resources = kwargs.pop("start_auxiliary_resources", False)
start_pending_volumes = kwargs.pop("start_pending_volumes", False)
start_pending_services = kwargs.pop("start_pending_services", False)
remove_application = kwargs.get("remove_application", True)
is_stateless = kwargs.get("is_stateless", False)
snapshot_count = kwargs.get("snapshot_count", 1)
restore_cycles = kwargs.pop("restore_cycles", 0)
retry_interval = kwargs.get("retry_interval", 60)
is_restore_random = kwargs.get("is_restore_random", False)
restore_attempt = kwargs.get("restore_attempt", 1)
is_restore_validated = kwargs.get("is_restore_validated", True)
remove_snapshot = kwargs.get("remove_snapshot", True)
remove_restore_request = kwargs.get("remove_restore_request", True)
kubernetes_services = list()
modify_kubernetes_service = kwargs.pop("modify_kubernetes_service", False)
suspend_service = kwargs.get("suspend_service", False)
resume_service = kwargs.get("resume_service", False)
create_snapshot = kwargs.get("create_snapshot", False)
.
.
.
if cloud_version:
CloudApiFactory.set_config(name="cloud_version", value=cloud_version)
cloud_version = CloudApiFactory.get_config(name="cloud_version")
remove_resources = kwargs.pop("remove_resources", None)
validate_configurations = kwargs.pop("validate_configurations", dict())
cloud_cluster = kwargs.get("cluster", None)
INFO("Setting the default skip restore if not set")
self.cloud_workflow.set_default_skip_restoring_existing_resources(base=self.base_resources)
if start_application:
kubernetes_services = self.cloud_workflow.deploy_kubernetes_application(application_name=application_name,
cloud_version=cloud_version,
skip_checks=skip_checks,
**kwargs)
if kwargs.get("cross_ns_restore", False):
INFO("Cross ns restore WF")
self.cross_ns_restore(**kwargs)
if create_multiple_configs:
На мой взгляд, я подумываю об использовании спецификаций /configs как класс данных и использовать его для обработки. Однако мне все еще нужно выполнять операции, основанные на diff-части спецификаций, и это включает в себя множество условий if.
Более того, проверка также довольно сложна с аналогичными условиями if (проверка - это отдельный класс)
Подробнее здесь: https://stackoverflow.com/questions/792 ... any-things