def get_task_signature(cls, tenant, serialized_tenant, **kwargs): service_settings = structure_models.ServiceSettings.objects.get( scope=tenant) serialized_settings = core_utils.serialize_instance(service_settings) return chain( core_tasks.BackendMethodTask().si( serialized_tenant, 'pull_tenant', state_transition='begin_updating'), core_tasks.BackendMethodTask().si(serialized_tenant, 'pull_tenant_quotas'), # Some resources are synchronized from openstack to openstack_tenant via handlers, # so for pulling them needed use serialized_tenant core_tasks.BackendMethodTask().si(serialized_tenant, 'pull_tenant_floating_ips'), core_tasks.BackendMethodTask().si(serialized_tenant, 'pull_tenant_security_groups'), core_tasks.IndependentBackendMethodTask().si( serialized_tenant, 'pull_networks'), core_tasks.IndependentBackendMethodTask().si( serialized_settings, 'pull_images'), core_tasks.IndependentBackendMethodTask().si( serialized_settings, 'pull_flavors'), core_tasks.IndependentBackendMethodTask().si( serialized_tenant, 'pull_subnets'), )
def get_task_signature(cls, instance, serialized_instance, **kwargs): _tasks = [ core_tasks.StateTransitionTask().si( serialized_instance, state_transition='begin_updating') ] # Create non-exist floating IPs for floating_ip in instance.floating_ips.filter(backend_id=''): serialized_floating_ip = core_utils.serialize_instance(floating_ip) _tasks.append(core_tasks.BackendMethodTask().si( serialized_floating_ip, 'create_floating_ip')) # Push instance floating IPs _tasks.append(core_tasks.BackendMethodTask().si( serialized_instance, 'push_instance_floating_ips')) # Wait for operation completion for index, floating_ip in enumerate(instance.floating_ips): _tasks.append(core_tasks.PollRuntimeStateTask().si( core_utils.serialize_instance(floating_ip), backend_pull_method='pull_floating_ip_runtime_state', success_state='ACTIVE', erred_state='ERRED', ).set(countdown=5 if not index else 0)) # Pull floating IPs again to update state of disconnected IPs _tasks.append(core_tasks.IndependentBackendMethodTask().si( serialized_instance, 'pull_floating_ips')) return chain(*_tasks)
def remove_ssh_keys_from_service(sender, structure, user, role, **kwargs): """ Remove user ssh keys if he doesn't have access to service anymore. """ if isinstance(structure, structure_models.Project): lost_services = models.DigitalOceanService.objects.filter( customer__projects=structure) elif isinstance(structure, structure_models.Customer): lost_services = models.DigitalOceanService.objects.filter( customer=structure) else: return lost_settings = [service.settings for service in lost_services] visible_services = structure_filters.filter_queryset_for_user( models.DigitalOceanService.objects.all(), user) visible_settings = [service.settings for service in visible_services] settings_list = set([ settings for settings in lost_settings if settings not in visible_settings ]) ssh_keys = core_models.SshPublicKey.objects.filter(user=user) for settings in settings_list: serialized_settings = core_utils.serialize_instance(settings) for ssh_key in ssh_keys: core_tasks.IndependentBackendMethodTask().delay( serialized_settings, 'remove_ssh_key', ssh_key.name, ssh_key.fingerprint)
def pull_datastores_for_resource(instance, task): """ Schedule datastore synchronization after virtual machine or disk has been either created, updated or deleted. """ if isinstance(instance, models.VirtualMachine): datastore = instance.datastore elif isinstance(instance, models.Disk): datastore = instance.vm.datastore else: datastore = None if not datastore: return task serialized_settings = core_utils.serialize_instance( instance.service_settings) return chain( task, core_tasks.IndependentBackendMethodTask().si( serialized_settings, 'pull_datastores', ), )
def get_delete_instance_tasks(cls, instance, serialized_instance): _tasks = [ core_tasks.BackendMethodTask().si( serialized_instance, 'delete_instance', state_transition='begin_deleting'), core_tasks.PollBackendCheckTask().si(serialized_instance, 'is_instance_deleted'), core_tasks.IndependentBackendMethodTask().si( serialized_instance, 'pull_networks'), ] if instance.floating_ip: _tasks.append(core_tasks.IndependentBackendMethodTask().si( serialized_instance, 'pull_floating_ips')) return chain(_tasks)
def get_task_signature(cls, tenant, serialized_tenant, **kwargs): service_settings = structure_models.ServiceSettings.objects.get( scope=tenant) serialized_settings = core_utils.serialize_instance(service_settings) return chain( core_tasks.BackendMethodTask().si( serialized_tenant, 'pull_tenant', state_transition='begin_updating'), core_tasks.BackendMethodTask().si(serialized_tenant, 'pull_tenant_quotas'), core_tasks.BackendMethodTask().si(serialized_tenant, 'pull_tenant_floating_ips'), core_tasks.BackendMethodTask().si(serialized_tenant, 'pull_tenant_security_groups'), core_tasks.IndependentBackendMethodTask().si( serialized_settings, 'pull_images'), core_tasks.IndependentBackendMethodTask().si( serialized_settings, 'pull_flavors'), )
def get_task_signature(cls, settings, serialized_settings, **kwargs): creation_tasks = [ core_tasks.StateTransitionTask().si( serialized_settings, state_transition='begin_creating') ] # sync settings if they have not only global properties backend = settings.get_backend() if not backend.has_global_properties(): creation_tasks.append(core_tasks.IndependentBackendMethodTask().si( serialized_settings, 'sync')) return chain(*creation_tasks)
def remove_ssh_key_from_service_settings_on_deletion(sender, instance, **kwargs): ssh_key = instance user = ssh_key.user services = structure_filters.filter_queryset_for_user( models.DigitalOceanService.objects.all(), user) settings_list = structure_models.ServiceSettings.objects.filter( digitaloceanservice__in=services) for settings in settings_list: serialized_settings = core_utils.serialize_instance(settings) core_tasks.IndependentBackendMethodTask().delay( serialized_settings, 'remove_ssh_key', ssh_key.name, ssh_key.fingerprint)
def get_task_signature(cls, settings, serialized_settings, **kwargs): return core_tasks.IndependentBackendMethodTask().si( serialized_settings, 'sync', state_transition='begin_updating')