Exemple #1
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 import SupportedServices
        from . import handlers

        Tenant = self.get_model('Tenant')

        # 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',
        )
Exemple #2
0
 class Quotas(QuotaModelMixin.Quotas):
     vcpu = QuotaField(default_limit=20, is_backend=True)
     ram = QuotaField(default_limit=51200, is_backend=True)
     storage = QuotaField(default_limit=1024000, is_backend=True)
     instances = QuotaField(default_limit=30, is_backend=True)
     security_group_count = QuotaField(default_limit=100, is_backend=True)
     security_group_rule_count = QuotaField(default_limit=100,
                                            is_backend=True)
     floating_ip_count = QuotaField(default_limit=50, is_backend=True)
Exemple #3
0
 class Quotas(QuotaModelMixin.Quotas):
     vcpu = QuotaField(default_limit=20, is_backend=True)
     ram = QuotaField(default_limit=51200, is_backend=True)
     storage = QuotaField(default_limit=1024000, is_backend=True)
     instances = QuotaField(default_limit=30, is_backend=True)
     security_group_count = QuotaField(default_limit=100, is_backend=True)
     security_group_rule_count = QuotaField(default_limit=100,
                                            is_backend=True)
     floating_ip_count = QuotaField(default_limit=50, is_backend=True)
     volumes = QuotaField(default_limit=50, is_backend=True)
     volumes_size = QuotaField(is_backend=True)
     snapshots = QuotaField(default_limit=50, is_backend=True)
     snapshots_size = QuotaField(is_backend=True)
     network_count = QuotaField(default_limit=10, is_backend=True)
     subnet_count = QuotaField(default_limit=10, is_backend=True)
Exemple #4
0
 class Quotas(QuotaModelMixin.Quotas):
     test_quota = QuotaField(default_limit=1)
Exemple #5
0
    def ready(self):
        from waldur_core.core import models as core_models
        from waldur_core.quotas.fields import QuotaField
        from waldur_core.quotas import models as quota_models
        from waldur_core.structure import models as structure_models
        from waldur_core.structure import signals as structure_signals

        from . import handlers, utils, models

        for model in (structure_models.Customer, structure_models.Project):
            signals.post_save.connect(
                handlers.schedule_sync,
                sender=model,
                dispatch_uid=
                'waldur_freeipa.handlers.schedule_sync_on_%s_creation' %
                model.__class__,
            )

            signals.pre_delete.connect(
                handlers.schedule_sync,
                sender=model,
                dispatch_uid=
                'waldur_freeipa.handlers.schedule_sync_on_%s_deletion' %
                model.__class__,
            )

            structure_signals.structure_role_granted.connect(
                handlers.schedule_sync,
                sender=model,
                dispatch_uid=
                'waldur_freeipa.handlers.schedule_sync_on_%s_role_granted' %
                model.__class__,
            )

            structure_signals.structure_role_revoked.connect(
                handlers.schedule_sync,
                sender=model,
                dispatch_uid=
                'waldur_freeipa.handlers.schedule_sync_on_%s_role_revoked' %
                model.__class__,
            )

        signals.post_save.connect(
            handlers.schedule_sync_on_quota_change,
            sender=quota_models.Quota,
            dispatch_uid='waldur_freeipa.handlers.schedule_sync_on_quota_save',
        )

        signals.post_save.connect(
            handlers.schedule_ssh_key_sync_when_key_is_created,
            sender=core_models.SshPublicKey,
            dispatch_uid=
            'waldur_freeipa.handlers.schedule_ssh_key_sync_when_key_is_created',
        )

        signals.pre_delete.connect(
            handlers.schedule_ssh_key_sync_when_key_is_deleted,
            sender=core_models.SshPublicKey,
            dispatch_uid=
            'waldur_freeipa.handlers.schedule_ssh_key_sync_when_key_is_deleted',
        )

        structure_models.Customer.add_quota_field(name=utils.QUOTA_NAME,
                                                  quota_field=QuotaField())

        structure_models.Project.add_quota_field(name=utils.QUOTA_NAME,
                                                 quota_field=QuotaField())

        signals.pre_save.connect(
            handlers.log_profile_event,
            sender=models.Profile,
            dispatch_uid='waldur_freeipa.handlers.log_profile_event',
        )

        signals.pre_delete.connect(
            handlers.log_profile_deleted,
            sender=models.Profile,
            dispatch_uid='waldur_freeipa.handlers.log_profile_deleted',
        )
Exemple #6
0
    def ready(self):
        from waldur_core.quotas.fields import QuotaField, CounterQuotaField
        from waldur_core.structure 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='service_project_link.project',
            ))

        structure_models.Customer.add_quota_field(
            name='nc_allocation_count',
            quota_field=CounterQuotaField(
                target_models=lambda: [models.Allocation],
                path_to_scope='service_project_link.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',
        )
Exemple #7
0
    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 import SupportedServices
        from waldur_openstack.openstack.models import Tenant

        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='service_project_link.project',
                target_field='cores',
            ),
        )

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

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

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

        Customer.add_quota_field(
            name='os_ram_size',
            quota_field=TotalQuotaField(
                target_models=[models.Instance],
                path_to_scope='service_project_link.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='service_project_link.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.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',
        )

        signals.m2m_changed.connect(
            handlers.sync_certificates_between_openstack_service_with_openstacktenant_service,
            sender=ServiceSettings.certifications.through,
            dispatch_uid='openstack_tenant.handlers.'
            'sync_certificates_between_openstack_service_with_openstacktenant_service',
        )

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

        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',
        )