def update_ssl(self, database, task, since_step=None, step_manager=None, scheduled_task=None, auto_rollback=False): from maintenance.models import UpdateSsl task = TaskHistory.register(request=self.request, task_history=task, user=task.user, worker_name=get_worker_name()) if step_manager: step_manager = step_manager step_manager.id = None step_manager.started_at = None since_step = step_manager.current_step else: retry_from = UpdateSsl.objects.filter(can_do_retry=True, database=database, status=UpdateSsl.ERROR).last() step_manager = UpdateSsl() if retry_from: step_manager.current_step = retry_from.current_step since_step = retry_from.current_step step_manager.task_schedule = retry_from.task_schedule step_manager.database = database step_manager.task = task if scheduled_task: step_manager.task_schedule = scheduled_task step_manager.set_running() step_manager.save() steps = database.databaseinfra.update_ssl_steps() hosts = [] for instance in database.infra.instances.all(): if instance.hostname not in hosts: hosts.append(instance.hostname) instances = [] for host in hosts: instances.append(host.instances.all()[0]) result = steps_for_instances(steps, instances, task, step_manager.update_step, since_step, step_manager=step_manager) step_manager = UpdateSsl.objects.get(id=step_manager.id) if result: step_manager.set_success() task.set_status_success('SSL Update with success') else: step_manager.set_error() task.set_status_error('Could not update SSL') if auto_rollback: from workflow.workflow import rollback_for_instances_full new_task = task new_task.id = None new_task.details = '' new_task.task_name += '_rollback' new_task.task_status = new_task.STATUS_RUNNING new_task.save() rollback_step_manager = step_manager rollback_step_manager.id = None rollback_step_manager.task_schedule = None rollback_step_manager.can_do_retry = 0 rollback_step_manager.save() result = rollback_for_instances_full( steps, instances, new_task, rollback_step_manager.get_current_step, rollback_step_manager.update_step, ) if result: rollback_step_manager.set_success() task.set_status_success('Rollback SSL Update with success') else: if hasattr(rollback_step_manager, 'cleanup'): rollback_step_manager.cleanup(instances) rollback_step_manager.set_error() task.set_status_error('Could not rollback update SSL')
def update_ssl(self, database, task, since_step=None, step_manager=None): from maintenance.models import UpdateSsl task = TaskHistory.register(request=self.request, task_history=task, user=task.user, worker_name=get_worker_name()) if step_manager: step_manager = step_manager step_manager.id = None step_manager.started_at = None since_step = step_manager.current_step else: retry_from = UpdateSsl.objects.filter(can_do_retry=True, database=database, status=UpdateSsl.ERROR).last() step_manager = UpdateSsl() if retry_from: step_manager.current_step = retry_from.current_step since_step = retry_from.current_step step_manager.database = database step_manager.task = task step_manager.save() steps = database.databaseinfra.update_ssl_steps() instances = database.infra.get_driver().get_database_instances() result = steps_for_instances(steps, instances, task, step_manager.update_step, since_step, step_manager=step_manager) step_manager = UpdateSsl.objects.get(id=step_manager.id) if result: step_manager.set_success() task.set_status_success('SSL Update with success') else: step_manager.set_error() task.set_status_error('Could not update SSL')