epc-as-a-service functinality moved to dedicated service
Change-Id: Id4c788a2217f412cf781642dda866ba1a6c4eb19
diff --git a/xos/models.py b/xos/models.py
index a67b509..d4d9485 100644
--- a/xos/models.py
+++ b/xos/models.py
@@ -12,19 +12,19 @@
from operator import itemgetter, attrgetter, methodcaller
from core.models import Tag
from core.models.service import LeastLoadedNodeScheduler
-from services.vsgwc.models import VSGWCService, VSGWCTenant
-from services.vpgwc.models import VPGWCService, VPGWCTenant
-from services.vhss.models import VHSSService, VHSSTenant
import traceback
from xos.exceptions import *
from xos.config import Config
-from django.contrib.contenttypes.models import ContentType
-from django.contrib.contenttypes.fields import GenericForeignKey
class VMMEService(VMMEService_decl):
class Meta:
proxy = True
+ def create_tenant(self, **kwargs):
+ t = VMMETenant(kind="vEPC", provider_service=self, connect_method="na", **kwargs)
+ t.save()
+ return t
+
class VMMETenant(VMMETenant_decl):
class Meta:
proxy = True
@@ -34,140 +34,15 @@
if vmmeservices:
self._meta.get_field("provider_service").default = vmmeservices[0].id
super(VMMETenant, self).__init__(*args, **kwargs)
- self.cached_vsgwc = None
- self.cached_vpgwc = None
- self.cached_vhss = None
-
- @property
- def vsgwc(self):
- vsgwc = self.get_newest_subscribed_tenant(VSGWCTenant)
- if not vsgwc:
- return None
-
- if (self.cached_vsgwc) and (self.cached_vsgwc.id == vsgwc.id):
- return self.cached_vsgwc
-
- vsgwc.caller = self.creator
- self.cached_vsgwc = vsgwc
- return vsgwc
-
- @vsgwc.setter
- def vsgwc(self, value):
- raise XOSConfigurationError("VMMETenant.vsgwc setter is not implemeneted")
-
- @property
- def vpgwc(self):
- vpgwc = self.get_newest_subscribed_tenant(VPGWCTenant)
- if not vpgwc:
- return None
-
- if (self.cached_vpgwc) and (self.cached_vpgwc.id == vpgwc.id):
- return self.cached_vpgwc
-
- vpgwc.caller = self.creator
- self.cached_vpgwc = vpgwc
- return vpgwc
-
- @vpgwc.setter
- def vpgwc(self, value):
- raise XOSConfigurationError("VMMETenant.vpgwc setter is not implemeneted")
-
- @property
- def vhss(self):
- vhss = self.get_newest_subscribed_tenant(VHSSTenant)
- if not vhss:
- return None
-
- if (self.cached_vhss) and (self.cached_vhss.id == vhss.id):
- return self.cached_vhss
-
- vhss.caller = self.creator
- self.cached_vhss = vhss
- return vhss
-
- @vhss.setter
- def vhss(self, value):
- raise XOSConfigurationError("VMMETenant.vhss setter is not implemeneted")
-
- # This model breaks down if there are multiple service objects
- def get_vsgwc_service(self):
- vsgwcservices = VSGWCService.get_service_objects().all()
- if not vsgwcservices:
- raise XOSConfigurationError("No VSGWC Services available")
- return vsgwcservices[0]
-
- def get_vpgwc_service(self):
- vpgwcservices = VPGWCService.get_service_objects().all()
- if not vpgwcservices:
- raise XOSConfigurationError("No VPGWC Services available")
- return vpgwcservices[0]
-
- def get_vhss_service(self):
- vhssservices = VHSSService.get_service_objects().all()
- if not vhssservices:
- raise XOSConfigurationError("No VHSS Services available")
- return vhssservices[0]
-
- def manage_vsgwc(self):
- # Each vMME object owns exactly one VSGWCTenant object
- if self.deleted:
- return
-
- if self.vsgwc is None:
- vsgwc = self.get_vsgwc_service().create_tenant(subscriber_tenant=self, creator=self.creator)
-
- def manage_vpgwc(self):
- # Each vMME object owns exactly one VPGWCTenant object
- if self.deleted:
- return
-
- if self.vpgwc is None:
- vpgwc = self.get_vpgwc_service().create_tenant(subscriber_tenant=self, creator=self.creator)
-
- def manage_vhss(self):
- # Each vMME object owns exactly one VHSSTenant object
- if self.deleted:
- return
-
- if self.vhss is None:
- vhss = self.get_vhss_service().create_tenant(subscriber_tenant=self, creator=self.creator)
-
- def cleanup_vsgwc(self):
- if self.vsgwc:
- self.vsgwc.delete()
-
- def cleanup_vpgwc(self):
- if self.vpgwc:
- self.vpgwc.delete()
-
- def cleanup_vhss(self):
- if self.vhss:
- self.vhss.delete()
-
- def cleanup_orphans(self):
- # ensure vMME only has one vSGWC, vPGWC, and vHSS
- cur_vsgwc = self.vsgwc
- cur_vpgwc = self.vpgwc
- cur_vhss = self.vhss
-
- for vsgwc in list(self.get_subscribed_tenants(VSGWCTenant)):
- if (not cur_vsgwc) or (vsgwc.id != cur_vsgwc.id):
- vsgwc.delete()
-
- for vpgwc in list(self.get_subscribed_tenants(VPGWCTenant)):
- if (not cur_vpgwc) or (vpgwc.id != cur_vpgwc.id):
- vpgwc.delete()
-
- for vhss in list(self.get_subscribed_tenants(VHSSTenant)):
- if (not cur_vhss) or (vhss.id != cur_vhss.id):
- vhss.delete()
-
- if self.orig_instance_id and (self.orig_instance_id != self.get_attribute("instance_id")):
- instances = Instance.objects.filter(id=self.orig_instance.id)
- if instances:
- instances[0].delete()
def save(self, *args, **kwargs):
+ if not self.creator:
+ if not getattr(self, "caller", None):
+ raise XOSProgrammingError("VMMETenant's self.caller was not set")
+ self.creator = self.caller
+ if not self.creator:
+ raise XOSProgrammingError("VMMETenant's self.creator was not set")
+
super(VMMETenant, self).save(*args, **kwargs)
# This call needs to happen so that an instance is created for this
# tenant is created in the slice. One instance is created per tenant.
@@ -175,9 +50,6 @@
def delete(self, *args, **kwargs):
# Delete the instance that was created for this tenant
- self.cleanup_vsgwc()
- self.cleanup_vpgwc()
- self.cleanup_vhss()
self.cleanup_container()
super(VMMETenant, self).delete(*args, **kwargs)
@@ -191,7 +63,4 @@
# Since this code is atomic it is safe to always use the first tenant
tenant = tenant[0]
tenant.manage_container()
- tenant.manage_vsgwc()
- tenant.manage_vpgwc()
- tenant.manage_vhss()
- tenant.cleanup_orphans()
+
diff --git a/xos/tosca/custom_types/vmme.m4 b/xos/tosca/custom_types/vmme.m4
index 6523810..ee511ee 100644
--- a/xos/tosca/custom_types/vmme.m4
+++ b/xos/tosca/custom_types/vmme.m4
@@ -22,6 +22,3 @@
VMME Tenant
properties:
xos_base_tenant_props
- tenant_message:
- type: string
- required: false
diff --git a/xos/tosca/custom_types/vmme.yaml b/xos/tosca/custom_types/vmme.yaml
index b7195b5..1f8aa77 100644
--- a/xos/tosca/custom_types/vmme.yaml
+++ b/xos/tosca/custom_types/vmme.yaml
@@ -92,6 +92,3 @@
type: string
required: false
description: Service specific ID opaque to XOS but meaningful to service
- tenant_message:
- type: string
- required: false
diff --git a/xos/tosca/resources/vmmetenant.py b/xos/tosca/resources/vmmetenant.py
index 2ae223c..4c6f2f7 100644
--- a/xos/tosca/resources/vmmetenant.py
+++ b/xos/tosca/resources/vmmetenant.py
@@ -6,7 +6,7 @@
provides = "tosca.nodes.VMMETenant"
xos_model = VMMETenant
name_field = None
- copyin_props = ("tenant_message",)
+ copyin_props = ()
def get_xos_args(self, throw_exception=True):
args = super(XOSVMMETenant, self).get_xos_args()
diff --git a/xos/vmme.xproto b/xos/vmme.xproto
index 4948a28..91f9453 100644
--- a/xos/vmme.xproto
+++ b/xos/vmme.xproto
@@ -12,5 +12,4 @@
message VMMETenant (TenantWithContainer){
option name = "VMMETenant";
option verbose_name = "Virtual Mobility Management Entity Tenant";
- required string tenant_message = 1 [help_text = "Tenant Message to Display", max_length = 254, null = False, db_index = False, blank = False];
}