コード例 #1
0
    def ready(self):
        from waldur_core.structure.registry import SupportedServices
        from waldur_core.structure import models as structure_models

        from waldur_openstack.openstack_tenant.models import Instance

        from .backend import RancherBackend
        from . import handlers, models, signals as rancher_signals

        SupportedServices.register_backend(RancherBackend)

        rancher_signals.rancher_user_created.connect(
            handlers.notify_create_user,
            sender=models.RancherUser,
            dispatch_uid='waldur_rancher.notify_create_user',
        )

        signals.post_delete.connect(
            handlers.delete_node_if_related_instance_has_been_deleted,
            sender=Instance,
            dispatch_uid=
            'waldur_rancher.delete_node_if_related_instance_has_been_deleted',
        )

        signals.post_delete.connect(
            handlers.delete_cluster_if_all_related_nodes_have_been_deleted,
            sender=models.Node,
            dispatch_uid=
            'waldur_rancher.delete_cluster_if_all_related_nodes_have_been_deleted',
        )

        signals.post_save.connect(
            handlers.
            set_error_state_for_node_if_related_instance_deleting_is_failed,
            sender=Instance,
            dispatch_uid=
            'waldur_rancher.set_error_state_for_node_if_related_instance_deleting_is_failed',
        )

        signals.post_save.connect(
            handlers.
            set_error_state_for_cluster_if_related_node_deleting_is_failed,
            sender=models.Node,
            dispatch_uid=
            'waldur_rancher.set_error_state_for_cluster_if_related_node_deleting_is_failed',
        )

        for klass in (models.Project, models.Cluster,
                      structure_models.ServiceSettings):
            signals.post_delete.connect(
                handlers.delete_catalog_if_scope_has_been_deleted,
                sender=klass,
                dispatch_uid=
                'waldur_rancher.delete_catalog_if_scope_has_been_deleted_(%s)'
                % klass.__name__,
            )
コード例 #2
0
    def ready(self):
        from waldur_core.quotas import fields as quota_fields
        from waldur_core.structure.registry import SupportedServices
        from waldur_core.structure import models as structure_models
        from waldur_core.structure.signals import resource_imported

        from . import handlers
        from .backend import JiraBackend

        SupportedServices.register_backend(JiraBackend)

        Issue = self.get_model('Issue')
        Comment = self.get_model('Comment')
        Project = self.get_model('Project')

        structure_models.Project.add_quota_field(
            name='nc_jira_project_count',
            quota_field=quota_fields.CounterQuotaField(
                target_models=lambda: [Project],
                path_to_scope='project',
            ),
        )

        resource_imported.connect(
            handlers.import_project_issues,
            sender=Project,
            dispatch_uid='waldur_jira.handlers.import_project_issues',
        )

        signals.post_save.connect(
            handlers.log_issue_save,
            sender=Issue,
            dispatch_uid='waldur_jira.handlers.log_issue_save',
        )

        signals.post_delete.connect(
            handlers.log_issue_delete,
            sender=Issue,
            dispatch_uid='waldur_jira.handlers.log_issue_delete',
        )

        signals.post_save.connect(
            handlers.log_comment_save,
            sender=Comment,
            dispatch_uid='waldur_jira.handlers.log_comment_save',
        )

        signals.post_delete.connect(
            handlers.log_comment_delete,
            sender=Comment,
            dispatch_uid='waldur_jira.handlers.log_comment_delete',
        )
コード例 #3
0
ファイル: schemas.py プロジェクト: virtengine/ve-waldur-v2
def get_field_type(field):
    """
    Returns field type/possible values.
    """
    if isinstance(field, core_filters.MappedMultipleChoiceFilter):
        return ' | '.join(['"%s"' % f for f in sorted(field.mapped_to_model)])
    if isinstance(field, OrderingFilter) or isinstance(field, ChoiceFilter):
        return ' | '.join(['"%s"' % f[0] for f in field.extra['choices']])
    if isinstance(field, ChoiceField):
        return ' | '.join(['"%s"' % f for f in sorted(field.choices)])
    if isinstance(field, HyperlinkedRelatedField):
        if field.view_name.endswith('detail'):
            return 'link to %s' % reverse(
                field.view_name,
                kwargs={
                    '%s' % field.lookup_field: "'%s'" % field.lookup_field
                },
            )
        return reverse(field.view_name)
    if isinstance(field, structure_filters.ServiceTypeFilter):
        return ' | '.join([
            '"%s"' % f for f in SupportedServices.get_filter_mapping().keys()
        ])
    if isinstance(field, core_serializers.GenericRelatedField):
        links = []
        for model in field.related_models:
            detail_view_name = core_utils.get_detail_view_name(model)
            for f in field.lookup_fields:
                try:
                    link = reverse(detail_view_name,
                                   kwargs={'%s' % f: "'%s'" % f})
                except NoReverseMatch:
                    pass
                else:
                    links.append(link)
                    break
        path = ', '.join(links)
        if path:
            return 'link to any: %s' % path
    if isinstance(field, core_filters.ContentTypeFilter):
        return "string in form 'app_label'.'model_name'"
    if isinstance(field, ModelMultipleChoiceFilter):
        return get_field_type(field.field)
    if isinstance(field, ListSerializer):
        return 'list of [%s]' % get_field_type(field.child)
    if isinstance(field, ManyRelatedField):
        return 'list of [%s]' % get_field_type(field.child_relation)
    if isinstance(field, ModelField):
        return get_field_type(field.model_field)

    name = field.__class__.__name__
    for w in ('Filter', 'Field', 'Serializer'):
        name = name.replace(w, '')
    return FIELDS.get(name, name)
コード例 #4
0
    def ready(self):
        from waldur_core.structure.registry import SupportedServices

        from .backend import VMwareBackend
        from . import handlers, models

        SupportedServices.register_backend(VMwareBackend)

        signals.post_save.connect(
            handlers.update_vm_total_disk_when_disk_is_created_or_updated,
            sender=models.Disk,
            dispatch_uid='waldur_vmware.handlers.'
            'update_vm_total_disk_when_disk_is_created_or_updated',
        )

        signals.post_delete.connect(
            handlers.update_vm_total_disk_when_disk_is_deleted,
            sender=models.Disk,
            dispatch_uid='waldur_vmware.handlers.'
            'update_vm_total_disk_when_disk_is_deleted',
        )
コード例 #5
0
ファイル: apps.py プロジェクト: virtengine/ve-waldur-v2
    def ready(self):
        from waldur_core.structure.registry import SupportedServices

        from .backend import AWSBackend

        SupportedServices.register_backend(AWSBackend)
コード例 #6
0
ファイル: admin.py プロジェクト: virtengine/ve-waldur-v2
 def lookups(self, request, model_admin):
     return SupportedServices.get_choices()
コード例 #7
0
ファイル: admin.py プロジェクト: virtengine/ve-waldur-v2
 def __init__(self, *args, **kwargs):
     super(ServiceSettingsAdminForm, self).__init__(*args, **kwargs)
     self.fields['type'] = ChoiceField(
         choices=SupportedServices.get_choices(), widget=RadioSelect
     )
コード例 #8
0
ファイル: models.py プロジェクト: virtengine/ve-waldur-v2
 def get_backend(self, **kwargs):
     return SupportedServices.get_service_backend(self.type)(self, **kwargs)
コード例 #9
0
ファイル: models.py プロジェクト: virtengine/ve-waldur-v2
def validate_service_type(service_type):
    from django.core.exceptions import ValidationError

    if not SupportedServices.has_service_type(service_type):
        raise ValidationError(_('Invalid service type.'))
コード例 #10
0
ファイル: filters.py プロジェクト: virtengine/ve-waldur-v2
 def filter(self, qs, value):
     value = SupportedServices.get_filter_mapping().get(value)
     return super(ServiceTypeFilter, self).filter(qs, value)
コード例 #11
0
ファイル: __init__.py プロジェクト: virtengine/ve-waldur-v2
 def ready(self):
     SupportedServices.register_backend(TestBackend)
コード例 #12
0
ファイル: apps.py プロジェクト: virtengine/ve-waldur-v2
    def ready(self):
        from waldur_core.quotas.fields import QuotaField, TotalQuotaField
        from waldur_core.quotas.models import Quota
        from waldur_core.structure.models import (
            ServiceSettings,
            Project,
            Customer,
            SharedServiceSettings,
        )
        from waldur_core.structure.registry import SupportedServices
        from waldur_openstack.openstack.models import Tenant, SecurityGroupRule

        from .backend import OpenStackTenantBackend
        from . import handlers, models

        SupportedServices.register_backend(OpenStackTenantBackend)

        # Initialize service settings quotas based on tenant.
        for quota in Tenant.get_quotas_fields():
            ServiceSettings.add_quota_field(
                name=quota.name,
                quota_field=QuotaField(
                    is_backend=True,
                    default_limit=quota.default_limit,
                    creation_condition=lambda service_settings:
                    service_settings.type == OpenStackTenantConfig.
                    service_name,
                ),
            )

        signals.post_save.connect(
            handlers.sync_private_settings_quotas_with_tenant_quotas,
            sender=Quota,
            dispatch_uid=
            'openstack_tenant.handlers.sync_private_settings_quotas_with_tenant_quotas',
        )

        signals.post_save.connect(
            handlers.
            propagate_volume_type_quotas_from_tenant_to_private_service_settings,
            sender=Quota,
            dispatch_uid=
            'openstack_tenant.handlers.propagate_volume_type_quotas_from_tenant_to_private_service_settings',
        )

        signals.post_delete.connect(
            handlers.delete_volume_type_quotas_from_private_service_settings,
            sender=Quota,
            dispatch_uid=
            'openstack_tenant.handlers.delete_volume_type_quotas_from_private_service_settings',
        )

        Project.add_quota_field(
            name='os_cpu_count',
            quota_field=TotalQuotaField(
                target_models=[models.Instance],
                path_to_scope='project',
                target_field='cores',
            ),
        )

        Project.add_quota_field(
            name='os_ram_size',
            quota_field=TotalQuotaField(
                target_models=[models.Instance],
                path_to_scope='project',
                target_field='ram',
            ),
        )

        Project.add_quota_field(
            name='os_storage_size',
            quota_field=TotalQuotaField(
                target_models=[models.Volume, models.Snapshot],
                path_to_scope='project',
                target_field='size',
            ),
        )

        Customer.add_quota_field(
            name='os_cpu_count',
            quota_field=TotalQuotaField(
                target_models=[models.Instance],
                path_to_scope='project.customer',
                target_field='cores',
            ),
        )

        Customer.add_quota_field(
            name='os_ram_size',
            quota_field=TotalQuotaField(
                target_models=[models.Instance],
                path_to_scope='project.customer',
                target_field='ram',
            ),
        )

        Customer.add_quota_field(
            name='os_storage_size',
            quota_field=TotalQuotaField(
                target_models=[models.Volume, models.Snapshot],
                path_to_scope='project.customer',
                target_field='size',
            ),
        )

        for Resource in (models.Instance, models.Volume, models.Snapshot):
            name = Resource.__name__.lower()
            signals.post_save.connect(
                handlers.log_action,
                sender=Resource,
                dispatch_uid='openstack_tenant.handlers.log_%s_action' % name,
            )

        for handler in handlers.resource_handlers:
            model = handler.resource_model
            name = model.__name__.lower()

            fsm_signals.post_transition.connect(
                handler.create_handler,
                sender=model,
                dispatch_uid='openstack_tenant.handlers.create_%s' % name,
            )

            fsm_signals.post_transition.connect(
                handler.update_handler,
                sender=model,
                dispatch_uid='openstack_tenant.handlers.update_%s' % name,
            )

            signals.post_save.connect(
                handler.import_handler,
                sender=model,
                dispatch_uid='openstack_tenant.handlers.import_%s' % name,
            )

            signals.post_delete.connect(
                handler.delete_handler,
                sender=model,
                dispatch_uid='openstack_tenant.handlers.delete_%s' % name,
            )

        signals.post_save.connect(
            handlers.
            sync_security_group_rule_property_when_resource_is_updated_or_created,
            sender=SecurityGroupRule,
            dispatch_uid='openstack_tenant.handlers.'
            'sync_security_group_rule_property_when_resource_is_updated_or_created',
        )

        signals.post_delete.connect(
            handlers.sync_security_group_rule_on_delete,
            sender=SecurityGroupRule,
            dispatch_uid=
            'openstack_tenant.handlers.sync_security_group_rule_on_delete',
        )

        signals.post_save.connect(
            handlers.log_backup_schedule_creation,
            sender=models.BackupSchedule,
            dispatch_uid=
            'openstack_tenant.handlers.log_backup_schedule_creation',
        )

        signals.post_save.connect(
            handlers.log_backup_schedule_action,
            sender=models.BackupSchedule,
            dispatch_uid='openstack_tenant.handlers.log_backup_schedule_action',
        )

        signals.pre_delete.connect(
            handlers.log_backup_schedule_deletion,
            sender=models.BackupSchedule,
            dispatch_uid=
            'openstack_tenant.handlers.log_backup_schedule_deletion',
        )

        signals.post_save.connect(
            handlers.log_snapshot_schedule_creation,
            sender=models.SnapshotSchedule,
            dispatch_uid=
            'openstack_tenant.handlers.log_snapshot_schedule_creation',
        )

        signals.post_save.connect(
            handlers.log_snapshot_schedule_action,
            sender=models.SnapshotSchedule,
            dispatch_uid=
            'openstack_tenant.handlers.log_snapshot_schedule_action',
        )

        signals.pre_delete.connect(
            handlers.log_snapshot_schedule_deletion,
            sender=models.SnapshotSchedule,
            dispatch_uid=
            'openstack_tenant.handlers.log_snapshot_schedule_deletion',
        )

        signals.post_save.connect(
            handlers.update_service_settings_credentials,
            sender=Tenant,
            dispatch_uid=
            'openstack_tenant.handlers.update_service_settings_credentials',
        )

        signals.post_save.connect(
            handlers.update_service_settings,
            sender=Tenant,
            dispatch_uid='openstack_tenant.handlers.update_service_settings',
        )

        fsm_signals.post_transition.connect(
            handlers.mark_private_settings_as_erred_if_tenant_creation_failed,
            sender=Tenant,
            dispatch_uid=
            'openstack_tenant.handlers.mark_private_settings_as_erred_if_tenant_creation_failed',
        )

        signals.post_save.connect(
            handlers.
            copy_flavor_exclude_regex_to_openstacktenant_service_settings,
            sender=ServiceSettings,
            dispatch_uid='openstack_tenant.handlers.'
            'copy_flavor_exclude_regex_to_openstacktenant_service_settings',
        )

        for model in (SharedServiceSettings, ServiceSettings):
            signals.post_save.connect(
                handlers.copy_config_drive_to_openstacktenant_service_settings,
                sender=model,
                dispatch_uid='openstack_tenant.handlers.'
                'copy_config_drive_to_openstacktenant_service_settings_%s' %
                model.__class__,
            )

        signals.post_save.connect(
            handlers.create_service_from_tenant,
            sender=Tenant,
            dispatch_uid='openstack_tenant.handlers.create_service_from_tenant',
        )
コード例 #13
0
    def ready(self):
        from waldur_core.quotas.fields import QuotaField, CounterQuotaField
        from waldur_core.structure.registry import SupportedServices
        from waldur_core.structure import models as structure_models
        from waldur_core.structure import signals as structure_signals
        from waldur_freeipa import models as freeipa_models

        from .backend import SlurmBackend
        from . import handlers, models, utils

        SupportedServices.register_backend(SlurmBackend)

        signals.post_save.connect(
            handlers.process_user_creation,
            sender=freeipa_models.Profile,
            dispatch_uid='waldur_slurm.handlers.process_user_creation',
        )

        signals.pre_delete.connect(
            handlers.process_user_deletion,
            sender=freeipa_models.Profile,
            dispatch_uid='waldur_slurm.handlers.process_user_deletion',
        )

        structure_models_with_roles = (
            structure_models.Customer,
            structure_models.Project,
        )
        for model in structure_models_with_roles:
            structure_signals.structure_role_granted.connect(
                handlers.process_role_granted,
                sender=model,
                dispatch_uid='waldur_slurm.handlers.process_role_granted.%s' %
                model.__class__,
            )

            structure_signals.structure_role_revoked.connect(
                handlers.process_role_revoked,
                sender=model,
                dispatch_uid='waldur_slurm.handlers.process_role_revoked.%s' %
                model.__class__,
            )

        for quota in utils.QUOTA_NAMES:
            structure_models.Customer.add_quota_field(
                name=quota, quota_field=QuotaField(is_backend=True))

            structure_models.Project.add_quota_field(
                name=quota, quota_field=QuotaField(is_backend=True))

        structure_models.Project.add_quota_field(
            name='nc_allocation_count',
            quota_field=CounterQuotaField(
                target_models=lambda: [models.Allocation],
                path_to_scope='project',
            ),
        )

        structure_models.Customer.add_quota_field(
            name='nc_allocation_count',
            quota_field=CounterQuotaField(
                target_models=lambda: [models.Allocation],
                path_to_scope='project.customer',
            ),
        )

        signals.post_save.connect(
            handlers.update_quotas_on_allocation_usage_update,
            sender=models.Allocation,
            dispatch_uid=
            'waldur_slurm.handlers.update_quotas_on_allocation_usage_update',
        )
コード例 #14
0
ファイル: apps.py プロジェクト: virtengine/ve-waldur-v2
    def ready(self):
        from waldur_core.structure.registry import SupportedServices

        from .backend import DigitalOceanBackend

        SupportedServices.register_backend(DigitalOceanBackend)
コード例 #15
0
    def ready(self):
        from waldur_core.core import models as core_models
        from waldur_core.quotas.fields import QuotaField
        from waldur_core.structure import models as structure_models
        from waldur_core.structure import signals as structure_signals
        from waldur_core.structure.registry import SupportedServices
        from . import handlers

        Tenant = self.get_model('Tenant')
        Network = self.get_model('Network')
        SubNet = self.get_model('SubNet')
        SecurityGroup = self.get_model('SecurityGroup')
        SecurityGroupRule = self.get_model('SecurityGroupRule')

        # structure
        from .backend import OpenStackBackend

        SupportedServices.register_backend(OpenStackBackend)

        from . import quotas

        quotas.inject_tenant_quotas()

        for resource in ('vcpu', 'ram', 'storage'):
            structure_models.ServiceSettings.add_quota_field(
                name='openstack_%s' % resource,
                quota_field=QuotaField(
                    creation_condition=lambda service_settings:
                    service_settings.type == OpenStackConfig.service_name),
            )

        for model in (structure_models.Project, structure_models.Customer):
            structure_signals.structure_role_revoked.connect(
                handlers.remove_ssh_key_from_tenants,
                sender=model,
                dispatch_uid=
                'openstack.handlers.remove_ssh_key_from_tenants__%s' %
                model.__name__,
            )

        signals.pre_delete.connect(
            handlers.remove_ssh_key_from_all_tenants_on_it_deletion,
            sender=core_models.SshPublicKey,
            dispatch_uid=
            'openstack.handlers.remove_ssh_key_from_all_tenants_on_it_deletion',
        )

        from waldur_core.quotas.models import Quota

        signals.post_save.connect(
            handlers.log_tenant_quota_update,
            sender=Quota,
            dispatch_uid='openstack.handlers.log_tenant_quota_update',
        )

        signals.post_save.connect(
            handlers.update_service_settings_name,
            sender=Tenant,
            dispatch_uid='openstack.handlers.update_service_settings_name',
        )

        signals.post_delete.connect(
            handlers.log_security_group_cleaned,
            sender=SecurityGroup,
            dispatch_uid='openstack.handlers.log_security_group_cleaned',
        )

        signals.post_delete.connect(
            handlers.log_security_group_rule_cleaned,
            sender=SecurityGroupRule,
            dispatch_uid='openstack.handlers.log_security_group_rule_cleaned',
        )

        signals.post_delete.connect(
            handlers.log_network_cleaned,
            sender=Network,
            dispatch_uid='openstack.handlers.log_network_cleaned',
        )

        signals.post_delete.connect(
            handlers.log_subnet_cleaned,
            sender=SubNet,
            dispatch_uid='openstack.handlers.log_subnet_cleaned',
        )
コード例 #16
0
 def test_get_service_backend(self):
     self.assertEqual(
         TestBackend,
         SupportedServices.get_service_backend(TestConfig.service_name))