Пример #1
0
 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'),
     )
Пример #2
0
 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)
Пример #3
0
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)
Пример #4
0
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',
        ),
    )
Пример #5
0
    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)
Пример #6
0
 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'),
     )
Пример #7
0
 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)
Пример #8
0
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)
Пример #9
0
 def get_task_signature(cls, settings, serialized_settings, **kwargs):
     return core_tasks.IndependentBackendMethodTask().si(
         serialized_settings, 'sync', state_transition='begin_updating')