def recreate_slave(self, request, pk=None): host = self.get_object() if not host.is_database: return self._render_error( "The host must be Database instance", 422 ) serializer = self.get_serializer() database = serializer.get_database(host) if database.is_being_used_elsewhere(): return self._render_error( "Database {} is being used for another task".format(database), 422 ) if not (database.databaseinfra.plan.replication_topology .can_recreate_slave): return self._render_error( "This topology cant recreate slave", 422 ) instance = host.database_instance() driver = instance.databaseinfra.get_driver() if driver.check_instance_is_master(instance): return self._render_error( "Host is master. The host must be Slave", 422 ) raise Exception() TaskRegister.recreate_slave(host=host, user=request.user) return Response( {'hostname': host.hostname, 'id': host.id}, status=204 )
def retry_view(self, request, manager_id): retry_from = get_object_or_404(RecreateSlave, pk=manager_id) success, redirect = self.check_status(request, retry_from, 'retry') if not success: return redirect TaskRegister.recreate_slave(host=retry_from.host, user=request.user, since_step=retry_from.current_step, step_manager=retry_from) return self.redirect_to_database(retry_from)