diff --git a/fed_reg/flavor/crud.py b/fed_reg/flavor/crud.py index 2a1ac0f2..5a2af80f 100644 --- a/fed_reg/flavor/crud.py +++ b/fed_reg/flavor/crud.py @@ -51,9 +51,9 @@ def create( else: # It's indifferent which service, we want to reach the provider db_service = db_obj.services.single() - db_region = db_service.regions.single() + db_region = db_service.region.single() db_provider1 = db_region.provider.single() - db_region = service.regions.single() + db_region = service.region.single() db_provider2 = db_region.provider.single() if db_provider1 != db_provider2: db_obj = super().create(obj_in=obj_in) diff --git a/fed_reg/flavor/schemas_extended.py b/fed_reg/flavor/schemas_extended.py index 07289076..eefec15c 100644 --- a/fed_reg/flavor/schemas_extended.py +++ b/fed_reg/flavor/schemas_extended.py @@ -58,7 +58,7 @@ class ComputeServiceReadExtended(ComputeServiceRead): region (RegionReadExtended): Region hosting this service. """ - regions: list[RegionReadExtended] = Field(description=DOC_EXT_REG) + region: RegionReadExtended = Field(description=DOC_EXT_REG) class ComputeServiceReadExtendedPublic(ComputeServiceReadPublic): @@ -72,7 +72,7 @@ class ComputeServiceReadExtendedPublic(ComputeServiceReadPublic): region (RegionReadExtendedPublic): Region hosting this service. """ - regions: list[RegionReadExtendedPublic] = Field(description=DOC_EXT_REG) + region: RegionReadExtendedPublic = Field(description=DOC_EXT_REG) class FlavorReadExtended(BaseNodeRead, BaseReadPrivateExtended, FlavorBase): diff --git a/fed_reg/image/crud.py b/fed_reg/image/crud.py index e0d220ff..e994b60f 100644 --- a/fed_reg/image/crud.py +++ b/fed_reg/image/crud.py @@ -46,9 +46,9 @@ def create( else: # It's indifferent which service, we want to reach the provider db_service = db_obj.services.single() - db_region = db_service.regions.single() + db_region = db_service.region.single() db_provider1 = db_region.provider.single() - db_region = service.regions.single() + db_region = service.region.single() db_provider2 = db_region.provider.single() if db_provider1 != db_provider2: db_obj = super().create(obj_in=obj_in) diff --git a/fed_reg/image/schemas_extended.py b/fed_reg/image/schemas_extended.py index 0a7bcd0e..d68251a2 100644 --- a/fed_reg/image/schemas_extended.py +++ b/fed_reg/image/schemas_extended.py @@ -53,7 +53,7 @@ class ComputeServiceReadExtended(ComputeServiceRead): region (RegionReadExtended): Region hosting this service. """ - regions: list[RegionReadExtended] = Field(description=DOC_EXT_REG) + region: RegionReadExtended = Field(description=DOC_EXT_REG) class ComputeServiceReadExtendedPublic(ComputeServiceReadPublic): @@ -67,7 +67,7 @@ class ComputeServiceReadExtendedPublic(ComputeServiceReadPublic): region (RegionReadExtendedPublic): Region hosting this service. """ - regions: list[RegionReadExtendedPublic] = Field(description=DOC_EXT_REG) + region: RegionReadExtendedPublic = Field(description=DOC_EXT_REG) class ImageReadExtended(BaseNodeRead, BaseReadPrivateExtended, ImageBase): diff --git a/fed_reg/network/schemas_extended.py b/fed_reg/network/schemas_extended.py index 7078f377..4379bfd4 100644 --- a/fed_reg/network/schemas_extended.py +++ b/fed_reg/network/schemas_extended.py @@ -60,7 +60,7 @@ class NetworkServiceReadExtended(NetworkServiceRead): region (RegionReadExtended): Region hosting this service. """ - regions: list[RegionReadExtended] = Field(description=DOC_EXT_REG) + region: RegionReadExtended = Field(description=DOC_EXT_REG) class NetworkServiceReadExtendedPublic(NetworkServiceReadPublic): @@ -74,7 +74,7 @@ class NetworkServiceReadExtendedPublic(NetworkServiceReadPublic): region (RegionReadExtendedPublic): Region hosting this service. """ - regions: list[RegionReadExtendedPublic] = Field(description=DOC_EXT_REG) + region: RegionReadExtendedPublic = Field(description=DOC_EXT_REG) class NetworkReadExtended(BaseNodeRead, BaseReadPrivateExtended, NetworkBase): diff --git a/fed_reg/project/api/utils.py b/fed_reg/project/api/utils.py index fdbeec95..9452aa29 100644 --- a/fed_reg/project/api/utils.py +++ b/fed_reg/project/api/utils.py @@ -16,18 +16,18 @@ def filter_on_region_attr( # noqa: C901 for item in items: for quota in item.quotas: service = quota.service.single() - if not service.regions.get_or_none(**attrs): + if not service.region.get_or_none(**attrs): item.quotas = item.quotas.exclude(uid=quota.uid) for flavor in item.private_flavors: service = flavor.service.single() - if not service.regions.get_or_none(**attrs): + if not service.region.get_or_none(**attrs): item.private_flavors = item.private_flavors.exclude(uid=flavor.uid) for image in item.private_images: service = image.service.single() - if not service.regions.get_or_none(**attrs): + if not service.region.get_or_none(**attrs): item.private_images = item.private_images.exclude(uid=image.uid) for network in item.private_networks: service = network.service.single() - if not service.regions.get_or_none(**attrs): + if not service.region.get_or_none(**attrs): item.private_networks = item.private_networks.exclude(uid=network.uid) return items diff --git a/fed_reg/project/schemas_extended.py b/fed_reg/project/schemas_extended.py index 71e39569..13fbddbb 100644 --- a/fed_reg/project/schemas_extended.py +++ b/fed_reg/project/schemas_extended.py @@ -74,7 +74,7 @@ class BlockStorageServiceReadExtended(BlockStorageServiceRead): region (RegionRead): Region hosting this service. """ - regions: list[RegionRead] = Field(description=DOC_EXT_REG) + region: RegionRead = Field(description=DOC_EXT_REG) class BlockStorageServiceReadExtendedPublic(BlockStorageServiceReadPublic): @@ -88,7 +88,7 @@ class BlockStorageServiceReadExtendedPublic(BlockStorageServiceReadPublic): region (RegionReadPublic): Region hosting this service. """ - regions: list[RegionReadPublic] = Field(description=DOC_EXT_REG) + region: RegionReadPublic = Field(description=DOC_EXT_REG) class ComputeServiceReadExtended(ComputeServiceRead): @@ -104,7 +104,7 @@ class ComputeServiceReadExtended(ComputeServiceRead): region (RegionRead): Region hosting this service. """ - regions: list[RegionRead] = Field(description=DOC_EXT_REG) + region: RegionRead = Field(description=DOC_EXT_REG) class ComputeServiceReadExtendedPublic(ComputeServiceReadPublic): @@ -118,7 +118,7 @@ class ComputeServiceReadExtendedPublic(ComputeServiceReadPublic): region (RegionReadPublic): Region hosting this service. """ - regions: list[RegionReadPublic] = Field(description=DOC_EXT_REG) + region: RegionReadPublic = Field(description=DOC_EXT_REG) class NetworkServiceReadExtended(NetworkServiceRead): @@ -134,7 +134,7 @@ class NetworkServiceReadExtended(NetworkServiceRead): region (RegionRead): Region hosting this service. """ - regions: list[RegionRead] = Field(description=DOC_EXT_REG) + region: RegionRead = Field(description=DOC_EXT_REG) class NetworkServiceReadExtendedPublic(NetworkServiceReadPublic): @@ -148,7 +148,7 @@ class NetworkServiceReadExtendedPublic(NetworkServiceReadPublic): region (RegionReadPublic): Region hosting this service. """ - regions: list[RegionReadPublic] = Field(description=DOC_EXT_REG) + region: RegionReadPublic = Field(description=DOC_EXT_REG) class ObjectStoreServiceReadExtended(ObjectStoreServiceRead): @@ -164,7 +164,7 @@ class ObjectStoreServiceReadExtended(ObjectStoreServiceRead): region (RegionRead): Region hosting this service. """ - regions: list[RegionRead] = Field(description=DOC_EXT_REG) + region: RegionRead = Field(description=DOC_EXT_REG) class ObjectStoreServiceReadExtendedPublic(ObjectStoreServiceReadPublic): @@ -178,7 +178,7 @@ class ObjectStoreServiceReadExtendedPublic(ObjectStoreServiceReadPublic): region (RegionReadPublic): Region hosting this service. """ - regions: list[RegionReadPublic] = Field(description=DOC_EXT_REG) + region: RegionReadPublic = Field(description=DOC_EXT_REG) class BlockStorageQuotaReadExtended(BlockStorageQuotaRead): diff --git a/fed_reg/quota/schemas_extended.py b/fed_reg/quota/schemas_extended.py index 8bcb340e..9266da60 100644 --- a/fed_reg/quota/schemas_extended.py +++ b/fed_reg/quota/schemas_extended.py @@ -80,7 +80,7 @@ class BlockStorageServiceReadExtended(BlockStorageServiceRead): region (RegionReadExtended): Region hosting this service. """ - regions: list[RegionReadExtended] = Field(description=DOC_EXT_REG) + region: RegionReadExtended = Field(description=DOC_EXT_REG) class BlockStorageServiceReadExtendedPublic(BlockStorageServiceReadPublic): @@ -94,7 +94,7 @@ class BlockStorageServiceReadExtendedPublic(BlockStorageServiceReadPublic): region (RegionReadExtendedPublic): Region hosting this service. """ - regions: list[RegionReadExtendedPublic] = Field(description=DOC_EXT_REG) + region: RegionReadExtendedPublic = Field(description=DOC_EXT_REG) class ComputeServiceReadExtended(ComputeServiceRead): @@ -110,7 +110,7 @@ class ComputeServiceReadExtended(ComputeServiceRead): region (RegionReadExtended): Region hosting this service. """ - regions: list[RegionReadExtended] = Field(description=DOC_EXT_REG) + region: RegionReadExtended = Field(description=DOC_EXT_REG) class ComputeServiceReadExtendedPublic(ComputeServiceReadPublic): @@ -124,7 +124,7 @@ class ComputeServiceReadExtendedPublic(ComputeServiceReadPublic): region (RegionReadExtendedPublic): Region hosting this service. """ - regions: list[RegionReadExtendedPublic] = Field(description=DOC_EXT_REG) + region: RegionReadExtendedPublic = Field(description=DOC_EXT_REG) class NetworkServiceReadExtended(NetworkServiceRead): @@ -140,7 +140,7 @@ class NetworkServiceReadExtended(NetworkServiceRead): region (RegionReadExtended): Region hosting this service. """ - regions: list[RegionReadExtended] = Field(description=DOC_EXT_REG) + region: RegionReadExtended = Field(description=DOC_EXT_REG) class NetworkServiceReadExtendedPublic(NetworkServiceReadPublic): @@ -154,7 +154,7 @@ class NetworkServiceReadExtendedPublic(NetworkServiceReadPublic): region (RegionReadExtendedPublic): Region hosting this service. """ - regions: list[RegionReadExtendedPublic] = Field(description=DOC_EXT_REG) + region: RegionReadExtendedPublic = Field(description=DOC_EXT_REG) class ObjectStoreServiceReadExtended(ObjectStoreServiceRead): @@ -170,7 +170,7 @@ class ObjectStoreServiceReadExtended(ObjectStoreServiceRead): region (RegionReadExtended): Region hosting this service. """ - regions: list[RegionReadExtended] = Field(description=DOC_EXT_REG) + region: RegionReadExtended = Field(description=DOC_EXT_REG) class ObjectStoreServiceReadExtendedPublic(ObjectStoreServiceReadPublic): @@ -184,7 +184,7 @@ class ObjectStoreServiceReadExtendedPublic(ObjectStoreServiceReadPublic): region (RegionReadExtendedPublic): Region hosting this service. """ - regions: list[RegionReadExtendedPublic] = Field(description=DOC_EXT_REG) + region: RegionReadExtendedPublic = Field(description=DOC_EXT_REG) class BlockStorageQuotaReadExtended( diff --git a/fed_reg/service/crud.py b/fed_reg/service/crud.py index 4b0d461a..790f6284 100644 --- a/fed_reg/service/crud.py +++ b/fed_reg/service/crud.py @@ -102,8 +102,10 @@ def create( """ if projects is None: projects = [] - db_obj = super().create(obj_in=obj_in) - db_obj.regions.connect(region) + db_obj = region.services.filter(endpoint=obj_in.endpoint, type=obj_in.type) + if not db_obj: + db_obj = super().create(obj_in=obj_in) + db_obj.region.connect(region) for item in obj_in.quotas: db_projects = list(filter(lambda x: x.uuid == item.project, projects)) if len(db_projects) == 1: @@ -245,10 +247,10 @@ def create( """ if projects is None: projects = [] - db_obj = self.get(endpoint=obj_in.endpoint) + db_obj = region.services.filter(endpoint=obj_in.endpoint, type=obj_in.type) if not db_obj: db_obj = super().create(obj_in=obj_in) - db_obj.regions.connect(region) + db_obj.region.connect(region) for item in obj_in.flavors: db_projects = list(filter(lambda x: x.uuid in item.projects, projects)) flavor_mng.create(obj_in=item, service=db_obj, projects=db_projects) @@ -475,14 +477,14 @@ def create( Connect the service to the given region. """ - db_obj = self.get(endpoint=obj_in.endpoint) + db_obj = region.services.filter(endpoint=obj_in.endpoint, type=obj_in.type) if not db_obj: db_obj = super().create(obj_in=obj_in) + db_obj.region.connect(region) else: updated_data = self.update(db_obj=db_obj, obj_in=obj_in) if updated_data: db_obj = updated_data - db_obj.regions.connect(region) return db_obj @@ -513,10 +515,10 @@ def create( """ if projects is None: projects = [] - db_obj = self.get(endpoint=obj_in.endpoint) + db_obj = region.services.filter(endpoint=obj_in.endpoint, type=obj_in.type) if not db_obj: db_obj = super().create(obj_in=obj_in) - db_obj.regions.connect(region) + db_obj.region.connect(region) for item in obj_in.networks: db_projects = list(filter(lambda x: x.uuid == item.project, projects)) db_project = None @@ -705,10 +707,10 @@ def create( """ if projects is None: projects = [] - db_obj = self.get(endpoint=obj_in.endpoint) + db_obj = region.services.filter(endpoint=obj_in.endpoint, type=obj_in.type) if not db_obj: db_obj = super().create(obj_in=obj_in) - db_obj.regions.connect(region) + db_obj.region.connect(region) for item in obj_in.quotas: db_projects = list(filter(lambda x: x.uuid == item.project, projects)) if len(db_projects) == 1: diff --git a/fed_reg/service/models.py b/fed_reg/service/models.py index de3315c8..acbff9d2 100644 --- a/fed_reg/service/models.py +++ b/fed_reg/service/models.py @@ -1,6 +1,6 @@ """Neomodel models of the Service supplied by a Provider on a specific Region.""" from neomodel import ( - OneOrMore, + One, RelationshipFrom, RelationshipTo, StringProperty, @@ -29,12 +29,12 @@ class Service(StructuredNode): uid = UniqueIdProperty() description = StringProperty(default="") - endpoint = StringProperty(unique_index=True, required=True) + endpoint = StringProperty(required=True) type = StringProperty(required=True) name = StringProperty(required=True) - regions = RelationshipFrom( - "fed_reg.region.models.Region", "SUPPLY", cardinality=OneOrMore + region = RelationshipFrom( + "fed_reg.region.models.Region", "SUPPLY", cardinality=One ) diff --git a/fed_reg/service/schemas_extended.py b/fed_reg/service/schemas_extended.py index c59fc336..a7da2107 100644 --- a/fed_reg/service/schemas_extended.py +++ b/fed_reg/service/schemas_extended.py @@ -239,7 +239,7 @@ class BlockStorageServiceReadExtended( quotas (list of BlockStorageQuotaReadExtended): Quotas pointing to this service. """ - regions: list[RegionReadExtended] = Field(description=DOC_EXT_REG) + region: RegionReadExtended = Field(description=DOC_EXT_REG) quotas: list[BlockStorageQuotaReadExtended] = Field(description=DOC_EXT_QUOTA) @@ -258,7 +258,7 @@ class BlockStorageServiceReadExtendedPublic( service. """ - regions: list[RegionReadExtendedPublic] = Field(description=DOC_EXT_REG) + region: RegionReadExtendedPublic = Field(description=DOC_EXT_REG) quotas: list[BlockStorageQuotaReadExtendedPublic] = Field(description=DOC_EXT_QUOTA) @@ -280,7 +280,7 @@ class ComputeServiceReadExtended( quotas (list of ComputeQuotaReadExtended): Quotas pointing to this service. """ - regions: list[RegionReadExtended] = Field(description=DOC_EXT_REG) + region: RegionReadExtended = Field(description=DOC_EXT_REG) quotas: list[ComputeQuotaReadExtended] = Field(description=DOC_EXT_QUOTA) flavors: list[FlavorRead] = Field(description=DOC_EXT_FLAV) images: list[ImageRead] = Field(description=DOC_EXT_IMAG) @@ -303,7 +303,7 @@ class ComputeServiceReadExtendedPublic( service. """ - regions: list[RegionReadExtendedPublic] = Field(description=DOC_EXT_REG) + region: RegionReadExtendedPublic = Field(description=DOC_EXT_REG) quotas: list[ComputeQuotaReadExtendedPublic] = Field(description=DOC_EXT_QUOTA) flavors: list[FlavorReadPublic] = Field(description=DOC_EXT_FLAV) images: list[ImageReadPublic] = Field(description=DOC_EXT_IMAG) @@ -324,7 +324,7 @@ class IdentityServiceReadExtended( region (RegionReadExtended): Region hosting this service. """ - regions: list[RegionReadExtended] = Field(description=DOC_EXT_REG) + region: RegionReadExtended = Field(description=DOC_EXT_REG) class IdentityServiceReadExtendedPublic( @@ -340,7 +340,7 @@ class IdentityServiceReadExtendedPublic( region (RegionReadExtendedPublic): Region hosting this service. """ - regions: list[RegionReadExtendedPublic] = Field(description=DOC_EXT_REG) + region: RegionReadExtendedPublic = Field(description=DOC_EXT_REG) class NetworkServiceReadExtended( @@ -360,7 +360,7 @@ class NetworkServiceReadExtended( quotas (list of NetworkQuotaReadExtended): Quotas pointing to this service. """ - regions: list[RegionReadExtended] = Field(description=DOC_EXT_REG) + region: RegionReadExtended = Field(description=DOC_EXT_REG) quotas: list[NetworkQuotaReadExtended] = Field(description=DOC_EXT_QUOTA) networks: list[NetworkRead] = Field(description=DOC_EXT_NETW) @@ -381,7 +381,7 @@ class NetworkServiceReadExtendedPublic( service. """ - regions: list[RegionReadExtendedPublic] = Field(description=DOC_EXT_REG) + region: RegionReadExtendedPublic = Field(description=DOC_EXT_REG) quotas: list[NetworkQuotaReadExtendedPublic] = Field(description=DOC_EXT_QUOTA) networks: list[NetworkReadPublic] = Field(description=DOC_EXT_NETW) @@ -403,7 +403,7 @@ class ObjectStoreServiceReadExtended( service. """ - regions: list[RegionReadExtended] = Field(description=DOC_EXT_REG) + region: RegionReadExtended = Field(description=DOC_EXT_REG) quotas: list[ObjectStoreQuotaReadExtended] = Field(description=DOC_EXT_QUOTA) @@ -422,7 +422,7 @@ class ObjectStoreServiceReadExtendedPublic( service. """ - regions: list[RegionReadExtendedPublic] = Field(description=DOC_EXT_REG) + region: RegionReadExtendedPublic = Field(description=DOC_EXT_REG) quotas: list[ObjectStoreQuotaReadExtendedPublic] = Field( description=DOC_EXT_QUOTA ) diff --git a/fed_reg/user_group/api/utils.py b/fed_reg/user_group/api/utils.py index bb21738e..c8b0efd0 100644 --- a/fed_reg/user_group/api/utils.py +++ b/fed_reg/user_group/api/utils.py @@ -40,7 +40,7 @@ def filter_on_region_attr( for project in sla.projects: for quota in project.quotas: service = quota.service.single() - if not service.regions.get_or_none(**attrs): + if not service.region.get_or_none(**attrs): project.quotas = project.quotas.exclude(uid=quota.uid) if len(project.quotas) == 0: sla.projects = sla.projects.exclude(uid=project.uid)