CORD-1250 Implement ServiceInstance and related models

Change-Id: I16acc70562d79013f00e6346d6fb33b786c863ed
diff --git a/xos/core/admin.py b/xos/core/admin.py
index 5b357e7..152ef1c 100644
--- a/xos/core/admin.py
+++ b/xos/core/admin.py
@@ -850,8 +850,8 @@
         return tabs
 
 
-class TenantAttributeAdmin(XOSBaseAdmin):
-    model = TenantAttribute
+class ServiceInstanceAttributeAdmin(XOSBaseAdmin):
+    model = ServiceInstanceAttribute
     list_display = ('backend_status_icon', 'tenant', 'name', 'value')
     list_display_links = ('backend_status_icon', 'name')
     fieldList = ('backend_status_text', 'tenant', 'name', 'value', )
@@ -861,78 +861,30 @@
 
     suit_form_tabs = (('general', 'Tenant Root Details'),
                       )
+class ProviderLinkInline(XOSTabularInline):
+    model = ServiceInstanceLink
+    fields = ['provider_service_instance', 'subscriber_service_instance', 'subscriber_service']
+    extra = 0
+    suit_classes = 'suit-tab suit-tab-servicelinks'
+    fk_name = 'provider_service_instance'
+    verbose_name = 'provided links'
+    verbose_name_plural = 'provided links'
+
+class SubscriberLinkInline(XOSTabularInline):
+    model = ServiceInstanceLink
+    fields = ['provider_service_instance', 'subscriber_service_instance', 'subscriber_service']
+    extra = 0
+    suit_classes = 'suit-tab suit-tab-servicelinks'
+    fk_name = 'subscriber_service_instance'
+    verbose_name = 'subscribed links'
+    verbose_name_plural = 'subscribed links'
 
 
-class TenantAttrAsTabInline(XOSTabularInline):
-    model = TenantAttribute
+class ServiceInstanceAttrAsTabInline(XOSTabularInline):
+    model = ServiceInstanceAttribute
     fields = ['name', 'value']
     extra = 0
-    suit_classes = 'suit-tab suit-tab-tenantattrs'
-
-
-class TenantRootRoleAdmin(XOSBaseAdmin):
-    model = TenantRootRole
-    fields = ('role',)
-
-
-class TenantRootTenantInline(XOSTabularInline):
-    model = Tenant
-    fields = ['provider_service', 'subscriber_root']
-    extra = 0
-    suit_classes = 'suit-tab suit-tab-tenantroots'
-    fk_name = 'subscriber_root'
-    verbose_name = 'subscribed tenant'
-    verbose_name_plural = 'subscribed tenants'
-
-    # def queryset(self, request):
-    #    qs = super(TenantRootTenantInline, self).queryset(request)
-    #    return qs.filter(kind="coarse")
-
-
-class TenantRootPrivilegeInline(XOSTabularInline):
-    model = TenantRootPrivilege
-    extra = 0
-    suit_classes = 'suit-tab suit-tab-tenantrootprivileges'
-    fields = ['backend_status_icon', 'user', 'role', 'tenant_root']
-    readonly_fields = ('backend_status_icon', )
-
-    def queryset(self, request):
-        return TenantRootPrivilege.select_by_user(request.user)
-
-
-class TenantRootAdmin(XOSBaseAdmin):
-    model = TenantRoot
-    list_display = ('backend_status_icon', 'name', 'kind')
-    list_display_links = ('backend_status_icon', 'name')
-    fieldList = ('backend_status_text', 'name', 'kind', )
-    fieldsets = [
-        (None, {'fields': fieldList, 'classes': ['suit-tab suit-tab-general']})]
-    inlines = (TenantRootTenantInline, TenantRootPrivilegeInline)
-    readonly_fields = ('backend_status_text', )
-
-    suit_form_tabs = (('general', 'Tenant Root Details'),
-                      ('tenantroots', 'Tenancy'),
-                      ('tenantrootprivileges', 'Privileges')
-                      )
-
-
-class TenantRoleAdmin(XOSBaseAdmin):
-    """Admin for TenantRoles."""
-    model = TenantRole
-    fields = ('role',)
-
-
-class TenantPrivilegeInline(XOSTabularInline):
-    """Inline for adding a TenantPrivilege to a Tenant."""
-    model = TenantPrivilege
-    extra = 0
-    suit_classes = 'suit-tab suit-tab-tenantprivileges'
-    fields = ['backend_status_icon', 'user', 'role', 'tenant']
-    readonly_fields = ('backend_status_icon', )
-
-    def queryset(self, request):
-        return TenantPrivilege.select_by_user(request.user)
-
+    suit_classes = 'suit-tab suit-tab-serviceinstanceattrs'
 
 class ProviderDependencyInline(XOSTabularInline):
     model = ServiceDependency
@@ -959,6 +911,12 @@
     extra = 0
     suit_classes = 'suit-tab suit-tab-serviceattrs'
 
+class ServiceInterfaceAsTabInline(XOSTabularInline):
+    model = ServiceInterface
+    fields = ['interface_type']
+    extra = 0
+    suit_classes = 'suit-tab suit-tab-serviceinterfaces'
+
 class ServiceMonitoringAgentInfoInline(XOSTabularInline):
     model = ServiceMonitoringAgentInfo
     fields = ['name', 'target_uri']
@@ -976,7 +934,7 @@
     fieldsets = [
         (None, {'fields': fieldList, 'classes': ['suit-tab suit-tab-general']})]
     inlines = [ServiceAttrAsTabInline, SliceInline, ProviderDependencyInline,
-               SubscriberDependencyInline, ServicePrivilegeInline, ServiceMonitoringAgentInfoInline]
+               SubscriberDependencyInline, ServicePrivilegeInline, ServiceMonitoringAgentInfoInline, ServiceInterfaceAsTabInline]
     readonly_fields = ('backend_status_text', )
 
     user_readonly_fields = fieldList
@@ -986,6 +944,7 @@
                       ('serviceattrs', 'Additional Attributes'),
                       ('servicetenants', 'Dependencies'),
                       ('serviceprivileges', 'Privileges'),
+                      ('serviceinterfaces', 'Interfaces'),
                       ('servicemonitoringagents', 'Monitoring Agents')
                       )
 
@@ -1963,10 +1922,7 @@
     admin.site.register(Image, ImageAdmin)
     admin.site.register(DashboardView, DashboardViewAdmin)
     admin.site.register(Flavor, FlavorAdmin)
-    admin.site.register(TenantRoot, TenantRootAdmin)
-    admin.site.register(TenantRootRole, TenantRootRoleAdmin)
-    admin.site.register(TenantRole, TenantRoleAdmin)
-    admin.site.register(TenantAttribute, TenantAttributeAdmin)
+    admin.site.register(ServiceInstanceAttribute, ServiceInstanceAttributeAdmin)
     admin.site.register(AddressPool, AddressPoolAdmin)
     admin.site.register(Diag, DiagAdmin)
 
diff --git a/xos/core/models/attic/serviceinstance_model.py b/xos/core/models/attic/serviceinstance_model.py
new file mode 100644
index 0000000..d1de2f6
--- /dev/null
+++ b/xos/core/models/attic/serviceinstance_model.py
@@ -0,0 +1,43 @@
+def __init__(self, *args, **kwargs):
+    super(ServiceInstance, self).__init__(*args, **kwargs)
+
+@property
+def tenantattribute_dict(self):
+    attrs = {}
+    for attr in self.tenantattributes.all():
+        attrs[attr.name] = attr.value
+    return attrs
+
+# helper function to be used in subclasses that want to ensure
+# service_specific_id is unique
+
+def validate_unique_service_specific_id(self, none_okay=False):
+    if not none_okay and (self.service_specific_id is None):
+        raise XOSMissingField("subscriber_specific_id is None, and it's a required field", fields={
+                              "service_specific_id": "cannot be none"})
+
+    if self.service_specific_id:
+        conflicts = self.__class__.objects.filter(
+            service_specific_id=self.service_specific_id)
+        if self.pk:
+            conflicts = conflicts.exclude(pk=self.pk)
+        if conflicts:
+            raise XOSDuplicateKey("service_specific_id %s already exists" % self.service_specific_id, fields={
+                                  "service_specific_id": "duplicate key"})
+
+def get_subscribed_tenants(self, tenant_class):
+    """ Return all ServiceInstances of class tenant_class that have a link to this ServiceInstance """
+    results=[]
+    # TODO: Make query more efficient
+    for si in tenant_class.objects.all():
+        for link in si.subscribed_links.all():
+            if link.provider_service_instance == self:
+                results.append(si)
+    return results
+
+def get_newest_subscribed_tenant(self, kind):
+    st = list(self.get_subscribed_tenants(kind))
+    if not st:
+        return None
+    return sorted(st, key=attrgetter('id'))[0]
+
diff --git a/xos/core/models/attic/tenant_top.py b/xos/core/models/attic/serviceinstance_top.py
similarity index 100%
rename from xos/core/models/attic/tenant_top.py
rename to xos/core/models/attic/serviceinstance_top.py
diff --git a/xos/core/models/attic/serviceinstancelink.model b/xos/core/models/attic/serviceinstancelink.model
new file mode 100644
index 0000000..4e670c8
--- /dev/null
+++ b/xos/core/models/attic/serviceinstancelink.model
@@ -0,0 +1,8 @@
+def save(self, *args, **kwargs):
+    subCount = sum([1 for e in [self.subscriber_service, self.subscriber_service_instance, self.subscriber_network] if e is not None])
+    if (subCount > 1):
+        raise XOSConflictingField(
+            "Only one of subscriber_service, subscriber_service_instance, subscriber_network should be set")
+
+    super(ServiceInstanceLink, self).save(*args, **kwargs)
+
diff --git a/xos/core/models/attic/tenantprivilege_model.py b/xos/core/models/attic/tenantprivilege_model.py
deleted file mode 100644
index 0b59d81..0000000
--- a/xos/core/models/attic/tenantprivilege_model.py
+++ /dev/null
@@ -1,17 +0,0 @@
-def can_update(self, user):
-    return user.can_update_tenant_privilege(self)
-
-@classmethod
-def select_by_user(cls, user):
-    if user.is_admin:
-        return cls.objects.all()
-    else:
-        # User can see his own privilege
-        trp_ids = [trp.id for trp in cls.objects.filter(user=user)]
-
-        # A tenant admin can see the TenantPrivileges for their Tenants
-        for priv in cls.objects.filter(user=user, role__role="admin"):
-            trp_ids.extend(
-                [trp.id for trp in cls.objects.filter(tenant=priv.tenant)])
-
-        return cls.objects.filter(id__in=trp_ids)
diff --git a/xos/core/models/attic/tenantrootprivilege_model.py b/xos/core/models/attic/tenantrootprivilege_model.py
deleted file mode 100644
index c3048f0..0000000
--- a/xos/core/models/attic/tenantrootprivilege_model.py
+++ /dev/null
@@ -1,18 +0,0 @@
-def can_update(self, user):
-    return user.can_update_tenant_root_privilege(self)
-
-@classmethod
-def select_by_user(cls, user):
-    if user.is_admin:
-        return cls.objects.all()
-    else:
-        # User can see his own privilege
-        trp_ids = [trp.id for trp in cls.objects.filter(user=user)]
-
-        # A slice admin can see the SlicePrivileges for his Slice
-        for priv in cls.objects.filter(user=user, role__role="admin"):
-            trp_ids.extend(
-                [trp.id for trp in cls.objects.filter(tenant_root=priv.tenant_root)])
-
-        return cls.objects.filter(id__in=trp_ids)
-
diff --git a/xos/core/models/core.xproto b/xos/core/models/core.xproto
index 0eb6db7..524a62c 100644
--- a/xos/core/models/core.xproto
+++ b/xos/core/models/core.xproto
@@ -334,7 +334,7 @@
 message Service (XOSBase,AttributeMixin) {
      optional string description = 1 [help_text = "Description of Service", max_length = 254, null = True, db_index = False, blank = True, varchar = True];
      required bool enabled = 2 [default = True, null = False, db_index = False, blank = True];
-     required string kind = 3 [default = "generic", max_length = 30, content_type = "stripped", blank = False, help_text = "Kind of service", null = False, db_index = False];
+     required string kind = 3 [default = "generic", max_length = 30, content_type = "stripped", blank = False, help_text = "Kind of service", null = False, db_index = False, choices="(('generic', 'Generic'), ('data', 'Data Plane'), ('control', 'Control Plane'))"];
      required string name = 4 [max_length = 30, content_type = "stripped", blank = False, help_text = "Service Name", null = False, db_index = False];
      optional string versionNumber = 5 [max_length = 30, content_type = "stripped", blank = True, help_text = "Version of Service Definition", null = True, db_index = False];
      required bool published = 6 [default = True, null = False, db_index = False, blank = True];
@@ -355,8 +355,8 @@
 
 
 message ServiceDependency (XOSBase) {
-     required manytoone provider_service->Service:providedDependencies = 1 [help_text = "The service that provides this dependency", null=False, db_index = True, blank=False];
-     required manytoone subscriber_service->Service:subscribedDependencies = 2 [help_text = "The services that subscribes to this dependency", null=False, db_index=True, blank=False];
+     required manytoone provider_service->Service:provided_dependencies = 1 [help_text = "The service that provides this dependency", null=False, db_index = True, blank=False];
+     required manytoone subscriber_service->Service:subscribed_dependencies = 2 [help_text = "The services that subscribes to this dependency", null=False, db_index=True, blank=False];
      required string connect_method = 3 [max_length = 30, help_text = "method to connect the two services", null=False, blank=False, default="none", choices = "(('none', 'None'), ('private', 'Private'), ('public', 'Public'))"];
 }
 
@@ -460,54 +460,38 @@
      required uint32 object_id = 5 [db_index = False, null = False, blank = False, help_text = "Object linked to this tag"];
 }
 
-message Tenant (XOSBase,AttributeMixin) {
-     optional string name = 1 [db_index = False, max_length = 200, null = True, content_type = "stripped", blank = True];
-     required string kind = 2 [default = "generic", max_length = 30, content_type = "stripped", blank = False, null = False, db_index = False];
-     required manytoone provider_service->Service:provided_tenants = 3 [db_index = True, null = False, blank = False];
-     optional manytoone subscriber_service->Service:subscribed_tenants = 4 [db_index = True, null = True, blank = True];
-     optional manytoone subscriber_tenant->Tenant:subscribed_tenants = 5 [db_index = True, null = True, blank = True];
-     optional manytoone subscriber_user->User:subscribed_tenants = 6 [db_index = True, null = True, blank = True];
-     optional manytoone subscriber_root->TenantRoot:subscribed_tenants = 7 [db_index = True, null = True, blank = True];
-     optional manytoone subscriber_network->Network:subscribed_tenants = 8 [db_index = True, null = True, blank = True];
-     optional string service_specific_id = 9 [db_index = False, max_length = 30, null = True, content_type = "stripped", blank = True];
-     optional string service_specific_attribute = 10 [db_index = False, null = True, blank = True, varchar = True];
-     required string connect_method = 11 [default = "na", choices = "(('public', 'Public'), ('private', 'Private'), ('private-unidirectional', 'Private Unidirectional'), ('na', 'Not Applicable'))", max_length = 30, blank = False, null = False, db_index = False];
+message InterfaceType (XOSBase) {
+     required string name = 1 [db_index = False, max_length = 200, null = False, content_type = "stripped", blank = False];
+     required string direction = 2 [db_index = False, max_length = 30, null = False, content_type = "stripped", blank = False, choices = "(('in', 'In'), ('out', 'Out'))"];
 }
 
-message TenantAttribute (XOSBase) {
+message ServiceInterface (XOSBase) {
+     required manytoone service->Service:service_interfaces = 1 [db_index = True, null = False, blank = False];
+     required manytoone interface_type->InterfaceType:service_interfaces = 2 [db_index = True, null = False, blank = False];
+}
+
+message ServiceInstance (XOSBase, AttributeMixin) {
+     optional string name = 1 [db_index = False, max_length = 200, null = True, content_type = "stripped", blank = True];
+     required manytoone owner->Service:service_instances = 2 [db_index = True, null = False, blank = False];
+     optional string service_specific_id = 3 [db_index = False, max_length = 30, null = True, content_type = "stripped", blank = True];
+     optional string service_specific_attribute = 10 [db_index = False, null = True, blank = True, varchar = True];
+}
+
+message ServiceInstanceLink (XOSBase) {
+     required manytoone provider_service_instance->ServiceInstance:provided_links = 1 [db_index = True, null = False, blank = False];
+     optional manytoone provider_service_interface->ServiceInterface:provided_links = 2 [db_index = True, null = True, blank = True];
+     optional manytoone subscriber_service_instance->ServiceInstance:subscribed_links = 3 [db_index = True, null = True, blank = True];
+     optional manytoone subscriber_service->Service:subscribed_links = 4 [db_index = True, null = True, blank = True];
+     optional manytoone subscriber_network->Network:subscribed_links = 5 [db_index = True, null = True, blank = True];
+}
+
+message ServiceInstanceAttribute (XOSBase) {
      required string name = 1 [help_text = "Attribute Name", max_length = 128, null = False, db_index = False, blank = False];
      required string value = 2 [help_text = "Attribute Value", null = False, db_index = False, blank = False];
-     required manytoone tenant->Tenant:tenantattributes = 3 [help_text = "The Tenant this attribute is associated with", null = False, db_index = True, blank = False];
+     required manytoone service_instance->ServiceInstance:service_instance_attributes = 3 [help_text = "The Tenant this attribute is associated with", null = False, db_index = True, blank = False];
 }
 
-message TenantPrivilege (XOSBase) {
-     required manytoone user->User:tenantprivileges = 1 [db_index = True, null = False, blank = False];
-     required manytoone tenant->Tenant:tenantprivileges = 2 [db_index = True, null = False, blank = False];
-     required manytoone role->TenantRole:tenantprivileges = 3 [db_index = True, null = False, blank = False];
-}
-
-message TenantRole (XOSBase) {
-     required string role = 1 [choices = "(('admin', 'Admin'), ('access', 'Access'))", max_length = 30, content_type = "stripped", blank = False, null = False, db_index = False];
-}
-
-message TenantRoot (XOSBase,AttributeMixin) {
-     required string kind = 1 [default = "generic", max_length = 30, content_type = "stripped", blank = False, null = False, db_index = False];
-     optional string name = 2 [max_length = 255, content_type = "stripped", blank = True, help_text = "name", null = True, db_index = False];
-     optional string service_specific_attribute = 3 [db_index = False, null = True, blank = True, varchar = True];
-     optional string service_specific_id = 4 [db_index = False, max_length = 30, null = True, content_type = "stripped", blank = True];
-}
-
-message TenantRootPrivilege (XOSBase) {
-     required manytoone user->User:tenant_root_privileges = 1 [db_index = True, null = False, blank = False, unique_with = "tenant_root"];
-     required manytoone tenant_root->TenantRoot:tenant_root_privileges = 2 [db_index = True, null = False, blank = False, unique_with = "role"];
-     required manytoone role->TenantRootRole:tenant_root_privileges = 3 [db_index = True, null = False, blank = False];
-}
-
-message TenantRootRole (XOSBase) {
-     required string role = 1 [choices = "(('admin', 'Admin'), ('access', 'Access'))", max_length = 30, content_type = "stripped", blank = False, null = False, db_index = False];
-}
-
-message TenantWithContainer (Tenant) {
+message TenantWithContainer (ServiceInstance) {
      optional manytoone instance->Instance:+ = 1 [help_text = "Instance used by this Tenant", null = True, db_index = True, blank = True];
      optional manytoone creator->User:+ = 2 [help_text = "Creator of this Tenant", null = True, db_index = True, blank = True];
      optional string external_hostname = 3 [max_length = 30, content_type = "stripped", blank = True, help_text = "External host name", null = True, db_index = False];
diff --git a/xos/synchronizers/new_base/model_policies/model_policy_tenantwithcontainer.py b/xos/synchronizers/new_base/model_policies/model_policy_tenantwithcontainer.py
index 7a1b098..41fa0a5 100644
--- a/xos/synchronizers/new_base/model_policies/model_policy_tenantwithcontainer.py
+++ b/xos/synchronizers/new_base/model_policies/model_policy_tenantwithcontainer.py
@@ -99,15 +99,33 @@
 
         ap.save()  # save the AddressPool to account for address being removed from it
 
+        subscriber_service = None
+        if "subscriber_service" in kwargs:
+            subscriber_service = kwargs.pop("subscriber_service")
+
+        subscriber_service_instance = None
+        if "subscriber_tenant" in kwargs:
+            subscriber_service_instance = kwargs.pop("subscriber_tenant")
+        elif "subscriber_service_instance" in kwargs:
+            subscriber_service_instance = kwargs.pop("subscriber_service_instance")
+
         # TODO: potential partial failure -- AddressPool address is allocated and saved before vrouter tenant
 
         t = None
         try:
-            t = VRouterTenant(provider_service=vrouter_service, **kwargs)    # TODO: Hardcoded dependency
+            t = VRouterTenant(owner=vrouter_service, **kwargs)    # TODO: Hardcoded dependency
             t.public_ip = ip
             t.public_mac = self.ip_to_mac(ip)
             t.address_pool_id = ap.id
             t.save()
+
+            if subscriber_service:
+                link = ServiceInstanceLink(subscriber_service = subscriber_service, provider_service_instance=t)
+                link.save()
+
+            if subscriber_service_instance:
+                link = ServiceInstanceLink(subscriber_service_instance = subscriber_service_instance, provider_service_instance=t)
+                link.save()
         except:
             # cleanup if anything went wrong
             ap.put_address(ip)
@@ -118,7 +136,7 @@
         return t
 
     def get_image(self, tenant):
-        slice = tenant.provider_service.slices.all()
+        slice = tenant.owner.slices.all()
         if not slice:
             raise SynchronizerProgrammingError("provider service has no slice")
         slice = slice[0]
@@ -176,18 +194,18 @@
             tenant.instance = None
 
         if tenant.instance is None:
-            if not tenant.provider_service.slices.count():
+            if not tenant.owner.slices.count():
                 raise SynchronizerConfigurationError("The service has no slices")
 
             new_instance_created = False
             instance = None
             if self.get_legacy_tenant_attribute(tenant, "use_same_instance_for_multiple_tenants", default=False):
                 # Find if any existing instances can be used for this tenant
-                slices = tenant.provider_service.slices.all()
+                slices = tenant.owner.slices.all()
                 instance = self.pick_least_loaded_instance_in_slice(slices, desired_image)
 
             if not instance:
-                slice = tenant.provider_service.slices.first()
+                slice = tenant.owner.slices.first()
 
                 flavor = slice.default_flavor
                 if not flavor:
diff --git a/xos/tosca/custom_types/xos.m4 b/xos/tosca/custom_types/xos.m4
index 58e3a81..63248b6 100644
--- a/xos/tosca/custom_types/xos.m4
+++ b/xos/tosca/custom_types/xos.m4
@@ -99,6 +99,24 @@
             xos_base_props
             xos_base_service_props
 
+    tosca.nodes.InterfaceType:
+        derived_from: tosca.nodes.Root
+        description: >
+            An interface type.
+        properties:
+            xos_base_props
+            direction:
+                type: string
+                required: false
+                description: Direction of interface
+
+    tosca.nodes.ServiceInterface:
+        derived_from: tosca.nodes.Root
+        description: >
+            An interface for the service.
+        properties:
+            xos_base_props
+
     tosca.nodes.ServiceController:
         derived_from: tosca.nodes.Root
         description: >
@@ -1475,6 +1493,9 @@
     tosca.relationships.UsedByXOS:
         derived_from: tosca.relationships.Root
 
+    tosca.relationships.IsType:
+        derived_from: tosca.relationships.Root
+
     tosca.capabilities.xos.Service:
         derived_from: tosca.capabilities.Root
         description: An XOS Service
diff --git a/xos/tosca/custom_types/xos.yaml b/xos/tosca/custom_types/xos.yaml
index aa578d0..7ecb3ae 100644
--- a/xos/tosca/custom_types/xos.yaml
+++ b/xos/tosca/custom_types/xos.yaml
@@ -207,6 +207,54 @@
                 required: false
                 description: Version number of Service.
 
+    tosca.nodes.InterfaceType:
+        derived_from: tosca.nodes.Root
+        description: >
+            An interface type.
+        properties:
+            no-delete:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to delete this object
+            no-create:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to create this object
+            no-update:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to update this object
+            replaces:
+                type: string
+                required: false
+                descrption: Replaces/renames this object
+            direction:
+                type: string
+                required: false
+                description: Direction of interface
+
+    tosca.nodes.ServiceInterface:
+        derived_from: tosca.nodes.Root
+        description: >
+            An interface for the service.
+        properties:
+            no-delete:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to delete this object
+            no-create:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to create this object
+            no-update:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to update this object
+            replaces:
+                type: string
+                required: false
+                descrption: Replaces/renames this object
+
     tosca.nodes.ServiceController:
         derived_from: tosca.nodes.Root
         description: >
@@ -1778,6 +1826,59 @@
                 required: false
                 description: gateway mac address
 
+    tosca.nodes.Privilege:
+        derived_from: tosca.nodes.Root
+        description: >
+            A permission granted to an accessor (a user, slice etc.) towards some type of access
+        capabilities:
+            privilege:
+                type: tosca.capabilities.xos.privilege
+        properties:
+            no-delete:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to delete this object
+            no-create:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to create this object
+            no-update:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to update this object
+            replaces:
+                type: string
+                required: false
+                descrption: Replaces/renames this object
+            accessor_id:
+                type: integer
+                required: true
+                description: id of the object representing the accessor
+            accessor_type:
+                type: string
+                required: true
+                description: name of the model representing the accessor
+            object_id:
+                type: integer
+                required: true
+                description: id of the object being accessed
+            object_type:
+                type: string
+                required: true
+                description: name of the model representing the object being accessed
+            permission:
+                type: string
+                required: true
+                description: a custom name that defines the type of access
+            granted:
+                type: string
+                required: false
+                description: time at which the permission was granted
+            expires:
+                type: string
+                required: false
+                description: time at which the permission is set to expire
+
     tosca.nodes.Image:
         derived_from: tosca.nodes.Root
         description: >
@@ -2317,6 +2418,14 @@
         derived_from: tosca.relationships.Root
         valid_target_types: [ tosca.capabilities.xos.Image ]
 
+    tosca.relationships.HasPrivilege:
+        derived_from: tosca.relationships.Root
+        valid_target_types: [ tosca.capabilities.xos.Privilege ]
+
+    tosca.relationships.SupportsPrivilege:
+        derived_from: tosca.relationships.Root
+        valid_target_types: [ tosca.capabilities.xos.Privilege ]
+
     tosca.relationships.ConnectsToSlice:
         derived_from: tosca.relationships.Root
         valid_target_types: [ tosca.capabilities.xos.Slice ]
@@ -2398,6 +2507,9 @@
     tosca.relationships.UsedByXOS:
         derived_from: tosca.relationships.Root
 
+    tosca.relationships.IsType:
+        derived_from: tosca.relationships.Root
+
     tosca.capabilities.xos.Service:
         derived_from: tosca.capabilities.Root
         description: An XOS Service
@@ -2485,3 +2597,7 @@
     tosca.capabilities.xos.AddressPool:
         derived_from: tosca.capabilities.Root
         description: An XOS AddressPool
+
+    tosca.capabilities.xos.Privilege:
+        derived_from: tosca.capabilities.Root
+        description: An XOS Privilege
diff --git a/xos/tosca/resources/interfacetype.py b/xos/tosca/resources/interfacetype.py
new file mode 100644
index 0000000..b91413f
--- /dev/null
+++ b/xos/tosca/resources/interfacetype.py
@@ -0,0 +1,11 @@
+from xosresource import XOSResource
+from core.models import InterfaceType
+
+class XOSInterfaceType(XOSResource):
+    provides = "tosca.nodes.InterfaceType"
+    xos_model = InterfaceType
+    copyin_props = ["direction"]
+
+    def get_existing_objs(self):
+        args = self.get_xos_args()
+        return self.xos_model.objects.filter(**{self.name_field: self.obj_name, "direction": args["direction"]})
diff --git a/xos/tosca/resources/network.py b/xos/tosca/resources/network.py
index 817d5b8..7724167 100644
--- a/xos/tosca/resources/network.py
+++ b/xos/tosca/resources/network.py
@@ -1,5 +1,5 @@
 from xosresource import XOSResource
-from core.models import Slice,User,Network,NetworkTemplate,NetworkSlice,Service,Tenant
+from core.models import Slice,User,Network,NetworkTemplate,NetworkSlice,Service,ServiceInstanceLink
 
 class XOSNetwork(XOSResource):
     provides = ["tosca.nodes.network.Network", "tosca.nodes.network.Network.XOS"]
@@ -59,27 +59,26 @@
         for provider_service_name in self.get_requirements("tosca.relationships.TenantOfService"):
             provider_service = self.get_xos_object(Service, name=provider_service_name)
 
-            existing_tenancy = Tenant.objects.filter(provider_service = provider_service, subscriber_network = obj)
-            if existing_tenancy:
+            existing_links = ServiceInstanceLink.objects.filter(subscriber_network = obj, provider_service_instance__owner=provider_service)
+
+            if existing_links:
                 self.info("Tenancy relationship from %s to %s already exists" % (str(obj), str(provider_service)))
             else:
+                # TODO: Break hardcoded dependencies
+                # TODO: Rethink relationship between networks and vrouter tenants
                 if provider_service.kind == "vROUTER":
                     from services.vrouter.models import VRouterService
-                    tenancy = VRouterService.objects.get(id=provider_service.id).get_tenant(address_pool_name="addresses_"+obj.name, subscriber_network=obj)
-                    tenancy.save()
-                    obj.subnet = tenancy.cidr
+                    si = VRouterService.objects.get(id=provider_service.id).get_tenant(address_pool_name="addresses_"+obj.name)
+                    si.save()
+                    link = ServiceInstanceLink(provider_service_instance=si, subscriber_network=obj)
+                    link.save()
+
+                    obj.subnet = si.cidr
                 else:
                     raise Exception("The only network tenancy relationships that are allowed are to vRouter services")
 
                 self.info("Created Tenancy relationship from %s to %s" % (str(obj), str(provider_service)))
 
-#        v = self.get_property("permitted_slices")
-#        if v:
-#            for slicename in v.split(","):
-#                slice = self.get_xos_object(Slice, name = slicename.strip())
-#
-#                if not obj.permitted_slices.filter(id = slice.id).exists():
-#                    obj.permitted_slices.add(slice)
 
     def create(self):
         nodetemplate = self.nodetemplate
diff --git a/xos/tosca/resources/serviceinterface.py b/xos/tosca/resources/serviceinterface.py
new file mode 100644
index 0000000..3d5a5b0
--- /dev/null
+++ b/xos/tosca/resources/serviceinterface.py
@@ -0,0 +1,27 @@
+from xosresource import XOSResource
+from core.models import Service, InterfaceType, ServiceInterface
+
+class XOSServiceInterface(XOSResource):
+    provides = "tosca.nodes.ServiceInterface"
+    xos_model = ServiceInterface
+    copyin_props = []
+    name_field = None
+
+    def get_xos_args(self):
+        args = super(XOSServiceInterface, self).get_xos_args()
+
+        serviceName = self.get_requirement("tosca.relationships.MemberOfService", throw_exception=True)
+        service = self.get_xos_object(Service, name=serviceName)
+        args["service"] = service
+
+        typeName = self.get_requirement("tosca.relationships.IsType", throw_exception=True)
+        interface_type = self.get_xos_object(InterfaceType, name=typeName)
+        args["interface_type"] = interface_type
+
+        return args
+
+    def get_existing_objs(self):
+        args = self.get_xos_args()
+        return self.xos_model.objects.filter(service=args["service"], interface_type=args["interface_type"])
+
+
diff --git a/xos/tosca/resources/tenant.py b/xos/tosca/resources/tenant.py
deleted file mode 100644
index 716008a..0000000
--- a/xos/tosca/resources/tenant.py
+++ /dev/null
@@ -1,62 +0,0 @@
-import importlib
-
-from xosresource import XOSResource
-from toscaparser.tosca_template import ToscaTemplate
-from core.models import Tenant, Service, TenantRoot
-
-class XOSTenant(XOSResource):
-    provides = "tosca.nodes.Tenant"
-    xos_model = Tenant
-    copyin_props = ("kind", "service_specific_attribute")
-
-    def get_xos_args(self, throw_exception=True):
-        args = super(XOSTenant, self).get_xos_args()
-
-        provider_name = self.get_requirement("tosca.relationships.MemberOfService", throw_exception=throw_exception)
-        if provider_name:
-            args["provider_service"] = self.get_xos_object(Service, throw_exception=throw_exception, name=provider_name)
-
-        subscriber_name = self.get_requirement("tosca.relationships.BelongsToSubscriber")
-        if subscriber_name:
-            args["subscriber_root"] = self.get_xos_object(TenantRoot, throw_exception=throw_exception,
-                                                          name=subscriber_name)
-
-        tenant_name = self.get_requirement("tosca.relationships.BelongsToTenant")
-        if tenant_name:
-            args["subscriber_tenant"] = self.get_xos_object(Tenant, throw_exception=throw_exception,
-                                                          name=tenant_name)
-
-        return args
-
-    def get_existing_objs(self):
-        args = self.get_xos_args(throw_exception=False)
-        provider_service = args.get("provider_service", None)
-        if provider_service:
-            return [ self.get_xos_object(provider_service=provider_service) ]
-        return []
-
-    def create(self):
-        model_class = self.get_property("model")
-        if model_class:
-            model_name = ".".join(model_class.split(".")[:-1])
-            class_name = model_class.split(".")[-1]
-            module = importlib.import_module(model_name)
-            xos_model = getattr(module, class_name)
-        else:
-            xos_model = self.xos_model
-
-        xos_args = self.get_xos_args()
-        xos_obj = xos_model(**xos_args)
-        xos_obj.caller = self.user
-        xos_obj.save()
-
-        self.info("Created %s '%s'" % (self.xos_model.__name__,str(xos_obj)))
-
-        self.postprocess(xos_obj)
-
-    def postprocess(self, obj):
-        pass
-
-    def can_delete(self, obj):
-        return super(XOSTenant, self).can_delete(obj)
-
diff --git a/xos/tosca/resources/tenantrole.py b/xos/tosca/resources/tenantrole.py
deleted file mode 100644
index ffb6171..0000000
--- a/xos/tosca/resources/tenantrole.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from xosresource import XOSResource
-from core.models import TenantRole
-
-class XOSTenantRole(XOSResource):
-    provides = "tosca.nodes.TenantRole"
-    xos_model = TenantRole
-    name_field = "role"
-
-    def get_xos_args(self):
-        args = super(XOSTenantRole, self).get_xos_args()
-
-        return args
-
-    def delete(self, obj):
-        super(XOSTenantRole, self).delete(obj)
-
-
-
diff --git a/xos/xos/apps.py b/xos/xos/apps.py
index b30f462..1f09b51 100644
--- a/xos/xos/apps.py
+++ b/xos/xos/apps.py
@@ -10,5 +10,5 @@
       {'label': 'Sites', 'icon': 'icon-site', 'url': '/admin/core/site/'},
       {'label': 'Slices', 'icon': 'icon-slice', 'url': '/admin/core/slice/'},
       {'label': 'Users', 'icon': 'icon-user', 'url': '/admin/core/user/'},
-      {'label': 'Services', 'icon': 'icon-cog', 'url': '/serviceGrid/'},
+      {'label': 'Services', 'icon': 'icon-cog', 'url': '/admin/core/service/'},
     )
diff --git a/xos/xos/xosapi.py b/xos/xos/xosapi.py
index 5b7e310..e403e54 100644
--- a/xos/xos/xosapi.py
+++ b/xos/xos/xosapi.py
@@ -51,36 +51,30 @@
         url(r'xos/images/$', ImageList.as_view(), name='image-list-legacy'),
         url(r'xos/images/(?P<pk>[a-zA-Z0-9\-]+)/$', ImageDetail.as_view(), name ='image-detail-legacy'),
     
-        url(r'xos/networkparameters/$', NetworkParameterList.as_view(), name='networkparameter-list-legacy'),
-        url(r'xos/networkparameters/(?P<pk>[a-zA-Z0-9\-]+)/$', NetworkParameterDetail.as_view(), name ='networkparameter-detail-legacy'),
+        url(r'xos/controllernetworks/$', ControllerNetworkList.as_view(), name='controllernetwork-list-legacy'),
+        url(r'xos/controllernetworks/(?P<pk>[a-zA-Z0-9\-]+)/$', ControllerNetworkDetail.as_view(), name ='controllernetwork-detail-legacy'),
     
         url(r'xos/sites/$', SiteList.as_view(), name='site-list-legacy'),
         url(r'xos/sites/(?P<pk>[a-zA-Z0-9\-]+)/$', SiteDetail.as_view(), name ='site-detail-legacy'),
     
-        url(r'xos/tenantrootroles/$', TenantRootRoleList.as_view(), name='tenantrootrole-list-legacy'),
-        url(r'xos/tenantrootroles/(?P<pk>[a-zA-Z0-9\-]+)/$', TenantRootRoleDetail.as_view(), name ='tenantrootrole-detail-legacy'),
-    
         url(r'xos/slice_roles/$', SliceRoleList.as_view(), name='slicerole-list-legacy'),
         url(r'xos/slice_roles/(?P<pk>[a-zA-Z0-9\-]+)/$', SliceRoleDetail.as_view(), name ='slicerole-detail-legacy'),
     
         url(r'xos/xosguiextensions/$', XOSGuiExtensionList.as_view(), name='xosguiextension-list-legacy'),
         url(r'xos/xosguiextensions/(?P<pk>[a-zA-Z0-9\-]+)/$', XOSGuiExtensionDetail.as_view(), name ='xosguiextension-detail-legacy'),
     
-        url(r'xos/tenantprivileges/$', TenantPrivilegeList.as_view(), name='tenantprivilege-list-legacy'),
-        url(r'xos/tenantprivileges/(?P<pk>[a-zA-Z0-9\-]+)/$', TenantPrivilegeDetail.as_view(), name ='tenantprivilege-detail-legacy'),
-    
-        url(r'xos/tags/$', TagList.as_view(), name='tag-list-legacy'),
-        url(r'xos/tags/(?P<pk>[a-zA-Z0-9\-]+)/$', TagDetail.as_view(), name ='tag-detail-legacy'),
+        url(r'xos/serviceinstancelinks/$', ServiceInstanceLinkList.as_view(), name='serviceinstancelink-list-legacy'),
+        url(r'xos/serviceinstancelinks/(?P<pk>[a-zA-Z0-9\-]+)/$', ServiceInstanceLinkDetail.as_view(), name ='serviceinstancelink-detail-legacy'),
     
         url(r'xos/slice_privileges/$', SlicePrivilegeList.as_view(), name='sliceprivilege-list-legacy'),
         url(r'xos/slice_privileges/(?P<pk>[a-zA-Z0-9\-]+)/$', SlicePrivilegeDetail.as_view(), name ='sliceprivilege-detail-legacy'),
     
+        url(r'xos/controllerprivileges/$', ControllerPrivilegeList.as_view(), name='controllerprivilege-list-legacy'),
+        url(r'xos/controllerprivileges/(?P<pk>[a-zA-Z0-9\-]+)/$', ControllerPrivilegeDetail.as_view(), name ='controllerprivilege-detail-legacy'),
+    
         url(r'xos/flavors/$', FlavorList.as_view(), name='flavor-list-legacy'),
         url(r'xos/flavors/(?P<pk>[a-zA-Z0-9\-]+)/$', FlavorDetail.as_view(), name ='flavor-detail-legacy'),
     
-        url(r'xos/ports/$', PortList.as_view(), name='port-list-legacy'),
-        url(r'xos/ports/(?P<pk>[a-zA-Z0-9\-]+)/$', PortDetail.as_view(), name ='port-detail-legacy'),
-    
         url(r'xos/serviceroles/$', ServiceRoleList.as_view(), name='servicerole-list-legacy'),
         url(r'xos/serviceroles/(?P<pk>[a-zA-Z0-9\-]+)/$', ServiceRoleDetail.as_view(), name ='servicerole-detail-legacy'),
     
@@ -90,9 +84,6 @@
         url(r'xos/controllerslices/$', ControllerSliceList.as_view(), name='controllerslice-list-legacy'),
         url(r'xos/controllerslices/(?P<pk>[a-zA-Z0-9\-]+)/$', ControllerSliceDetail.as_view(), name ='controllerslice-detail-legacy'),
     
-        url(r'xos/tenantroles/$', TenantRoleList.as_view(), name='tenantrole-list-legacy'),
-        url(r'xos/tenantroles/(?P<pk>[a-zA-Z0-9\-]+)/$', TenantRoleDetail.as_view(), name ='tenantrole-detail-legacy'),
-    
         url(r'xos/servicedependencys/$', ServiceDependencyList.as_view(), name='servicedependency-list-legacy'),
         url(r'xos/servicedependencys/(?P<pk>[a-zA-Z0-9\-]+)/$', ServiceDependencyDetail.as_view(), name ='servicedependency-detail-legacy'),
     
@@ -105,8 +96,8 @@
         url(r'xos/diags/$', DiagList.as_view(), name='diag-list-legacy'),
         url(r'xos/diags/(?P<pk>[a-zA-Z0-9\-]+)/$', DiagDetail.as_view(), name ='diag-detail-legacy'),
     
-        url(r'xos/tenantattributes/$', TenantAttributeList.as_view(), name='tenantattribute-list-legacy'),
-        url(r'xos/tenantattributes/(?P<pk>[a-zA-Z0-9\-]+)/$', TenantAttributeDetail.as_view(), name ='tenantattribute-detail-legacy'),
+        url(r'xos/ports/$', PortList.as_view(), name='port-list-legacy'),
+        url(r'xos/ports/(?P<pk>[a-zA-Z0-9\-]+)/$', PortDetail.as_view(), name ='port-detail-legacy'),
     
         url(r'xos/instances/$', InstanceList.as_view(), name='instance-list-legacy'),
         url(r'xos/instances/(?P<pk>[a-zA-Z0-9\-]+)/$', InstanceDetail.as_view(), name ='instance-detail-legacy'),
@@ -114,9 +105,15 @@
         url(r'xos/roles/$', RoleList.as_view(), name='role-list-legacy'),
         url(r'xos/roles/(?P<pk>[a-zA-Z0-9\-]+)/$', RoleDetail.as_view(), name ='role-detail-legacy'),
     
+        url(r'xos/serviceinterfaces/$', ServiceInterfaceList.as_view(), name='serviceinterface-list-legacy'),
+        url(r'xos/serviceinterfaces/(?P<pk>[a-zA-Z0-9\-]+)/$', ServiceInterfaceDetail.as_view(), name ='serviceinterface-detail-legacy'),
+    
         url(r'xos/nodelabels/$', NodeLabelList.as_view(), name='nodelabel-list-legacy'),
         url(r'xos/nodelabels/(?P<pk>[a-zA-Z0-9\-]+)/$', NodeLabelDetail.as_view(), name ='nodelabel-detail-legacy'),
     
+        url(r'xos/privileges/$', PrivilegeList.as_view(), name='privilege-list-legacy'),
+        url(r'xos/privileges/(?P<pk>[a-zA-Z0-9\-]+)/$', PrivilegeDetail.as_view(), name ='privilege-detail-legacy'),
+    
         url(r'xos/nodes/$', NodeList.as_view(), name='node-list-legacy'),
         url(r'xos/nodes/(?P<pk>[a-zA-Z0-9\-]+)/$', NodeDetail.as_view(), name ='node-detail-legacy'),
     
@@ -126,8 +123,8 @@
         url(r'xos/dashboardviews/$', DashboardViewList.as_view(), name='dashboardview-list-legacy'),
         url(r'xos/dashboardviews/(?P<pk>[a-zA-Z0-9\-]+)/$', DashboardViewDetail.as_view(), name ='dashboardview-detail-legacy'),
     
-        url(r'xos/controllernetworks/$', ControllerNetworkList.as_view(), name='controllernetwork-list-legacy'),
-        url(r'xos/controllernetworks/(?P<pk>[a-zA-Z0-9\-]+)/$', ControllerNetworkDetail.as_view(), name ='controllernetwork-detail-legacy'),
+        url(r'xos/networkparameters/$', NetworkParameterList.as_view(), name='networkparameter-list-legacy'),
+        url(r'xos/networkparameters/(?P<pk>[a-zA-Z0-9\-]+)/$', NetworkParameterDetail.as_view(), name ='networkparameter-detail-legacy'),
     
         url(r'xos/imagedeploymentses/$', ImageDeploymentsList.as_view(), name='imagedeployments-list-legacy'),
         url(r'xos/imagedeploymentses/(?P<pk>[a-zA-Z0-9\-]+)/$', ImageDeploymentsDetail.as_view(), name ='imagedeployments-detail-legacy'),
@@ -162,9 +159,6 @@
         url(r'xos/site_roles/$', SiteRoleList.as_view(), name='siterole-list-legacy'),
         url(r'xos/site_roles/(?P<pk>[a-zA-Z0-9\-]+)/$', SiteRoleDetail.as_view(), name ='siterole-detail-legacy'),
     
-        url(r'xos/tenants/$', TenantList.as_view(), name='tenant-list-legacy'),
-        url(r'xos/tenants/(?P<pk>[a-zA-Z0-9\-]+)/$', TenantDetail.as_view(), name ='tenant-detail-legacy'),
-    
         url(r'xos/xoses/$', XOSList.as_view(), name='xos-list-legacy'),
         url(r'xos/xoses/(?P<pk>[a-zA-Z0-9\-]+)/$', XOSDetail.as_view(), name ='xos-detail-legacy'),
     
@@ -177,6 +171,9 @@
         url(r'xos/controllersliceprivileges/$', ControllerSlicePrivilegeList.as_view(), name='controllersliceprivilege-list-legacy'),
         url(r'xos/controllersliceprivileges/(?P<pk>[a-zA-Z0-9\-]+)/$', ControllerSlicePrivilegeDetail.as_view(), name ='controllersliceprivilege-detail-legacy'),
     
+        url(r'xos/serviceinstanceattributes/$', ServiceInstanceAttributeList.as_view(), name='serviceinstanceattribute-list-legacy'),
+        url(r'xos/serviceinstanceattributes/(?P<pk>[a-zA-Z0-9\-]+)/$', ServiceInstanceAttributeDetail.as_view(), name ='serviceinstanceattribute-detail-legacy'),
+    
         url(r'xos/deploymentprivileges/$', DeploymentPrivilegeList.as_view(), name='deploymentprivilege-list-legacy'),
         url(r'xos/deploymentprivileges/(?P<pk>[a-zA-Z0-9\-]+)/$', DeploymentPrivilegeDetail.as_view(), name ='deploymentprivilege-detail-legacy'),
     
@@ -192,18 +189,21 @@
         url(r'xos/deploymentroles/$', DeploymentRoleList.as_view(), name='deploymentrole-list-legacy'),
         url(r'xos/deploymentroles/(?P<pk>[a-zA-Z0-9\-]+)/$', DeploymentRoleDetail.as_view(), name ='deploymentrole-detail-legacy'),
     
-        url(r'xos/tenantrootprivileges/$', TenantRootPrivilegeList.as_view(), name='tenantrootprivilege-list-legacy'),
-        url(r'xos/tenantrootprivileges/(?P<pk>[a-zA-Z0-9\-]+)/$', TenantRootPrivilegeDetail.as_view(), name ='tenantrootprivilege-detail-legacy'),
+        url(r'xos/tags/$', TagList.as_view(), name='tag-list-legacy'),
+        url(r'xos/tags/(?P<pk>[a-zA-Z0-9\-]+)/$', TagDetail.as_view(), name ='tag-detail-legacy'),
+    
+        url(r'xos/interfacetypes/$', InterfaceTypeList.as_view(), name='interfacetype-list-legacy'),
+        url(r'xos/interfacetypes/(?P<pk>[a-zA-Z0-9\-]+)/$', InterfaceTypeDetail.as_view(), name ='interfacetype-detail-legacy'),
     
         url(r'xos/networktemplates/$', NetworkTemplateList.as_view(), name='networktemplate-list-legacy'),
         url(r'xos/networktemplates/(?P<pk>[a-zA-Z0-9\-]+)/$', NetworkTemplateDetail.as_view(), name ='networktemplate-detail-legacy'),
     
-        url(r'xos/tenantroots/$', TenantRootList.as_view(), name='tenantroot-list-legacy'),
-        url(r'xos/tenantroots/(?P<pk>[a-zA-Z0-9\-]+)/$', TenantRootDetail.as_view(), name ='tenantroot-detail-legacy'),
-    
         url(r'xos/serviceprivileges/$', ServicePrivilegeList.as_view(), name='serviceprivilege-list-legacy'),
         url(r'xos/serviceprivileges/(?P<pk>[a-zA-Z0-9\-]+)/$', ServicePrivilegeDetail.as_view(), name ='serviceprivilege-detail-legacy'),
     
+        url(r'xos/serviceinstances/$', ServiceInstanceList.as_view(), name='serviceinstance-list-legacy'),
+        url(r'xos/serviceinstances/(?P<pk>[a-zA-Z0-9\-]+)/$', ServiceInstanceDetail.as_view(), name ='serviceinstance-detail-legacy'),
+    
     ) + patterns('',
     # new - use these instead of the above
         url(r'^api/core/$', api_root),
@@ -220,36 +220,30 @@
         url(r'api/core/images/$', ImageList.as_view(), name='image-list'),
         url(r'api/core/images/(?P<pk>[a-zA-Z0-9\-]+)/$', ImageDetail.as_view(), name ='image-detail'),
     
-        url(r'api/core/networkparameters/$', NetworkParameterList.as_view(), name='networkparameter-list'),
-        url(r'api/core/networkparameters/(?P<pk>[a-zA-Z0-9\-]+)/$', NetworkParameterDetail.as_view(), name ='networkparameter-detail'),
+        url(r'api/core/controllernetworks/$', ControllerNetworkList.as_view(), name='controllernetwork-list'),
+        url(r'api/core/controllernetworks/(?P<pk>[a-zA-Z0-9\-]+)/$', ControllerNetworkDetail.as_view(), name ='controllernetwork-detail'),
     
         url(r'api/core/sites/$', SiteList.as_view(), name='site-list'),
         url(r'api/core/sites/(?P<pk>[a-zA-Z0-9\-]+)/$', SiteDetail.as_view(), name ='site-detail'),
     
-        url(r'api/core/tenantrootroles/$', TenantRootRoleList.as_view(), name='tenantrootrole-list'),
-        url(r'api/core/tenantrootroles/(?P<pk>[a-zA-Z0-9\-]+)/$', TenantRootRoleDetail.as_view(), name ='tenantrootrole-detail'),
-    
         url(r'api/core/slice_roles/$', SliceRoleList.as_view(), name='slicerole-list'),
         url(r'api/core/slice_roles/(?P<pk>[a-zA-Z0-9\-]+)/$', SliceRoleDetail.as_view(), name ='slicerole-detail'),
     
         url(r'api/core/xosguiextensions/$', XOSGuiExtensionList.as_view(), name='xosguiextension-list'),
         url(r'api/core/xosguiextensions/(?P<pk>[a-zA-Z0-9\-]+)/$', XOSGuiExtensionDetail.as_view(), name ='xosguiextension-detail'),
     
-        url(r'api/core/tenantprivileges/$', TenantPrivilegeList.as_view(), name='tenantprivilege-list'),
-        url(r'api/core/tenantprivileges/(?P<pk>[a-zA-Z0-9\-]+)/$', TenantPrivilegeDetail.as_view(), name ='tenantprivilege-detail'),
-    
-        url(r'api/core/tags/$', TagList.as_view(), name='tag-list'),
-        url(r'api/core/tags/(?P<pk>[a-zA-Z0-9\-]+)/$', TagDetail.as_view(), name ='tag-detail'),
+        url(r'api/core/serviceinstancelinks/$', ServiceInstanceLinkList.as_view(), name='serviceinstancelink-list'),
+        url(r'api/core/serviceinstancelinks/(?P<pk>[a-zA-Z0-9\-]+)/$', ServiceInstanceLinkDetail.as_view(), name ='serviceinstancelink-detail'),
     
         url(r'api/core/slice_privileges/$', SlicePrivilegeList.as_view(), name='sliceprivilege-list'),
         url(r'api/core/slice_privileges/(?P<pk>[a-zA-Z0-9\-]+)/$', SlicePrivilegeDetail.as_view(), name ='sliceprivilege-detail'),
     
+        url(r'api/core/controllerprivileges/$', ControllerPrivilegeList.as_view(), name='controllerprivilege-list'),
+        url(r'api/core/controllerprivileges/(?P<pk>[a-zA-Z0-9\-]+)/$', ControllerPrivilegeDetail.as_view(), name ='controllerprivilege-detail'),
+    
         url(r'api/core/flavors/$', FlavorList.as_view(), name='flavor-list'),
         url(r'api/core/flavors/(?P<pk>[a-zA-Z0-9\-]+)/$', FlavorDetail.as_view(), name ='flavor-detail'),
     
-        url(r'api/core/ports/$', PortList.as_view(), name='port-list'),
-        url(r'api/core/ports/(?P<pk>[a-zA-Z0-9\-]+)/$', PortDetail.as_view(), name ='port-detail'),
-    
         url(r'api/core/serviceroles/$', ServiceRoleList.as_view(), name='servicerole-list'),
         url(r'api/core/serviceroles/(?P<pk>[a-zA-Z0-9\-]+)/$', ServiceRoleDetail.as_view(), name ='servicerole-detail'),
     
@@ -259,9 +253,6 @@
         url(r'api/core/controllerslices/$', ControllerSliceList.as_view(), name='controllerslice-list'),
         url(r'api/core/controllerslices/(?P<pk>[a-zA-Z0-9\-]+)/$', ControllerSliceDetail.as_view(), name ='controllerslice-detail'),
     
-        url(r'api/core/tenantroles/$', TenantRoleList.as_view(), name='tenantrole-list'),
-        url(r'api/core/tenantroles/(?P<pk>[a-zA-Z0-9\-]+)/$', TenantRoleDetail.as_view(), name ='tenantrole-detail'),
-    
         url(r'api/core/servicedependencys/$', ServiceDependencyList.as_view(), name='servicedependency-list'),
         url(r'api/core/servicedependencys/(?P<pk>[a-zA-Z0-9\-]+)/$', ServiceDependencyDetail.as_view(), name ='servicedependency-detail'),
     
@@ -274,8 +265,8 @@
         url(r'api/core/diags/$', DiagList.as_view(), name='diag-list'),
         url(r'api/core/diags/(?P<pk>[a-zA-Z0-9\-]+)/$', DiagDetail.as_view(), name ='diag-detail'),
     
-        url(r'api/core/tenantattributes/$', TenantAttributeList.as_view(), name='tenantattribute-list'),
-        url(r'api/core/tenantattributes/(?P<pk>[a-zA-Z0-9\-]+)/$', TenantAttributeDetail.as_view(), name ='tenantattribute-detail'),
+        url(r'api/core/ports/$', PortList.as_view(), name='port-list'),
+        url(r'api/core/ports/(?P<pk>[a-zA-Z0-9\-]+)/$', PortDetail.as_view(), name ='port-detail'),
     
         url(r'api/core/instances/$', InstanceList.as_view(), name='instance-list'),
         url(r'api/core/instances/(?P<pk>[a-zA-Z0-9\-]+)/$', InstanceDetail.as_view(), name ='instance-detail'),
@@ -283,9 +274,15 @@
         url(r'api/core/roles/$', RoleList.as_view(), name='role-list'),
         url(r'api/core/roles/(?P<pk>[a-zA-Z0-9\-]+)/$', RoleDetail.as_view(), name ='role-detail'),
     
+        url(r'api/core/serviceinterfaces/$', ServiceInterfaceList.as_view(), name='serviceinterface-list'),
+        url(r'api/core/serviceinterfaces/(?P<pk>[a-zA-Z0-9\-]+)/$', ServiceInterfaceDetail.as_view(), name ='serviceinterface-detail'),
+    
         url(r'api/core/nodelabels/$', NodeLabelList.as_view(), name='nodelabel-list'),
         url(r'api/core/nodelabels/(?P<pk>[a-zA-Z0-9\-]+)/$', NodeLabelDetail.as_view(), name ='nodelabel-detail'),
     
+        url(r'api/core/privileges/$', PrivilegeList.as_view(), name='privilege-list'),
+        url(r'api/core/privileges/(?P<pk>[a-zA-Z0-9\-]+)/$', PrivilegeDetail.as_view(), name ='privilege-detail'),
+    
         url(r'api/core/nodes/$', NodeList.as_view(), name='node-list'),
         url(r'api/core/nodes/(?P<pk>[a-zA-Z0-9\-]+)/$', NodeDetail.as_view(), name ='node-detail'),
     
@@ -295,8 +292,8 @@
         url(r'api/core/dashboardviews/$', DashboardViewList.as_view(), name='dashboardview-list'),
         url(r'api/core/dashboardviews/(?P<pk>[a-zA-Z0-9\-]+)/$', DashboardViewDetail.as_view(), name ='dashboardview-detail'),
     
-        url(r'api/core/controllernetworks/$', ControllerNetworkList.as_view(), name='controllernetwork-list'),
-        url(r'api/core/controllernetworks/(?P<pk>[a-zA-Z0-9\-]+)/$', ControllerNetworkDetail.as_view(), name ='controllernetwork-detail'),
+        url(r'api/core/networkparameters/$', NetworkParameterList.as_view(), name='networkparameter-list'),
+        url(r'api/core/networkparameters/(?P<pk>[a-zA-Z0-9\-]+)/$', NetworkParameterDetail.as_view(), name ='networkparameter-detail'),
     
         url(r'api/core/imagedeploymentses/$', ImageDeploymentsList.as_view(), name='imagedeployments-list'),
         url(r'api/core/imagedeploymentses/(?P<pk>[a-zA-Z0-9\-]+)/$', ImageDeploymentsDetail.as_view(), name ='imagedeployments-detail'),
@@ -331,9 +328,6 @@
         url(r'api/core/site_roles/$', SiteRoleList.as_view(), name='siterole-list'),
         url(r'api/core/site_roles/(?P<pk>[a-zA-Z0-9\-]+)/$', SiteRoleDetail.as_view(), name ='siterole-detail'),
     
-        url(r'api/core/tenants/$', TenantList.as_view(), name='tenant-list'),
-        url(r'api/core/tenants/(?P<pk>[a-zA-Z0-9\-]+)/$', TenantDetail.as_view(), name ='tenant-detail'),
-    
         url(r'api/core/xoses/$', XOSList.as_view(), name='xos-list'),
         url(r'api/core/xoses/(?P<pk>[a-zA-Z0-9\-]+)/$', XOSDetail.as_view(), name ='xos-detail'),
     
@@ -346,6 +340,9 @@
         url(r'api/core/controllersliceprivileges/$', ControllerSlicePrivilegeList.as_view(), name='controllersliceprivilege-list'),
         url(r'api/core/controllersliceprivileges/(?P<pk>[a-zA-Z0-9\-]+)/$', ControllerSlicePrivilegeDetail.as_view(), name ='controllersliceprivilege-detail'),
     
+        url(r'api/core/serviceinstanceattributes/$', ServiceInstanceAttributeList.as_view(), name='serviceinstanceattribute-list'),
+        url(r'api/core/serviceinstanceattributes/(?P<pk>[a-zA-Z0-9\-]+)/$', ServiceInstanceAttributeDetail.as_view(), name ='serviceinstanceattribute-detail'),
+    
         url(r'api/core/deploymentprivileges/$', DeploymentPrivilegeList.as_view(), name='deploymentprivilege-list'),
         url(r'api/core/deploymentprivileges/(?P<pk>[a-zA-Z0-9\-]+)/$', DeploymentPrivilegeDetail.as_view(), name ='deploymentprivilege-detail'),
     
@@ -361,18 +358,21 @@
         url(r'api/core/deploymentroles/$', DeploymentRoleList.as_view(), name='deploymentrole-list'),
         url(r'api/core/deploymentroles/(?P<pk>[a-zA-Z0-9\-]+)/$', DeploymentRoleDetail.as_view(), name ='deploymentrole-detail'),
     
-        url(r'api/core/tenantrootprivileges/$', TenantRootPrivilegeList.as_view(), name='tenantrootprivilege-list'),
-        url(r'api/core/tenantrootprivileges/(?P<pk>[a-zA-Z0-9\-]+)/$', TenantRootPrivilegeDetail.as_view(), name ='tenantrootprivilege-detail'),
+        url(r'api/core/tags/$', TagList.as_view(), name='tag-list'),
+        url(r'api/core/tags/(?P<pk>[a-zA-Z0-9\-]+)/$', TagDetail.as_view(), name ='tag-detail'),
+    
+        url(r'api/core/interfacetypes/$', InterfaceTypeList.as_view(), name='interfacetype-list'),
+        url(r'api/core/interfacetypes/(?P<pk>[a-zA-Z0-9\-]+)/$', InterfaceTypeDetail.as_view(), name ='interfacetype-detail'),
     
         url(r'api/core/networktemplates/$', NetworkTemplateList.as_view(), name='networktemplate-list'),
         url(r'api/core/networktemplates/(?P<pk>[a-zA-Z0-9\-]+)/$', NetworkTemplateDetail.as_view(), name ='networktemplate-detail'),
     
-        url(r'api/core/tenantroots/$', TenantRootList.as_view(), name='tenantroot-list'),
-        url(r'api/core/tenantroots/(?P<pk>[a-zA-Z0-9\-]+)/$', TenantRootDetail.as_view(), name ='tenantroot-detail'),
-    
         url(r'api/core/serviceprivileges/$', ServicePrivilegeList.as_view(), name='serviceprivilege-list'),
         url(r'api/core/serviceprivileges/(?P<pk>[a-zA-Z0-9\-]+)/$', ServicePrivilegeDetail.as_view(), name ='serviceprivilege-detail'),
     
+        url(r'api/core/serviceinstances/$', ServiceInstanceList.as_view(), name='serviceinstance-list'),
+        url(r'api/core/serviceinstances/(?P<pk>[a-zA-Z0-9\-]+)/$', ServiceInstanceDetail.as_view(), name ='serviceinstance-detail'),
+    
     )
 
 @api_view(['GET'])
@@ -382,32 +382,31 @@
         'controllerimageses': reverse('controllerimages-list-legacy', request=request, format=format),
         'controllersiteprivileges': reverse('controllersiteprivilege-list-legacy', request=request, format=format),
         'images': reverse('image-list-legacy', request=request, format=format),
-        'networkparameters': reverse('networkparameter-list-legacy', request=request, format=format),
+        'controllernetworks': reverse('controllernetwork-list-legacy', request=request, format=format),
         'sites': reverse('site-list-legacy', request=request, format=format),
-        'tenantrootroles': reverse('tenantrootrole-list-legacy', request=request, format=format),
         'sliceroles': reverse('slicerole-list-legacy', request=request, format=format),
         'xosguiextensions': reverse('xosguiextension-list-legacy', request=request, format=format),
-        'tenantprivileges': reverse('tenantprivilege-list-legacy', request=request, format=format),
-        'tags': reverse('tag-list-legacy', request=request, format=format),
+        'serviceinstancelinks': reverse('serviceinstancelink-list-legacy', request=request, format=format),
         'sliceprivileges': reverse('sliceprivilege-list-legacy', request=request, format=format),
+        'controllerprivileges': reverse('controllerprivilege-list-legacy', request=request, format=format),
         'flavors': reverse('flavor-list-legacy', request=request, format=format),
-        'ports': reverse('port-list-legacy', request=request, format=format),
         'serviceroles': reverse('servicerole-list-legacy', request=request, format=format),
         'controllersites': reverse('controllersite-list-legacy', request=request, format=format),
         'controllerslices': reverse('controllerslice-list-legacy', request=request, format=format),
-        'tenantroles': reverse('tenantrole-list-legacy', request=request, format=format),
         'servicedependencys': reverse('servicedependency-list-legacy', request=request, format=format),
         'networks': reverse('network-list-legacy', request=request, format=format),
         'controllerroles': reverse('controllerrole-list-legacy', request=request, format=format),
         'diags': reverse('diag-list-legacy', request=request, format=format),
-        'tenantattributes': reverse('tenantattribute-list-legacy', request=request, format=format),
+        'ports': reverse('port-list-legacy', request=request, format=format),
         'instances': reverse('instance-list-legacy', request=request, format=format),
         'roles': reverse('role-list-legacy', request=request, format=format),
+        'serviceinterfaces': reverse('serviceinterface-list-legacy', request=request, format=format),
         'nodelabels': reverse('nodelabel-list-legacy', request=request, format=format),
+        'privileges': reverse('privilege-list-legacy', request=request, format=format),
         'nodes': reverse('node-list-legacy', request=request, format=format),
         'addresspools': reverse('addresspool-list-legacy', request=request, format=format),
         'dashboardviews': reverse('dashboardview-list-legacy', request=request, format=format),
-        'controllernetworks': reverse('controllernetwork-list-legacy', request=request, format=format),
+        'networkparameters': reverse('networkparameter-list-legacy', request=request, format=format),
         'imagedeploymentses': reverse('imagedeployments-list-legacy', request=request, format=format),
         'controllerusers': reverse('controlleruser-list-legacy', request=request, format=format),
         'servicemonitoringagentinfos': reverse('servicemonitoringagentinfo-list-legacy', request=request, format=format),
@@ -419,20 +418,21 @@
         'deployments': reverse('deployment-list-legacy', request=request, format=format),
         'siteprivileges': reverse('siteprivilege-list-legacy', request=request, format=format),
         'siteroles': reverse('siterole-list-legacy', request=request, format=format),
-        'tenants': reverse('tenant-list-legacy', request=request, format=format),
         'xoses': reverse('xos-list-legacy', request=request, format=format),
         'networkslices': reverse('networkslice-list-legacy', request=request, format=format),
         'services': reverse('service-list-legacy', request=request, format=format),
         'controllersliceprivileges': reverse('controllersliceprivilege-list-legacy', request=request, format=format),
+        'serviceinstanceattributes': reverse('serviceinstanceattribute-list-legacy', request=request, format=format),
         'deploymentprivileges': reverse('deploymentprivilege-list-legacy', request=request, format=format),
         'networkparametertypes': reverse('networkparametertype-list-legacy', request=request, format=format),
         'sitedeployments': reverse('sitedeployment-list-legacy', request=request, format=format),
         'tenantwithcontainers': reverse('tenantwithcontainer-list-legacy', request=request, format=format),
         'deploymentroles': reverse('deploymentrole-list-legacy', request=request, format=format),
-        'tenantrootprivileges': reverse('tenantrootprivilege-list-legacy', request=request, format=format),
+        'tags': reverse('tag-list-legacy', request=request, format=format),
+        'interfacetypes': reverse('interfacetype-list-legacy', request=request, format=format),
         'networktemplates': reverse('networktemplate-list-legacy', request=request, format=format),
-        'tenantroots': reverse('tenantroot-list-legacy', request=request, format=format),
         'serviceprivileges': reverse('serviceprivilege-list-legacy', request=request, format=format),
+        'serviceinstances': reverse('serviceinstance-list-legacy', request=request, format=format),
         
     })
 
@@ -443,32 +443,31 @@
         'controllerimageses': reverse('controllerimages-list', request=request, format=format),
         'controllersiteprivileges': reverse('controllersiteprivilege-list', request=request, format=format),
         'images': reverse('image-list', request=request, format=format),
-        'networkparameters': reverse('networkparameter-list', request=request, format=format),
+        'controllernetworks': reverse('controllernetwork-list', request=request, format=format),
         'sites': reverse('site-list', request=request, format=format),
-        'tenantrootroles': reverse('tenantrootrole-list', request=request, format=format),
         'sliceroles': reverse('slicerole-list', request=request, format=format),
         'xosguiextensions': reverse('xosguiextension-list', request=request, format=format),
-        'tenantprivileges': reverse('tenantprivilege-list', request=request, format=format),
-        'tags': reverse('tag-list', request=request, format=format),
+        'serviceinstancelinks': reverse('serviceinstancelink-list', request=request, format=format),
         'sliceprivileges': reverse('sliceprivilege-list', request=request, format=format),
+        'controllerprivileges': reverse('controllerprivilege-list', request=request, format=format),
         'flavors': reverse('flavor-list', request=request, format=format),
-        'ports': reverse('port-list', request=request, format=format),
         'serviceroles': reverse('servicerole-list', request=request, format=format),
         'controllersites': reverse('controllersite-list', request=request, format=format),
         'controllerslices': reverse('controllerslice-list', request=request, format=format),
-        'tenantroles': reverse('tenantrole-list', request=request, format=format),
         'servicedependencys': reverse('servicedependency-list', request=request, format=format),
         'networks': reverse('network-list', request=request, format=format),
         'controllerroles': reverse('controllerrole-list', request=request, format=format),
         'diags': reverse('diag-list', request=request, format=format),
-        'tenantattributes': reverse('tenantattribute-list', request=request, format=format),
+        'ports': reverse('port-list', request=request, format=format),
         'instances': reverse('instance-list', request=request, format=format),
         'roles': reverse('role-list', request=request, format=format),
+        'serviceinterfaces': reverse('serviceinterface-list', request=request, format=format),
         'nodelabels': reverse('nodelabel-list', request=request, format=format),
+        'privileges': reverse('privilege-list', request=request, format=format),
         'nodes': reverse('node-list', request=request, format=format),
         'addresspools': reverse('addresspool-list', request=request, format=format),
         'dashboardviews': reverse('dashboardview-list', request=request, format=format),
-        'controllernetworks': reverse('controllernetwork-list', request=request, format=format),
+        'networkparameters': reverse('networkparameter-list', request=request, format=format),
         'imagedeploymentses': reverse('imagedeployments-list', request=request, format=format),
         'controllerusers': reverse('controlleruser-list', request=request, format=format),
         'servicemonitoringagentinfos': reverse('servicemonitoringagentinfo-list', request=request, format=format),
@@ -480,20 +479,21 @@
         'deployments': reverse('deployment-list', request=request, format=format),
         'siteprivileges': reverse('siteprivilege-list', request=request, format=format),
         'siteroles': reverse('siterole-list', request=request, format=format),
-        'tenants': reverse('tenant-list', request=request, format=format),
         'xoses': reverse('xos-list', request=request, format=format),
         'networkslices': reverse('networkslice-list', request=request, format=format),
         'services': reverse('service-list', request=request, format=format),
         'controllersliceprivileges': reverse('controllersliceprivilege-list', request=request, format=format),
+        'serviceinstanceattributes': reverse('serviceinstanceattribute-list', request=request, format=format),
         'deploymentprivileges': reverse('deploymentprivilege-list', request=request, format=format),
         'networkparametertypes': reverse('networkparametertype-list', request=request, format=format),
         'sitedeployments': reverse('sitedeployment-list', request=request, format=format),
         'tenantwithcontainers': reverse('tenantwithcontainer-list', request=request, format=format),
         'deploymentroles': reverse('deploymentrole-list', request=request, format=format),
-        'tenantrootprivileges': reverse('tenantrootprivilege-list', request=request, format=format),
+        'tags': reverse('tag-list', request=request, format=format),
+        'interfacetypes': reverse('interfacetype-list', request=request, format=format),
         'networktemplates': reverse('networktemplate-list', request=request, format=format),
-        'tenantroots': reverse('tenantroot-list', request=request, format=format),
         'serviceprivileges': reverse('serviceprivilege-list', request=request, format=format),
+        'serviceinstances': reverse('serviceinstance-list', request=request, format=format),
         
     })
 
@@ -568,7 +568,7 @@
             return None
     class Meta:
         model = ServiceAttribute
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','value','service',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','value','service',)
 
 class ServiceAttributeIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -584,7 +584,7 @@
             return None
     class Meta:
         model = ServiceAttribute
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','value','service',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','value','service',)
 
 
 
@@ -603,7 +603,7 @@
             return None
     class Meta:
         model = ControllerImages
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','glance_image_id','image','controller',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','glance_image_id','image','controller',)
 
 class ControllerImagesIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -619,7 +619,7 @@
             return None
     class Meta:
         model = ControllerImages
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','glance_image_id','image','controller',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','glance_image_id','image','controller',)
 
 
 
@@ -638,7 +638,7 @@
             return None
     class Meta:
         model = ControllerSitePrivilege
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role_id','controller','site_privilege',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role_id','controller','site_privilege',)
 
 class ControllerSitePrivilegeIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -654,7 +654,7 @@
             return None
     class Meta:
         model = ControllerSitePrivilege
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role_id','controller','site_privilege',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role_id','controller','site_privilege',)
 
 
 
@@ -662,10 +662,6 @@
 class ImageSerializer(serializers.HyperlinkedModelSerializer):
     id = IdField()
     
-    
-    deployments = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='deployment-detail')
-    
-    
     humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
     validators = serializers.SerializerMethodField("getValidators")
     def getHumanReadableName(self, obj):
@@ -677,15 +673,11 @@
             return None
     class Meta:
         model = Image
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','kind','disk_format','container_format','path','tag','deployments',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','kind','disk_format','container_format','path','tag',)
 
 class ImageIdSerializer(XOSModelSerializer):
     id = IdField()
     
-    
-    deployments = serializers.PrimaryKeyRelatedField(many=True,  required=False, queryset = Deployment.objects.all())
-    
-    
     humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
     validators = serializers.SerializerMethodField("getValidators")
     def getHumanReadableName(self, obj):
@@ -697,12 +689,12 @@
             return None
     class Meta:
         model = Image
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','kind','disk_format','container_format','path','tag','deployments',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','kind','disk_format','container_format','path','tag',)
 
 
 
 
-class NetworkParameterSerializer(serializers.HyperlinkedModelSerializer):
+class ControllerNetworkSerializer(serializers.HyperlinkedModelSerializer):
     id = IdField()
     
     humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
@@ -715,10 +707,10 @@
         except:
             return None
     class Meta:
-        model = NetworkParameter
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','value','content_type','object_id','parameter',)
+        model = ControllerNetwork
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','subnet','start_ip','stop_ip','net_id','router_id','subnet_id','gateway','segmentation_id','network','controller',)
 
-class NetworkParameterIdSerializer(XOSModelSerializer):
+class ControllerNetworkIdSerializer(XOSModelSerializer):
     id = IdField()
     
     humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
@@ -731,8 +723,8 @@
         except:
             return None
     class Meta:
-        model = NetworkParameter
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','value','content_type','object_id','parameter',)
+        model = ControllerNetwork
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','subnet','start_ip','stop_ip','net_id','router_id','subnet_id','gateway','segmentation_id','network','controller',)
 
 
 
@@ -755,7 +747,7 @@
             return None
     class Meta:
         model = Site
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','site_url','enabled','hosts_nodes','hosts_users','longitude','latitude','login_base','is_public','abbreviated_name','deployments',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','site_url','enabled','hosts_nodes','hosts_users','longitude','latitude','login_base','is_public','abbreviated_name','deployments',)
 
 class SiteIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -775,42 +767,7 @@
             return None
     class Meta:
         model = Site
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','site_url','enabled','hosts_nodes','hosts_users','longitude','latitude','login_base','is_public','abbreviated_name','deployments',)
-
-
-
-
-class TenantRootRoleSerializer(serializers.HyperlinkedModelSerializer):
-    id = IdField()
-    
-    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
-    validators = serializers.SerializerMethodField("getValidators")
-    def getHumanReadableName(self, obj):
-        return str(obj)
-    def getValidators(self, obj):
-        try:
-            return obj.getValidators()
-        except:
-            return None
-    class Meta:
-        model = TenantRootRole
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role',)
-
-class TenantRootRoleIdSerializer(XOSModelSerializer):
-    id = IdField()
-    
-    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
-    validators = serializers.SerializerMethodField("getValidators")
-    def getHumanReadableName(self, obj):
-        return str(obj)
-    def getValidators(self, obj):
-        try:
-            return obj.getValidators()
-        except:
-            return None
-    class Meta:
-        model = TenantRootRole
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','site_url','enabled','hosts_nodes','hosts_users','longitude','latitude','login_base','is_public','abbreviated_name','deployments',)
 
 
 
@@ -829,7 +786,7 @@
             return None
     class Meta:
         model = SliceRole
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role',)
 
 class SliceRoleIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -845,7 +802,7 @@
             return None
     class Meta:
         model = SliceRole
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role',)
 
 
 
@@ -864,7 +821,7 @@
             return None
     class Meta:
         model = XOSGuiExtension
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','files',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','files',)
 
 class XOSGuiExtensionIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -880,12 +837,12 @@
             return None
     class Meta:
         model = XOSGuiExtension
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','files',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','files',)
 
 
 
 
-class TenantPrivilegeSerializer(serializers.HyperlinkedModelSerializer):
+class ServiceInstanceLinkSerializer(serializers.HyperlinkedModelSerializer):
     id = IdField()
     
     humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
@@ -898,10 +855,10 @@
         except:
             return None
     class Meta:
-        model = TenantPrivilege
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','user','tenant','role',)
+        model = ServiceInstanceLink
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','provider_service_instance','subscriber_service_instance','subscriber_service','subscriber_network',)
 
-class TenantPrivilegeIdSerializer(XOSModelSerializer):
+class ServiceInstanceLinkIdSerializer(XOSModelSerializer):
     id = IdField()
     
     humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
@@ -914,43 +871,8 @@
         except:
             return None
     class Meta:
-        model = TenantPrivilege
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','user','tenant','role',)
-
-
-
-
-class TagSerializer(serializers.HyperlinkedModelSerializer):
-    id = IdField()
-    
-    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
-    validators = serializers.SerializerMethodField("getValidators")
-    def getHumanReadableName(self, obj):
-        return str(obj)
-    def getValidators(self, obj):
-        try:
-            return obj.getValidators()
-        except:
-            return None
-    class Meta:
-        model = Tag
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','value','content_type','object_id','service',)
-
-class TagIdSerializer(XOSModelSerializer):
-    id = IdField()
-    
-    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
-    validators = serializers.SerializerMethodField("getValidators")
-    def getHumanReadableName(self, obj):
-        return str(obj)
-    def getValidators(self, obj):
-        try:
-            return obj.getValidators()
-        except:
-            return None
-    class Meta:
-        model = Tag
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','value','content_type','object_id','service',)
+        model = ServiceInstanceLink
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','provider_service_instance','subscriber_service_instance','subscriber_service','subscriber_network',)
 
 
 
@@ -969,7 +891,7 @@
             return None
     class Meta:
         model = SlicePrivilege
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','user','slice','role',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','user','slice','role',)
 
 class SlicePrivilegeIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -985,7 +907,42 @@
             return None
     class Meta:
         model = SlicePrivilege
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','user','slice','role',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','user','slice','role',)
+
+
+
+
+class ControllerPrivilegeSerializer(serializers.HyperlinkedModelSerializer):
+    id = IdField()
+    
+    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
+    validators = serializers.SerializerMethodField("getValidators")
+    def getHumanReadableName(self, obj):
+        return str(obj)
+    def getValidators(self, obj):
+        try:
+            return obj.getValidators()
+        except:
+            return None
+    class Meta:
+        model = ControllerPrivilege
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role_id','controller','privilege',)
+
+class ControllerPrivilegeIdSerializer(XOSModelSerializer):
+    id = IdField()
+    
+    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
+    validators = serializers.SerializerMethodField("getValidators")
+    def getHumanReadableName(self, obj):
+        return str(obj)
+    def getValidators(self, obj):
+        try:
+            return obj.getValidators()
+        except:
+            return None
+    class Meta:
+        model = ControllerPrivilege
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role_id','controller','privilege',)
 
 
 
@@ -993,10 +950,6 @@
 class FlavorSerializer(serializers.HyperlinkedModelSerializer):
     id = IdField()
     
-    
-    deployments = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='deployment-detail')
-    
-    
     humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
     validators = serializers.SerializerMethodField("getValidators")
     def getHumanReadableName(self, obj):
@@ -1008,15 +961,11 @@
             return None
     class Meta:
         model = Flavor
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','description','flavor','order','default','deployments',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','description','flavor',)
 
 class FlavorIdSerializer(XOSModelSerializer):
     id = IdField()
     
-    
-    deployments = serializers.PrimaryKeyRelatedField(many=True,  required=False, queryset = Deployment.objects.all())
-    
-    
     humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
     validators = serializers.SerializerMethodField("getValidators")
     def getHumanReadableName(self, obj):
@@ -1028,42 +977,7 @@
             return None
     class Meta:
         model = Flavor
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','description','flavor','order','default','deployments',)
-
-
-
-
-class PortSerializer(serializers.HyperlinkedModelSerializer):
-    id = IdField()
-    
-    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
-    validators = serializers.SerializerMethodField("getValidators")
-    def getHumanReadableName(self, obj):
-        return str(obj)
-    def getValidators(self, obj):
-        try:
-            return obj.getValidators()
-        except:
-            return None
-    class Meta:
-        model = Port
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','ip','port_id','mac','xos_created','network','instance',)
-
-class PortIdSerializer(XOSModelSerializer):
-    id = IdField()
-    
-    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
-    validators = serializers.SerializerMethodField("getValidators")
-    def getHumanReadableName(self, obj):
-        return str(obj)
-    def getValidators(self, obj):
-        try:
-            return obj.getValidators()
-        except:
-            return None
-    class Meta:
-        model = Port
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','ip','port_id','mac','xos_created','network','instance',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','description','flavor',)
 
 
 
@@ -1082,7 +996,7 @@
             return None
     class Meta:
         model = ServiceRole
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role',)
 
 class ServiceRoleIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -1098,7 +1012,7 @@
             return None
     class Meta:
         model = ServiceRole
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role',)
 
 
 
@@ -1117,7 +1031,7 @@
             return None
     class Meta:
         model = ControllerSite
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','tenant_id','site','controller',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','tenant_id','site','controller',)
 
 class ControllerSiteIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -1133,7 +1047,7 @@
             return None
     class Meta:
         model = ControllerSite
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','tenant_id','site','controller',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','tenant_id','site','controller',)
 
 
 
@@ -1152,7 +1066,7 @@
             return None
     class Meta:
         model = ControllerSlice
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','tenant_id','controller','slice',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','tenant_id','controller','slice',)
 
 class ControllerSliceIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -1168,42 +1082,7 @@
             return None
     class Meta:
         model = ControllerSlice
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','tenant_id','controller','slice',)
-
-
-
-
-class TenantRoleSerializer(serializers.HyperlinkedModelSerializer):
-    id = IdField()
-    
-    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
-    validators = serializers.SerializerMethodField("getValidators")
-    def getHumanReadableName(self, obj):
-        return str(obj)
-    def getValidators(self, obj):
-        try:
-            return obj.getValidators()
-        except:
-            return None
-    class Meta:
-        model = TenantRole
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role',)
-
-class TenantRoleIdSerializer(XOSModelSerializer):
-    id = IdField()
-    
-    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
-    validators = serializers.SerializerMethodField("getValidators")
-    def getHumanReadableName(self, obj):
-        return str(obj)
-    def getValidators(self, obj):
-        try:
-            return obj.getValidators()
-        except:
-            return None
-    class Meta:
-        model = TenantRole
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','tenant_id','controller','slice',)
 
 
 
@@ -1222,7 +1101,7 @@
             return None
     class Meta:
         model = ServiceDependency
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','kind','service_specific_id','service_specific_attribute','connect_method','provider_service','subscriber_service','subscriber_tenant','subscriber_user','subscriber_root','subscriber_network',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','connect_method','provider_service','subscriber_service',)
 
 class ServiceDependencyIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -1238,7 +1117,7 @@
             return None
     class Meta:
         model = ServiceDependency
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','kind','service_specific_id','service_specific_attribute','connect_method','provider_service','subscriber_service','subscriber_tenant','subscriber_user','subscriber_root','subscriber_network',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','connect_method','provider_service','subscriber_service',)
 
 
 
@@ -1269,7 +1148,7 @@
             return None
     class Meta:
         model = Network
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','subnet','start_ip','end_ip','ports','labels','permit_all_slices','autoconnect','template','owner','slices','slices','instances',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','subnet','start_ip','end_ip','ports','labels','permit_all_slices','autoconnect','template','owner','slices','slices','instances',)
 
 class NetworkIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -1297,7 +1176,7 @@
             return None
     class Meta:
         model = Network
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','subnet','start_ip','end_ip','ports','labels','permit_all_slices','autoconnect','template','owner','slices','slices','instances',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','subnet','start_ip','end_ip','ports','labels','permit_all_slices','autoconnect','template','owner','slices','slices','instances',)
 
 
 
@@ -1316,7 +1195,7 @@
             return None
     class Meta:
         model = ControllerRole
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role',)
 
 class ControllerRoleIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -1332,7 +1211,7 @@
             return None
     class Meta:
         model = ControllerRole
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role',)
 
 
 
@@ -1351,7 +1230,7 @@
             return None
     class Meta:
         model = Diag
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name',)
 
 class DiagIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -1367,12 +1246,12 @@
             return None
     class Meta:
         model = Diag
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name',)
 
 
 
 
-class TenantAttributeSerializer(serializers.HyperlinkedModelSerializer):
+class PortSerializer(serializers.HyperlinkedModelSerializer):
     id = IdField()
     
     humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
@@ -1385,10 +1264,10 @@
         except:
             return None
     class Meta:
-        model = TenantAttribute
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','value','tenant',)
+        model = Port
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','ip','port_id','mac','xos_created','network','instance',)
 
-class TenantAttributeIdSerializer(XOSModelSerializer):
+class PortIdSerializer(XOSModelSerializer):
     id = IdField()
     
     humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
@@ -1401,8 +1280,8 @@
         except:
             return None
     class Meta:
-        model = TenantAttribute
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','value','tenant',)
+        model = Port
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','ip','port_id','mac','xos_created','network','instance',)
 
 
 
@@ -1425,7 +1304,7 @@
             return None
     class Meta:
         model = Instance
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','instance_id','instance_uuid','name','instance_name','ip','numberCores','userData','isolation','volumes','image','creator','slice','deployment','node','flavor','parent','networks',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','instance_id','instance_uuid','name','instance_name','ip','numberCores','userData','isolation','volumes','image','creator','slice','deployment','node','flavor','parent','networks',)
 
 class InstanceIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -1445,7 +1324,7 @@
             return None
     class Meta:
         model = Instance
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','instance_id','instance_uuid','name','instance_name','ip','numberCores','userData','isolation','volumes','image','creator','slice','deployment','node','flavor','parent','networks',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','instance_id','instance_uuid','name','instance_name','ip','numberCores','userData','isolation','volumes','image','creator','slice','deployment','node','flavor','parent','networks',)
 
 
 
@@ -1464,7 +1343,7 @@
             return None
     class Meta:
         model = Role
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role_type','role','description',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role_type','role','description',)
 
 class RoleIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -1480,7 +1359,42 @@
             return None
     class Meta:
         model = Role
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role_type','role','description',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role_type','role','description',)
+
+
+
+
+class ServiceInterfaceSerializer(serializers.HyperlinkedModelSerializer):
+    id = IdField()
+    
+    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
+    validators = serializers.SerializerMethodField("getValidators")
+    def getHumanReadableName(self, obj):
+        return str(obj)
+    def getValidators(self, obj):
+        try:
+            return obj.getValidators()
+        except:
+            return None
+    class Meta:
+        model = ServiceInterface
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','service','interface_type',)
+
+class ServiceInterfaceIdSerializer(XOSModelSerializer):
+    id = IdField()
+    
+    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
+    validators = serializers.SerializerMethodField("getValidators")
+    def getHumanReadableName(self, obj):
+        return str(obj)
+    def getValidators(self, obj):
+        try:
+            return obj.getValidators()
+        except:
+            return None
+    class Meta:
+        model = ServiceInterface
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','service','interface_type',)
 
 
 
@@ -1503,7 +1417,7 @@
             return None
     class Meta:
         model = NodeLabel
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','nodes',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','nodes',)
 
 class NodeLabelIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -1523,7 +1437,42 @@
             return None
     class Meta:
         model = NodeLabel
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','nodes',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','nodes',)
+
+
+
+
+class PrivilegeSerializer(serializers.HyperlinkedModelSerializer):
+    id = IdField()
+    
+    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
+    validators = serializers.SerializerMethodField("getValidators")
+    def getHumanReadableName(self, obj):
+        return str(obj)
+    def getValidators(self, obj):
+        try:
+            return obj.getValidators()
+        except:
+            return None
+    class Meta:
+        model = Privilege
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','accessor_id','accessor_type','object_id','object_type','permission','granted','expires',)
+
+class PrivilegeIdSerializer(XOSModelSerializer):
+    id = IdField()
+    
+    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
+    validators = serializers.SerializerMethodField("getValidators")
+    def getHumanReadableName(self, obj):
+        return str(obj)
+    def getValidators(self, obj):
+        try:
+            return obj.getValidators()
+        except:
+            return None
+    class Meta:
+        model = Privilege
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','accessor_id','accessor_type','object_id','object_type','permission','granted','expires',)
 
 
 
@@ -1546,7 +1495,7 @@
             return None
     class Meta:
         model = Node
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','site_deployment','site','nodelabels',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','site_deployment','nodelabels',)
 
 class NodeIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -1566,7 +1515,7 @@
             return None
     class Meta:
         model = Node
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','site_deployment','site','nodelabels',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','site_deployment','nodelabels',)
 
 
 
@@ -1585,7 +1534,7 @@
             return None
     class Meta:
         model = AddressPool
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','addresses','gateway_ip','gateway_mac','cidr','inuse','service',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','addresses','gateway_ip','gateway_mac','cidr','inuse','service',)
 
 class AddressPoolIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -1601,7 +1550,7 @@
             return None
     class Meta:
         model = AddressPool
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','addresses','gateway_ip','gateway_mac','cidr','inuse','service',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','addresses','gateway_ip','gateway_mac','cidr','inuse','service',)
 
 
 
@@ -1628,7 +1577,7 @@
             return None
     class Meta:
         model = DashboardView
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','url','enabled','icon','icon_active','controllers','deployments',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','url','enabled','icon','icon_active','controllers','deployments',)
 
 class DashboardViewIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -1652,12 +1601,12 @@
             return None
     class Meta:
         model = DashboardView
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','url','enabled','icon','icon_active','controllers','deployments',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','url','enabled','icon','icon_active','controllers','deployments',)
 
 
 
 
-class ControllerNetworkSerializer(serializers.HyperlinkedModelSerializer):
+class NetworkParameterSerializer(serializers.HyperlinkedModelSerializer):
     id = IdField()
     
     humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
@@ -1670,10 +1619,10 @@
         except:
             return None
     class Meta:
-        model = ControllerNetwork
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','subnet','start_ip','stop_ip','net_id','router_id','subnet_id','gateway','segmentation_id','network','controller',)
+        model = NetworkParameter
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','value','content_type','object_id','parameter',)
 
-class ControllerNetworkIdSerializer(XOSModelSerializer):
+class NetworkParameterIdSerializer(XOSModelSerializer):
     id = IdField()
     
     humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
@@ -1686,8 +1635,8 @@
         except:
             return None
     class Meta:
-        model = ControllerNetwork
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','subnet','start_ip','stop_ip','net_id','router_id','subnet_id','gateway','segmentation_id','network','controller',)
+        model = NetworkParameter
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','value','content_type','object_id','parameter',)
 
 
 
@@ -1706,7 +1655,7 @@
             return None
     class Meta:
         model = ImageDeployments
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','image','deployment',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','image','deployment',)
 
 class ImageDeploymentsIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -1722,7 +1671,7 @@
             return None
     class Meta:
         model = ImageDeployments
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','image','deployment',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','image','deployment',)
 
 
 
@@ -1741,7 +1690,7 @@
             return None
     class Meta:
         model = ControllerUser
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','kuser_id','user','controller',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','kuser_id','user','controller',)
 
 class ControllerUserIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -1757,7 +1706,7 @@
             return None
     class Meta:
         model = ControllerUser
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','kuser_id','user','controller',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','kuser_id','user','controller',)
 
 
 
@@ -1776,7 +1725,7 @@
             return None
     class Meta:
         model = ServiceMonitoringAgentInfo
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','target_uri','service',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','target_uri','service',)
 
 class ServiceMonitoringAgentInfoIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -1792,7 +1741,7 @@
             return None
     class Meta:
         model = ServiceMonitoringAgentInfo
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','target_uri','service',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','target_uri','service',)
 
 
 
@@ -1811,7 +1760,7 @@
             return None
     class Meta:
         model = ControllerDashboardView
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','enabled','url','controller','dashboardView',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','enabled','url','controller','dashboardView',)
 
 class ControllerDashboardViewIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -1827,7 +1776,7 @@
             return None
     class Meta:
         model = ControllerDashboardView
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','enabled','url','controller','dashboardView',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','enabled','url','controller','dashboardView',)
 
 
 
@@ -1846,7 +1795,7 @@
             return None
     class Meta:
         model = UserDashboardView
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','user','dashboardView','order',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','user','dashboardView','order',)
 
 class UserDashboardViewIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -1862,7 +1811,7 @@
             return None
     class Meta:
         model = UserDashboardView
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','user','dashboardView','order',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','user','dashboardView','order',)
 
 
 
@@ -1885,7 +1834,7 @@
             return None
     class Meta:
         model = Controller
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','backend_type','version','auth_url','admin_user','admin_password','admin_tenant','domain','rabbit_host','rabbit_user','rabbit_password','deployment','dashboardviews',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','backend_type','version','auth_url','admin_user','admin_password','admin_tenant','domain','rabbit_host','rabbit_user','rabbit_password','deployment','dashboardviews',)
 
 class ControllerIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -1905,7 +1854,7 @@
             return None
     class Meta:
         model = Controller
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','backend_type','version','auth_url','admin_user','admin_password','admin_tenant','domain','rabbit_host','rabbit_user','rabbit_password','deployment','dashboardviews',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','backend_type','version','auth_url','admin_user','admin_password','admin_tenant','domain','rabbit_host','rabbit_user','rabbit_password','deployment','dashboardviews',)
 
 
 
@@ -1932,7 +1881,7 @@
             return None
     class Meta:
         model = Slice
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','enabled','description','slice_url','max_instances','network','exposed_ports','mount_data_sets','default_isolation','site','service','creator','default_flavor','default_image','default_node','networks','networks',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','enabled','description','slice_url','max_instances','network','exposed_ports','mount_data_sets','default_isolation','site','service','creator','default_flavor','default_image','default_node','networks','networks',)
 
 class SliceIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -1956,7 +1905,7 @@
             return None
     class Meta:
         model = Slice
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','enabled','description','slice_url','max_instances','network','exposed_ports','mount_data_sets','default_isolation','site','service','creator','default_flavor','default_image','default_node','networks','networks',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','enabled','description','slice_url','max_instances','network','exposed_ports','mount_data_sets','default_isolation','site','service','creator','default_flavor','default_image','default_node','networks','networks',)
 
 
 
@@ -1975,7 +1924,7 @@
             return None
     class Meta:
         model = User
-        fields = ('humanReadableName', 'validators', 'id','password','last_login','email','username','firstname','lastname','phone','user_url','site','public_key','is_active','is_admin','is_staff','is_readonly','is_registering','is_appuser','login_page','created','updated','enacted','policed','backend_status','backend_need_delete','backend_need_reap','deleted','write_protect','lazy_blocked','no_sync','no_policy','timezone',)
+        fields = ('humanReadableName', 'validators', 'id','password','last_login','email','username','firstname','lastname','phone','user_url','site','public_key','is_active','is_admin','is_staff','is_readonly','is_registering','is_appuser','login_page','created','updated','enacted','policed','backend_status','backend_need_delete','backend_need_reap','deleted','write_protect','lazy_blocked','no_sync','no_policy','timezone','policy_status',)
 
 class UserIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -1991,7 +1940,7 @@
             return None
     class Meta:
         model = User
-        fields = ('humanReadableName', 'validators', 'id','password','last_login','email','username','firstname','lastname','phone','user_url','site','public_key','is_active','is_admin','is_staff','is_readonly','is_registering','is_appuser','login_page','created','updated','enacted','policed','backend_status','backend_need_delete','backend_need_reap','deleted','write_protect','lazy_blocked','no_sync','no_policy','timezone',)
+        fields = ('humanReadableName', 'validators', 'id','password','last_login','email','username','firstname','lastname','phone','user_url','site','public_key','is_active','is_admin','is_staff','is_readonly','is_registering','is_appuser','login_page','created','updated','enacted','policed','backend_status','backend_need_delete','backend_need_reap','deleted','write_protect','lazy_blocked','no_sync','no_policy','timezone','policy_status',)
 
 
 
@@ -2000,18 +1949,10 @@
     id = IdField()
     
     
-    images = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='image-detail')
-    
-    
-    
     sites = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='site-detail')
     
     
     
-    flavors = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='flavor-detail')
-    
-    
-    
     dashboardviews = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='dashboardview-detail')
     
     
@@ -2026,24 +1967,16 @@
             return None
     class Meta:
         model = Deployment
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','accessControl','images','sites','flavors','dashboardviews',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','accessControl','sites','dashboardviews',)
 
 class DeploymentIdSerializer(XOSModelSerializer):
     id = IdField()
     
     
-    images = serializers.PrimaryKeyRelatedField(many=True,  required=False, queryset = Image.objects.all())
-    
-    
-    
     sites = serializers.PrimaryKeyRelatedField(many=True,  required=False, queryset = Site.objects.all())
     
     
     
-    flavors = serializers.PrimaryKeyRelatedField(many=True,  required=False, queryset = Flavor.objects.all())
-    
-    
-    
     dashboardviews = serializers.PrimaryKeyRelatedField(many=True,  required=False, queryset = DashboardView.objects.all())
     
     
@@ -2058,7 +1991,7 @@
             return None
     class Meta:
         model = Deployment
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','accessControl','images','sites','flavors','dashboardviews',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','accessControl','sites','dashboardviews',)
 
 
 
@@ -2077,7 +2010,7 @@
             return None
     class Meta:
         model = SitePrivilege
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','user','site','role',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','user','site','role',)
 
 class SitePrivilegeIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -2093,7 +2026,7 @@
             return None
     class Meta:
         model = SitePrivilege
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','user','site','role',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','user','site','role',)
 
 
 
@@ -2112,7 +2045,7 @@
             return None
     class Meta:
         model = SiteRole
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role',)
 
 class SiteRoleIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -2128,42 +2061,7 @@
             return None
     class Meta:
         model = SiteRole
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role',)
-
-
-
-
-class TenantSerializer(serializers.HyperlinkedModelSerializer):
-    id = IdField()
-    
-    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
-    validators = serializers.SerializerMethodField("getValidators")
-    def getHumanReadableName(self, obj):
-        return str(obj)
-    def getValidators(self, obj):
-        try:
-            return obj.getValidators()
-        except:
-            return None
-    class Meta:
-        model = Tenant
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','kind','service_specific_id','service_specific_attribute','connect_method','provider_service','subscriber_service','subscriber_tenant','subscriber_user','subscriber_root','subscriber_network',)
-
-class TenantIdSerializer(XOSModelSerializer):
-    id = IdField()
-    
-    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
-    validators = serializers.SerializerMethodField("getValidators")
-    def getHumanReadableName(self, obj):
-        return str(obj)
-    def getValidators(self, obj):
-        try:
-            return obj.getValidators()
-        except:
-            return None
-    class Meta:
-        model = Tenant
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','kind','service_specific_id','service_specific_attribute','connect_method','provider_service','subscriber_service','subscriber_tenant','subscriber_user','subscriber_root','subscriber_network',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role',)
 
 
 
@@ -2182,7 +2080,7 @@
             return None
     class Meta:
         model = XOS
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name',)
 
 class XOSIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -2198,7 +2096,7 @@
             return None
     class Meta:
         model = XOS
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name',)
 
 
 
@@ -2217,7 +2115,7 @@
             return None
     class Meta:
         model = NetworkSlice
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','network','slice',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','network','slice',)
 
 class NetworkSliceIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -2233,7 +2131,7 @@
             return None
     class Meta:
         model = NetworkSlice
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','network','slice',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','network','slice',)
 
 
 
@@ -2252,7 +2150,7 @@
             return None
     class Meta:
         model = Service
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','description','enabled','kind','name','versionNumber','published','view_url','icon_url','public_key','private_key_fn','service_specific_id','service_specific_attribute',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','description','enabled','kind','name','versionNumber','published','view_url','icon_url','public_key','private_key_fn','service_specific_id','service_specific_attribute',)
 
 class ServiceIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -2268,7 +2166,7 @@
             return None
     class Meta:
         model = Service
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','description','enabled','kind','name','versionNumber','published','view_url','icon_url','public_key','private_key_fn','service_specific_id','service_specific_attribute',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','description','enabled','kind','name','versionNumber','published','view_url','icon_url','public_key','private_key_fn','service_specific_id','service_specific_attribute',)
 
 
 
@@ -2287,7 +2185,7 @@
             return None
     class Meta:
         model = ControllerSlicePrivilege
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role_id','controller','slice_privilege',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role_id','controller','slice_privilege',)
 
 class ControllerSlicePrivilegeIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -2303,7 +2201,42 @@
             return None
     class Meta:
         model = ControllerSlicePrivilege
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role_id','controller','slice_privilege',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role_id','controller','slice_privilege',)
+
+
+
+
+class ServiceInstanceAttributeSerializer(serializers.HyperlinkedModelSerializer):
+    id = IdField()
+    
+    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
+    validators = serializers.SerializerMethodField("getValidators")
+    def getHumanReadableName(self, obj):
+        return str(obj)
+    def getValidators(self, obj):
+        try:
+            return obj.getValidators()
+        except:
+            return None
+    class Meta:
+        model = ServiceInstanceAttribute
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','value','service_instance',)
+
+class ServiceInstanceAttributeIdSerializer(XOSModelSerializer):
+    id = IdField()
+    
+    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
+    validators = serializers.SerializerMethodField("getValidators")
+    def getHumanReadableName(self, obj):
+        return str(obj)
+    def getValidators(self, obj):
+        try:
+            return obj.getValidators()
+        except:
+            return None
+    class Meta:
+        model = ServiceInstanceAttribute
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','value','service_instance',)
 
 
 
@@ -2322,7 +2255,7 @@
             return None
     class Meta:
         model = DeploymentPrivilege
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','user','deployment','role',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','user','deployment','role',)
 
 class DeploymentPrivilegeIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -2338,7 +2271,7 @@
             return None
     class Meta:
         model = DeploymentPrivilege
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','user','deployment','role',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','user','deployment','role',)
 
 
 
@@ -2357,7 +2290,7 @@
             return None
     class Meta:
         model = NetworkParameterType
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','description',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','description',)
 
 class NetworkParameterTypeIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -2373,7 +2306,7 @@
             return None
     class Meta:
         model = NetworkParameterType
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','description',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','description',)
 
 
 
@@ -2392,7 +2325,7 @@
             return None
     class Meta:
         model = SiteDeployment
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','availability_zone','site','deployment','controller',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','availability_zone','site','deployment','controller',)
 
 class SiteDeploymentIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -2408,7 +2341,7 @@
             return None
     class Meta:
         model = SiteDeployment
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','availability_zone','site','deployment','controller',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','availability_zone','site','deployment','controller',)
 
 
 
@@ -2427,7 +2360,7 @@
             return None
     class Meta:
         model = TenantWithContainer
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','kind','service_specific_id','service_specific_attribute','connect_method','provider_service','subscriber_service','subscriber_tenant','subscriber_user','subscriber_root','subscriber_network','external_hostname','external_container','instance','creator',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','service_specific_id','service_specific_attribute','owner','external_hostname','external_container','instance','creator',)
 
 class TenantWithContainerIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -2443,7 +2376,7 @@
             return None
     class Meta:
         model = TenantWithContainer
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','kind','service_specific_id','service_specific_attribute','connect_method','provider_service','subscriber_service','subscriber_tenant','subscriber_user','subscriber_root','subscriber_network','external_hostname','external_container','instance','creator',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','service_specific_id','service_specific_attribute','owner','external_hostname','external_container','instance','creator',)
 
 
 
@@ -2462,7 +2395,7 @@
             return None
     class Meta:
         model = DeploymentRole
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role',)
 
 class DeploymentRoleIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -2478,12 +2411,12 @@
             return None
     class Meta:
         model = DeploymentRole
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role',)
 
 
 
 
-class TenantRootPrivilegeSerializer(serializers.HyperlinkedModelSerializer):
+class TagSerializer(serializers.HyperlinkedModelSerializer):
     id = IdField()
     
     humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
@@ -2496,10 +2429,10 @@
         except:
             return None
     class Meta:
-        model = TenantRootPrivilege
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','user','tenant_root','role',)
+        model = Tag
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','value','content_type','object_id','service',)
 
-class TenantRootPrivilegeIdSerializer(XOSModelSerializer):
+class TagIdSerializer(XOSModelSerializer):
     id = IdField()
     
     humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
@@ -2512,8 +2445,43 @@
         except:
             return None
     class Meta:
-        model = TenantRootPrivilege
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','user','tenant_root','role',)
+        model = Tag
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','value','content_type','object_id','service',)
+
+
+
+
+class InterfaceTypeSerializer(serializers.HyperlinkedModelSerializer):
+    id = IdField()
+    
+    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
+    validators = serializers.SerializerMethodField("getValidators")
+    def getHumanReadableName(self, obj):
+        return str(obj)
+    def getValidators(self, obj):
+        try:
+            return obj.getValidators()
+        except:
+            return None
+    class Meta:
+        model = InterfaceType
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','direction',)
+
+class InterfaceTypeIdSerializer(XOSModelSerializer):
+    id = IdField()
+    
+    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
+    validators = serializers.SerializerMethodField("getValidators")
+    def getHumanReadableName(self, obj):
+        return str(obj)
+    def getValidators(self, obj):
+        try:
+            return obj.getValidators()
+        except:
+            return None
+    class Meta:
+        model = InterfaceType
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','direction',)
 
 
 
@@ -2532,7 +2500,7 @@
             return None
     class Meta:
         model = NetworkTemplate
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','description','visibility','translation','access','shared_network_name','shared_network_id','topology_kind','controller_kind','vtn_kind',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','description','visibility','translation','access','shared_network_name','shared_network_id','topology_kind','controller_kind','vtn_kind',)
 
 class NetworkTemplateIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -2548,42 +2516,7 @@
             return None
     class Meta:
         model = NetworkTemplate
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','description','visibility','translation','access','shared_network_name','shared_network_id','topology_kind','controller_kind','vtn_kind',)
-
-
-
-
-class TenantRootSerializer(serializers.HyperlinkedModelSerializer):
-    id = IdField()
-    
-    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
-    validators = serializers.SerializerMethodField("getValidators")
-    def getHumanReadableName(self, obj):
-        return str(obj)
-    def getValidators(self, obj):
-        try:
-            return obj.getValidators()
-        except:
-            return None
-    class Meta:
-        model = TenantRoot
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','kind','name','service_specific_attribute','service_specific_id',)
-
-class TenantRootIdSerializer(XOSModelSerializer):
-    id = IdField()
-    
-    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
-    validators = serializers.SerializerMethodField("getValidators")
-    def getHumanReadableName(self, obj):
-        return str(obj)
-    def getValidators(self, obj):
-        try:
-            return obj.getValidators()
-        except:
-            return None
-    class Meta:
-        model = TenantRoot
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','kind','name','service_specific_attribute','service_specific_id',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','description','visibility','translation','access','shared_network_name','shared_network_id','topology_kind','controller_kind','vtn_kind',)
 
 
 
@@ -2602,7 +2535,7 @@
             return None
     class Meta:
         model = ServicePrivilege
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','user','service','role',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','user','service','role',)
 
 class ServicePrivilegeIdSerializer(XOSModelSerializer):
     id = IdField()
@@ -2618,7 +2551,42 @@
             return None
     class Meta:
         model = ServicePrivilege
-        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','user','service','role',)
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','user','service','role',)
+
+
+
+
+class ServiceInstanceSerializer(serializers.HyperlinkedModelSerializer):
+    id = IdField()
+    
+    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
+    validators = serializers.SerializerMethodField("getValidators")
+    def getHumanReadableName(self, obj):
+        return str(obj)
+    def getValidators(self, obj):
+        try:
+            return obj.getValidators()
+        except:
+            return None
+    class Meta:
+        model = ServiceInstance
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','service_specific_id','service_specific_attribute','owner',)
+
+class ServiceInstanceIdSerializer(XOSModelSerializer):
+    id = IdField()
+    
+    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
+    validators = serializers.SerializerMethodField("getValidators")
+    def getHumanReadableName(self, obj):
+        return str(obj)
+    def getValidators(self, obj):
+        try:
+            return obj.getValidators()
+        except:
+            return None
+    class Meta:
+        model = ServiceInstance
+        fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','service_specific_id','service_specific_attribute','owner',)
 
 
 
@@ -2633,25 +2601,21 @@
 
                  Image: ImageSerializer,
 
-                 NetworkParameter: NetworkParameterSerializer,
+                 ControllerNetwork: ControllerNetworkSerializer,
 
                  Site: SiteSerializer,
 
-                 TenantRootRole: TenantRootRoleSerializer,
-
                  SliceRole: SliceRoleSerializer,
 
                  XOSGuiExtension: XOSGuiExtensionSerializer,
 
-                 TenantPrivilege: TenantPrivilegeSerializer,
-
-                 Tag: TagSerializer,
+                 ServiceInstanceLink: ServiceInstanceLinkSerializer,
 
                  SlicePrivilege: SlicePrivilegeSerializer,
 
-                 Flavor: FlavorSerializer,
+                 ControllerPrivilege: ControllerPrivilegeSerializer,
 
-                 Port: PortSerializer,
+                 Flavor: FlavorSerializer,
 
                  ServiceRole: ServiceRoleSerializer,
 
@@ -2659,8 +2623,6 @@
 
                  ControllerSlice: ControllerSliceSerializer,
 
-                 TenantRole: TenantRoleSerializer,
-
                  ServiceDependency: ServiceDependencySerializer,
 
                  Network: NetworkSerializer,
@@ -2669,21 +2631,25 @@
 
                  Diag: DiagSerializer,
 
-                 TenantAttribute: TenantAttributeSerializer,
+                 Port: PortSerializer,
 
                  Instance: InstanceSerializer,
 
                  Role: RoleSerializer,
 
+                 ServiceInterface: ServiceInterfaceSerializer,
+
                  NodeLabel: NodeLabelSerializer,
 
+                 Privilege: PrivilegeSerializer,
+
                  Node: NodeSerializer,
 
                  AddressPool: AddressPoolSerializer,
 
                  DashboardView: DashboardViewSerializer,
 
-                 ControllerNetwork: ControllerNetworkSerializer,
+                 NetworkParameter: NetworkParameterSerializer,
 
                  ImageDeployments: ImageDeploymentsSerializer,
 
@@ -2707,8 +2673,6 @@
 
                  SiteRole: SiteRoleSerializer,
 
-                 Tenant: TenantSerializer,
-
                  XOS: XOSSerializer,
 
                  NetworkSlice: NetworkSliceSerializer,
@@ -2717,6 +2681,8 @@
 
                  ControllerSlicePrivilege: ControllerSlicePrivilegeSerializer,
 
+                 ServiceInstanceAttribute: ServiceInstanceAttributeSerializer,
+
                  DeploymentPrivilege: DeploymentPrivilegeSerializer,
 
                  NetworkParameterType: NetworkParameterTypeSerializer,
@@ -2727,14 +2693,16 @@
 
                  DeploymentRole: DeploymentRoleSerializer,
 
-                 TenantRootPrivilege: TenantRootPrivilegeSerializer,
+                 Tag: TagSerializer,
+
+                 InterfaceType: InterfaceTypeSerializer,
 
                  NetworkTemplate: NetworkTemplateSerializer,
 
-                 TenantRoot: TenantRootSerializer,
-
                  ServicePrivilege: ServicePrivilegeSerializer,
 
+                 ServiceInstance: ServiceInstanceSerializer,
+
                  None: None,
                 }
 
@@ -2746,7 +2714,7 @@
     serializer_class = ServiceAttributeSerializer
     id_serializer_class = ServiceAttributeIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','value','service',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','value','service',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -2793,7 +2761,7 @@
     serializer_class = ControllerImagesSerializer
     id_serializer_class = ControllerImagesIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','glance_image_id','image','controller',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','glance_image_id','image','controller',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -2840,7 +2808,7 @@
     serializer_class = ControllerSitePrivilegeSerializer
     id_serializer_class = ControllerSitePrivilegeIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role_id','controller','site_privilege',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role_id','controller','site_privilege',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -2887,7 +2855,7 @@
     serializer_class = ImageSerializer
     id_serializer_class = ImageIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','kind','disk_format','container_format','path','tag','deployments',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','kind','disk_format','container_format','path','tag',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -2929,12 +2897,12 @@
 
 
 
-class NetworkParameterList(XOSListCreateAPIView):
-    queryset = NetworkParameter.objects.select_related().all()
-    serializer_class = NetworkParameterSerializer
-    id_serializer_class = NetworkParameterIdSerializer
+class ControllerNetworkList(XOSListCreateAPIView):
+    queryset = ControllerNetwork.objects.select_related().all()
+    serializer_class = ControllerNetworkSerializer
+    id_serializer_class = ControllerNetworkIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','value','content_type','object_id','parameter',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','subnet','start_ip','stop_ip','net_id','router_id','subnet_id','gateway','segmentation_id','network','controller',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -2948,13 +2916,13 @@
     def get_queryset(self):
         if (not self.request.user.is_authenticated()):
             raise XOSNotAuthenticated()
-        return NetworkParameter.select_by_user(self.request.user)
+        return ControllerNetwork.select_by_user(self.request.user)
 
 
-class NetworkParameterDetail(XOSRetrieveUpdateDestroyAPIView):
-    queryset = NetworkParameter.objects.select_related().all()
-    serializer_class = NetworkParameterSerializer
-    id_serializer_class = NetworkParameterIdSerializer
+class ControllerNetworkDetail(XOSRetrieveUpdateDestroyAPIView):
+    queryset = ControllerNetwork.objects.select_related().all()
+    serializer_class = ControllerNetworkSerializer
+    id_serializer_class = ControllerNetworkIdSerializer
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -2968,7 +2936,7 @@
     def get_queryset(self):
         if (not self.request.user.is_authenticated()):
             raise XOSNotAuthenticated()
-        return NetworkParameter.select_by_user(self.request.user)
+        return ControllerNetwork.select_by_user(self.request.user)
 
     # update() is handled by XOSRetrieveUpdateDestroyAPIView
 
@@ -2981,7 +2949,7 @@
     serializer_class = SiteSerializer
     id_serializer_class = SiteIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','site_url','enabled','hosts_nodes','hosts_users','longitude','latitude','login_base','is_public','abbreviated_name','deployments',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','site_url','enabled','hosts_nodes','hosts_users','longitude','latitude','login_base','is_public','abbreviated_name','deployments',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -3023,59 +2991,12 @@
 
 
 
-class TenantRootRoleList(XOSListCreateAPIView):
-    queryset = TenantRootRole.objects.select_related().all()
-    serializer_class = TenantRootRoleSerializer
-    id_serializer_class = TenantRootRoleIdSerializer
-    filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role',)
-
-    def get_serializer_class(self):
-        no_hyperlinks=False
-        if hasattr(self.request,"query_params"):
-            no_hyperlinks = self.request.query_params.get('no_hyperlinks', False)
-        if (no_hyperlinks):
-            return self.id_serializer_class
-        else:
-            return self.serializer_class
-
-    def get_queryset(self):
-        if (not self.request.user.is_authenticated()):
-            raise XOSNotAuthenticated()
-        return TenantRootRole.select_by_user(self.request.user)
-
-
-class TenantRootRoleDetail(XOSRetrieveUpdateDestroyAPIView):
-    queryset = TenantRootRole.objects.select_related().all()
-    serializer_class = TenantRootRoleSerializer
-    id_serializer_class = TenantRootRoleIdSerializer
-
-    def get_serializer_class(self):
-        no_hyperlinks=False
-        if hasattr(self.request,"query_params"):
-            no_hyperlinks = self.request.query_params.get('no_hyperlinks', False)
-        if (no_hyperlinks):
-            return self.id_serializer_class
-        else:
-            return self.serializer_class
-
-    def get_queryset(self):
-        if (not self.request.user.is_authenticated()):
-            raise XOSNotAuthenticated()
-        return TenantRootRole.select_by_user(self.request.user)
-
-    # update() is handled by XOSRetrieveUpdateDestroyAPIView
-
-    # destroy() is handled by XOSRetrieveUpdateDestroyAPIView
-
-
-
 class SliceRoleList(XOSListCreateAPIView):
     queryset = SliceRole.objects.select_related().all()
     serializer_class = SliceRoleSerializer
     id_serializer_class = SliceRoleIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -3122,7 +3043,7 @@
     serializer_class = XOSGuiExtensionSerializer
     id_serializer_class = XOSGuiExtensionIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','files',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','files',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -3164,12 +3085,12 @@
 
 
 
-class TenantPrivilegeList(XOSListCreateAPIView):
-    queryset = TenantPrivilege.objects.select_related().all()
-    serializer_class = TenantPrivilegeSerializer
-    id_serializer_class = TenantPrivilegeIdSerializer
+class ServiceInstanceLinkList(XOSListCreateAPIView):
+    queryset = ServiceInstanceLink.objects.select_related().all()
+    serializer_class = ServiceInstanceLinkSerializer
+    id_serializer_class = ServiceInstanceLinkIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','user','tenant','role',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','provider_service_instance','subscriber_service_instance','subscriber_service','subscriber_network',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -3183,13 +3104,13 @@
     def get_queryset(self):
         if (not self.request.user.is_authenticated()):
             raise XOSNotAuthenticated()
-        return TenantPrivilege.select_by_user(self.request.user)
+        return ServiceInstanceLink.select_by_user(self.request.user)
 
 
-class TenantPrivilegeDetail(XOSRetrieveUpdateDestroyAPIView):
-    queryset = TenantPrivilege.objects.select_related().all()
-    serializer_class = TenantPrivilegeSerializer
-    id_serializer_class = TenantPrivilegeIdSerializer
+class ServiceInstanceLinkDetail(XOSRetrieveUpdateDestroyAPIView):
+    queryset = ServiceInstanceLink.objects.select_related().all()
+    serializer_class = ServiceInstanceLinkSerializer
+    id_serializer_class = ServiceInstanceLinkIdSerializer
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -3203,54 +3124,7 @@
     def get_queryset(self):
         if (not self.request.user.is_authenticated()):
             raise XOSNotAuthenticated()
-        return TenantPrivilege.select_by_user(self.request.user)
-
-    # update() is handled by XOSRetrieveUpdateDestroyAPIView
-
-    # destroy() is handled by XOSRetrieveUpdateDestroyAPIView
-
-
-
-class TagList(XOSListCreateAPIView):
-    queryset = Tag.objects.select_related().all()
-    serializer_class = TagSerializer
-    id_serializer_class = TagIdSerializer
-    filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','value','content_type','object_id','service',)
-
-    def get_serializer_class(self):
-        no_hyperlinks=False
-        if hasattr(self.request,"query_params"):
-            no_hyperlinks = self.request.query_params.get('no_hyperlinks', False)
-        if (no_hyperlinks):
-            return self.id_serializer_class
-        else:
-            return self.serializer_class
-
-    def get_queryset(self):
-        if (not self.request.user.is_authenticated()):
-            raise XOSNotAuthenticated()
-        return Tag.select_by_user(self.request.user)
-
-
-class TagDetail(XOSRetrieveUpdateDestroyAPIView):
-    queryset = Tag.objects.select_related().all()
-    serializer_class = TagSerializer
-    id_serializer_class = TagIdSerializer
-
-    def get_serializer_class(self):
-        no_hyperlinks=False
-        if hasattr(self.request,"query_params"):
-            no_hyperlinks = self.request.query_params.get('no_hyperlinks', False)
-        if (no_hyperlinks):
-            return self.id_serializer_class
-        else:
-            return self.serializer_class
-
-    def get_queryset(self):
-        if (not self.request.user.is_authenticated()):
-            raise XOSNotAuthenticated()
-        return Tag.select_by_user(self.request.user)
+        return ServiceInstanceLink.select_by_user(self.request.user)
 
     # update() is handled by XOSRetrieveUpdateDestroyAPIView
 
@@ -3263,7 +3137,7 @@
     serializer_class = SlicePrivilegeSerializer
     id_serializer_class = SlicePrivilegeIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','user','slice','role',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','user','slice','role',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -3305,12 +3179,59 @@
 
 
 
+class ControllerPrivilegeList(XOSListCreateAPIView):
+    queryset = ControllerPrivilege.objects.select_related().all()
+    serializer_class = ControllerPrivilegeSerializer
+    id_serializer_class = ControllerPrivilegeIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role_id','controller','privilege',)
+
+    def get_serializer_class(self):
+        no_hyperlinks=False
+        if hasattr(self.request,"query_params"):
+            no_hyperlinks = self.request.query_params.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
+    def get_queryset(self):
+        if (not self.request.user.is_authenticated()):
+            raise XOSNotAuthenticated()
+        return ControllerPrivilege.select_by_user(self.request.user)
+
+
+class ControllerPrivilegeDetail(XOSRetrieveUpdateDestroyAPIView):
+    queryset = ControllerPrivilege.objects.select_related().all()
+    serializer_class = ControllerPrivilegeSerializer
+    id_serializer_class = ControllerPrivilegeIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks=False
+        if hasattr(self.request,"query_params"):
+            no_hyperlinks = self.request.query_params.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
+    def get_queryset(self):
+        if (not self.request.user.is_authenticated()):
+            raise XOSNotAuthenticated()
+        return ControllerPrivilege.select_by_user(self.request.user)
+
+    # update() is handled by XOSRetrieveUpdateDestroyAPIView
+
+    # destroy() is handled by XOSRetrieveUpdateDestroyAPIView
+
+
+
 class FlavorList(XOSListCreateAPIView):
     queryset = Flavor.objects.select_related().all()
     serializer_class = FlavorSerializer
     id_serializer_class = FlavorIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','description','flavor','order','default','deployments',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','description','flavor',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -3352,59 +3273,12 @@
 
 
 
-class PortList(XOSListCreateAPIView):
-    queryset = Port.objects.select_related().all()
-    serializer_class = PortSerializer
-    id_serializer_class = PortIdSerializer
-    filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','ip','port_id','mac','xos_created','network','instance',)
-
-    def get_serializer_class(self):
-        no_hyperlinks=False
-        if hasattr(self.request,"query_params"):
-            no_hyperlinks = self.request.query_params.get('no_hyperlinks', False)
-        if (no_hyperlinks):
-            return self.id_serializer_class
-        else:
-            return self.serializer_class
-
-    def get_queryset(self):
-        if (not self.request.user.is_authenticated()):
-            raise XOSNotAuthenticated()
-        return Port.select_by_user(self.request.user)
-
-
-class PortDetail(XOSRetrieveUpdateDestroyAPIView):
-    queryset = Port.objects.select_related().all()
-    serializer_class = PortSerializer
-    id_serializer_class = PortIdSerializer
-
-    def get_serializer_class(self):
-        no_hyperlinks=False
-        if hasattr(self.request,"query_params"):
-            no_hyperlinks = self.request.query_params.get('no_hyperlinks', False)
-        if (no_hyperlinks):
-            return self.id_serializer_class
-        else:
-            return self.serializer_class
-
-    def get_queryset(self):
-        if (not self.request.user.is_authenticated()):
-            raise XOSNotAuthenticated()
-        return Port.select_by_user(self.request.user)
-
-    # update() is handled by XOSRetrieveUpdateDestroyAPIView
-
-    # destroy() is handled by XOSRetrieveUpdateDestroyAPIView
-
-
-
 class ServiceRoleList(XOSListCreateAPIView):
     queryset = ServiceRole.objects.select_related().all()
     serializer_class = ServiceRoleSerializer
     id_serializer_class = ServiceRoleIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -3451,7 +3325,7 @@
     serializer_class = ControllerSiteSerializer
     id_serializer_class = ControllerSiteIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','tenant_id','site','controller',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','tenant_id','site','controller',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -3498,7 +3372,7 @@
     serializer_class = ControllerSliceSerializer
     id_serializer_class = ControllerSliceIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','tenant_id','controller','slice',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','tenant_id','controller','slice',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -3540,59 +3414,12 @@
 
 
 
-class TenantRoleList(XOSListCreateAPIView):
-    queryset = TenantRole.objects.select_related().all()
-    serializer_class = TenantRoleSerializer
-    id_serializer_class = TenantRoleIdSerializer
-    filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role',)
-
-    def get_serializer_class(self):
-        no_hyperlinks=False
-        if hasattr(self.request,"query_params"):
-            no_hyperlinks = self.request.query_params.get('no_hyperlinks', False)
-        if (no_hyperlinks):
-            return self.id_serializer_class
-        else:
-            return self.serializer_class
-
-    def get_queryset(self):
-        if (not self.request.user.is_authenticated()):
-            raise XOSNotAuthenticated()
-        return TenantRole.select_by_user(self.request.user)
-
-
-class TenantRoleDetail(XOSRetrieveUpdateDestroyAPIView):
-    queryset = TenantRole.objects.select_related().all()
-    serializer_class = TenantRoleSerializer
-    id_serializer_class = TenantRoleIdSerializer
-
-    def get_serializer_class(self):
-        no_hyperlinks=False
-        if hasattr(self.request,"query_params"):
-            no_hyperlinks = self.request.query_params.get('no_hyperlinks', False)
-        if (no_hyperlinks):
-            return self.id_serializer_class
-        else:
-            return self.serializer_class
-
-    def get_queryset(self):
-        if (not self.request.user.is_authenticated()):
-            raise XOSNotAuthenticated()
-        return TenantRole.select_by_user(self.request.user)
-
-    # update() is handled by XOSRetrieveUpdateDestroyAPIView
-
-    # destroy() is handled by XOSRetrieveUpdateDestroyAPIView
-
-
-
 class ServiceDependencyList(XOSListCreateAPIView):
     queryset = ServiceDependency.objects.select_related().all()
     serializer_class = ServiceDependencySerializer
     id_serializer_class = ServiceDependencyIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','kind','service_specific_id','service_specific_attribute','connect_method','provider_service','subscriber_service','subscriber_tenant','subscriber_user','subscriber_root','subscriber_network',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','connect_method','provider_service','subscriber_service',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -3639,7 +3466,7 @@
     serializer_class = NetworkSerializer
     id_serializer_class = NetworkIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','subnet','start_ip','end_ip','ports','labels','permit_all_slices','autoconnect','template','owner','slices','slices','instances',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','subnet','start_ip','end_ip','ports','labels','permit_all_slices','autoconnect','template','owner','slices','slices','instances',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -3686,7 +3513,7 @@
     serializer_class = ControllerRoleSerializer
     id_serializer_class = ControllerRoleIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -3733,7 +3560,7 @@
     serializer_class = DiagSerializer
     id_serializer_class = DiagIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -3775,12 +3602,12 @@
 
 
 
-class TenantAttributeList(XOSListCreateAPIView):
-    queryset = TenantAttribute.objects.select_related().all()
-    serializer_class = TenantAttributeSerializer
-    id_serializer_class = TenantAttributeIdSerializer
+class PortList(XOSListCreateAPIView):
+    queryset = Port.objects.select_related().all()
+    serializer_class = PortSerializer
+    id_serializer_class = PortIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','value','tenant',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','ip','port_id','mac','xos_created','network','instance',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -3794,13 +3621,13 @@
     def get_queryset(self):
         if (not self.request.user.is_authenticated()):
             raise XOSNotAuthenticated()
-        return TenantAttribute.select_by_user(self.request.user)
+        return Port.select_by_user(self.request.user)
 
 
-class TenantAttributeDetail(XOSRetrieveUpdateDestroyAPIView):
-    queryset = TenantAttribute.objects.select_related().all()
-    serializer_class = TenantAttributeSerializer
-    id_serializer_class = TenantAttributeIdSerializer
+class PortDetail(XOSRetrieveUpdateDestroyAPIView):
+    queryset = Port.objects.select_related().all()
+    serializer_class = PortSerializer
+    id_serializer_class = PortIdSerializer
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -3814,7 +3641,7 @@
     def get_queryset(self):
         if (not self.request.user.is_authenticated()):
             raise XOSNotAuthenticated()
-        return TenantAttribute.select_by_user(self.request.user)
+        return Port.select_by_user(self.request.user)
 
     # update() is handled by XOSRetrieveUpdateDestroyAPIView
 
@@ -3827,7 +3654,7 @@
     serializer_class = InstanceSerializer
     id_serializer_class = InstanceIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','instance_id','instance_uuid','name','instance_name','ip','numberCores','userData','isolation','volumes','image','creator','slice','deployment','node','flavor','parent','networks',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','instance_id','instance_uuid','name','instance_name','ip','numberCores','userData','isolation','volumes','image','creator','slice','deployment','node','flavor','parent','networks',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -3874,7 +3701,7 @@
     serializer_class = RoleSerializer
     id_serializer_class = RoleIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role_type','role','description',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role_type','role','description',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -3916,12 +3743,59 @@
 
 
 
+class ServiceInterfaceList(XOSListCreateAPIView):
+    queryset = ServiceInterface.objects.select_related().all()
+    serializer_class = ServiceInterfaceSerializer
+    id_serializer_class = ServiceInterfaceIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','service','interface_type',)
+
+    def get_serializer_class(self):
+        no_hyperlinks=False
+        if hasattr(self.request,"query_params"):
+            no_hyperlinks = self.request.query_params.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
+    def get_queryset(self):
+        if (not self.request.user.is_authenticated()):
+            raise XOSNotAuthenticated()
+        return ServiceInterface.select_by_user(self.request.user)
+
+
+class ServiceInterfaceDetail(XOSRetrieveUpdateDestroyAPIView):
+    queryset = ServiceInterface.objects.select_related().all()
+    serializer_class = ServiceInterfaceSerializer
+    id_serializer_class = ServiceInterfaceIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks=False
+        if hasattr(self.request,"query_params"):
+            no_hyperlinks = self.request.query_params.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
+    def get_queryset(self):
+        if (not self.request.user.is_authenticated()):
+            raise XOSNotAuthenticated()
+        return ServiceInterface.select_by_user(self.request.user)
+
+    # update() is handled by XOSRetrieveUpdateDestroyAPIView
+
+    # destroy() is handled by XOSRetrieveUpdateDestroyAPIView
+
+
+
 class NodeLabelList(XOSListCreateAPIView):
     queryset = NodeLabel.objects.select_related().all()
     serializer_class = NodeLabelSerializer
     id_serializer_class = NodeLabelIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','nodes',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','nodes',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -3963,12 +3837,59 @@
 
 
 
+class PrivilegeList(XOSListCreateAPIView):
+    queryset = Privilege.objects.select_related().all()
+    serializer_class = PrivilegeSerializer
+    id_serializer_class = PrivilegeIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','accessor_id','accessor_type','object_id','object_type','permission','granted','expires',)
+
+    def get_serializer_class(self):
+        no_hyperlinks=False
+        if hasattr(self.request,"query_params"):
+            no_hyperlinks = self.request.query_params.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
+    def get_queryset(self):
+        if (not self.request.user.is_authenticated()):
+            raise XOSNotAuthenticated()
+        return Privilege.select_by_user(self.request.user)
+
+
+class PrivilegeDetail(XOSRetrieveUpdateDestroyAPIView):
+    queryset = Privilege.objects.select_related().all()
+    serializer_class = PrivilegeSerializer
+    id_serializer_class = PrivilegeIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks=False
+        if hasattr(self.request,"query_params"):
+            no_hyperlinks = self.request.query_params.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
+    def get_queryset(self):
+        if (not self.request.user.is_authenticated()):
+            raise XOSNotAuthenticated()
+        return Privilege.select_by_user(self.request.user)
+
+    # update() is handled by XOSRetrieveUpdateDestroyAPIView
+
+    # destroy() is handled by XOSRetrieveUpdateDestroyAPIView
+
+
+
 class NodeList(XOSListCreateAPIView):
     queryset = Node.objects.select_related().all()
     serializer_class = NodeSerializer
     id_serializer_class = NodeIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','site_deployment','site','nodelabels',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','site_deployment','nodelabels',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -4015,7 +3936,7 @@
     serializer_class = AddressPoolSerializer
     id_serializer_class = AddressPoolIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','addresses','gateway_ip','gateway_mac','cidr','inuse','service',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','addresses','gateway_ip','gateway_mac','cidr','inuse','service',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -4062,7 +3983,7 @@
     serializer_class = DashboardViewSerializer
     id_serializer_class = DashboardViewIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','url','enabled','icon','icon_active','controllers','deployments',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','url','enabled','icon','icon_active','controllers','deployments',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -4104,12 +4025,12 @@
 
 
 
-class ControllerNetworkList(XOSListCreateAPIView):
-    queryset = ControllerNetwork.objects.select_related().all()
-    serializer_class = ControllerNetworkSerializer
-    id_serializer_class = ControllerNetworkIdSerializer
+class NetworkParameterList(XOSListCreateAPIView):
+    queryset = NetworkParameter.objects.select_related().all()
+    serializer_class = NetworkParameterSerializer
+    id_serializer_class = NetworkParameterIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','subnet','start_ip','stop_ip','net_id','router_id','subnet_id','gateway','segmentation_id','network','controller',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','value','content_type','object_id','parameter',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -4123,13 +4044,13 @@
     def get_queryset(self):
         if (not self.request.user.is_authenticated()):
             raise XOSNotAuthenticated()
-        return ControllerNetwork.select_by_user(self.request.user)
+        return NetworkParameter.select_by_user(self.request.user)
 
 
-class ControllerNetworkDetail(XOSRetrieveUpdateDestroyAPIView):
-    queryset = ControllerNetwork.objects.select_related().all()
-    serializer_class = ControllerNetworkSerializer
-    id_serializer_class = ControllerNetworkIdSerializer
+class NetworkParameterDetail(XOSRetrieveUpdateDestroyAPIView):
+    queryset = NetworkParameter.objects.select_related().all()
+    serializer_class = NetworkParameterSerializer
+    id_serializer_class = NetworkParameterIdSerializer
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -4143,7 +4064,7 @@
     def get_queryset(self):
         if (not self.request.user.is_authenticated()):
             raise XOSNotAuthenticated()
-        return ControllerNetwork.select_by_user(self.request.user)
+        return NetworkParameter.select_by_user(self.request.user)
 
     # update() is handled by XOSRetrieveUpdateDestroyAPIView
 
@@ -4156,7 +4077,7 @@
     serializer_class = ImageDeploymentsSerializer
     id_serializer_class = ImageDeploymentsIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','image','deployment',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','image','deployment',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -4203,7 +4124,7 @@
     serializer_class = ControllerUserSerializer
     id_serializer_class = ControllerUserIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','kuser_id','user','controller',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','kuser_id','user','controller',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -4250,7 +4171,7 @@
     serializer_class = ServiceMonitoringAgentInfoSerializer
     id_serializer_class = ServiceMonitoringAgentInfoIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','target_uri','service',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','target_uri','service',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -4297,7 +4218,7 @@
     serializer_class = ControllerDashboardViewSerializer
     id_serializer_class = ControllerDashboardViewIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','enabled','url','controller','dashboardView',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','enabled','url','controller','dashboardView',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -4344,7 +4265,7 @@
     serializer_class = UserDashboardViewSerializer
     id_serializer_class = UserDashboardViewIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','user','dashboardView','order',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','user','dashboardView','order',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -4391,7 +4312,7 @@
     serializer_class = ControllerSerializer
     id_serializer_class = ControllerIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','backend_type','version','auth_url','admin_user','admin_password','admin_tenant','domain','rabbit_host','rabbit_user','rabbit_password','deployment','dashboardviews',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','backend_type','version','auth_url','admin_user','admin_password','admin_tenant','domain','rabbit_host','rabbit_user','rabbit_password','deployment','dashboardviews',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -4438,7 +4359,7 @@
     serializer_class = SliceSerializer
     id_serializer_class = SliceIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','enabled','description','slice_url','max_instances','network','exposed_ports','mount_data_sets','default_isolation','site','service','creator','default_flavor','default_image','default_node','networks','networks',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','enabled','description','slice_url','max_instances','network','exposed_ports','mount_data_sets','default_isolation','site','service','creator','default_flavor','default_image','default_node','networks','networks',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -4485,7 +4406,7 @@
     serializer_class = UserSerializer
     id_serializer_class = UserIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','password','last_login','email','username','firstname','lastname','phone','user_url','site','public_key','is_active','is_admin','is_staff','is_readonly','is_registering','is_appuser','login_page','created','updated','enacted','policed','backend_status','backend_need_delete','backend_need_reap','deleted','write_protect','lazy_blocked','no_sync','no_policy','timezone',)
+    filter_fields = ('id','password','last_login','email','username','firstname','lastname','phone','user_url','site','public_key','is_active','is_admin','is_staff','is_readonly','is_registering','is_appuser','login_page','created','updated','enacted','policed','backend_status','backend_need_delete','backend_need_reap','deleted','write_protect','lazy_blocked','no_sync','no_policy','timezone','policy_status',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -4532,7 +4453,7 @@
     serializer_class = DeploymentSerializer
     id_serializer_class = DeploymentIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','accessControl','images','sites','flavors','dashboardviews',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','accessControl','sites','dashboardviews',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -4579,7 +4500,7 @@
     serializer_class = SitePrivilegeSerializer
     id_serializer_class = SitePrivilegeIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','user','site','role',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','user','site','role',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -4626,7 +4547,7 @@
     serializer_class = SiteRoleSerializer
     id_serializer_class = SiteRoleIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -4668,59 +4589,12 @@
 
 
 
-class TenantList(XOSListCreateAPIView):
-    queryset = Tenant.objects.select_related().all()
-    serializer_class = TenantSerializer
-    id_serializer_class = TenantIdSerializer
-    filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','kind','service_specific_id','service_specific_attribute','connect_method','provider_service','subscriber_service','subscriber_tenant','subscriber_user','subscriber_root','subscriber_network',)
-
-    def get_serializer_class(self):
-        no_hyperlinks=False
-        if hasattr(self.request,"query_params"):
-            no_hyperlinks = self.request.query_params.get('no_hyperlinks', False)
-        if (no_hyperlinks):
-            return self.id_serializer_class
-        else:
-            return self.serializer_class
-
-    def get_queryset(self):
-        if (not self.request.user.is_authenticated()):
-            raise XOSNotAuthenticated()
-        return Tenant.select_by_user(self.request.user)
-
-
-class TenantDetail(XOSRetrieveUpdateDestroyAPIView):
-    queryset = Tenant.objects.select_related().all()
-    serializer_class = TenantSerializer
-    id_serializer_class = TenantIdSerializer
-
-    def get_serializer_class(self):
-        no_hyperlinks=False
-        if hasattr(self.request,"query_params"):
-            no_hyperlinks = self.request.query_params.get('no_hyperlinks', False)
-        if (no_hyperlinks):
-            return self.id_serializer_class
-        else:
-            return self.serializer_class
-
-    def get_queryset(self):
-        if (not self.request.user.is_authenticated()):
-            raise XOSNotAuthenticated()
-        return Tenant.select_by_user(self.request.user)
-
-    # update() is handled by XOSRetrieveUpdateDestroyAPIView
-
-    # destroy() is handled by XOSRetrieveUpdateDestroyAPIView
-
-
-
 class XOSList(XOSListCreateAPIView):
     queryset = XOS.objects.select_related().all()
     serializer_class = XOSSerializer
     id_serializer_class = XOSIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -4767,7 +4641,7 @@
     serializer_class = NetworkSliceSerializer
     id_serializer_class = NetworkSliceIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','network','slice',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','network','slice',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -4814,7 +4688,7 @@
     serializer_class = ServiceSerializer
     id_serializer_class = ServiceIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','description','enabled','kind','name','versionNumber','published','view_url','icon_url','public_key','private_key_fn','service_specific_id','service_specific_attribute',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','description','enabled','kind','name','versionNumber','published','view_url','icon_url','public_key','private_key_fn','service_specific_id','service_specific_attribute',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -4861,7 +4735,7 @@
     serializer_class = ControllerSlicePrivilegeSerializer
     id_serializer_class = ControllerSlicePrivilegeIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role_id','controller','slice_privilege',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role_id','controller','slice_privilege',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -4903,12 +4777,59 @@
 
 
 
+class ServiceInstanceAttributeList(XOSListCreateAPIView):
+    queryset = ServiceInstanceAttribute.objects.select_related().all()
+    serializer_class = ServiceInstanceAttributeSerializer
+    id_serializer_class = ServiceInstanceAttributeIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','value','service_instance',)
+
+    def get_serializer_class(self):
+        no_hyperlinks=False
+        if hasattr(self.request,"query_params"):
+            no_hyperlinks = self.request.query_params.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
+    def get_queryset(self):
+        if (not self.request.user.is_authenticated()):
+            raise XOSNotAuthenticated()
+        return ServiceInstanceAttribute.select_by_user(self.request.user)
+
+
+class ServiceInstanceAttributeDetail(XOSRetrieveUpdateDestroyAPIView):
+    queryset = ServiceInstanceAttribute.objects.select_related().all()
+    serializer_class = ServiceInstanceAttributeSerializer
+    id_serializer_class = ServiceInstanceAttributeIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks=False
+        if hasattr(self.request,"query_params"):
+            no_hyperlinks = self.request.query_params.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
+    def get_queryset(self):
+        if (not self.request.user.is_authenticated()):
+            raise XOSNotAuthenticated()
+        return ServiceInstanceAttribute.select_by_user(self.request.user)
+
+    # update() is handled by XOSRetrieveUpdateDestroyAPIView
+
+    # destroy() is handled by XOSRetrieveUpdateDestroyAPIView
+
+
+
 class DeploymentPrivilegeList(XOSListCreateAPIView):
     queryset = DeploymentPrivilege.objects.select_related().all()
     serializer_class = DeploymentPrivilegeSerializer
     id_serializer_class = DeploymentPrivilegeIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','user','deployment','role',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','user','deployment','role',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -4955,7 +4876,7 @@
     serializer_class = NetworkParameterTypeSerializer
     id_serializer_class = NetworkParameterTypeIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','description',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','description',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -5002,7 +4923,7 @@
     serializer_class = SiteDeploymentSerializer
     id_serializer_class = SiteDeploymentIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','availability_zone','site','deployment','controller',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','availability_zone','site','deployment','controller',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -5049,7 +4970,7 @@
     serializer_class = TenantWithContainerSerializer
     id_serializer_class = TenantWithContainerIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','kind','service_specific_id','service_specific_attribute','connect_method','provider_service','subscriber_service','subscriber_tenant','subscriber_user','subscriber_root','subscriber_network','external_hostname','external_container','instance','creator',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','service_specific_id','service_specific_attribute','owner','external_hostname','external_container','instance','creator',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -5096,7 +5017,7 @@
     serializer_class = DeploymentRoleSerializer
     id_serializer_class = DeploymentRoleIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','role',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','role',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -5138,12 +5059,12 @@
 
 
 
-class TenantRootPrivilegeList(XOSListCreateAPIView):
-    queryset = TenantRootPrivilege.objects.select_related().all()
-    serializer_class = TenantRootPrivilegeSerializer
-    id_serializer_class = TenantRootPrivilegeIdSerializer
+class TagList(XOSListCreateAPIView):
+    queryset = Tag.objects.select_related().all()
+    serializer_class = TagSerializer
+    id_serializer_class = TagIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','user','tenant_root','role',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','value','content_type','object_id','service',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -5157,13 +5078,13 @@
     def get_queryset(self):
         if (not self.request.user.is_authenticated()):
             raise XOSNotAuthenticated()
-        return TenantRootPrivilege.select_by_user(self.request.user)
+        return Tag.select_by_user(self.request.user)
 
 
-class TenantRootPrivilegeDetail(XOSRetrieveUpdateDestroyAPIView):
-    queryset = TenantRootPrivilege.objects.select_related().all()
-    serializer_class = TenantRootPrivilegeSerializer
-    id_serializer_class = TenantRootPrivilegeIdSerializer
+class TagDetail(XOSRetrieveUpdateDestroyAPIView):
+    queryset = Tag.objects.select_related().all()
+    serializer_class = TagSerializer
+    id_serializer_class = TagIdSerializer
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -5177,7 +5098,54 @@
     def get_queryset(self):
         if (not self.request.user.is_authenticated()):
             raise XOSNotAuthenticated()
-        return TenantRootPrivilege.select_by_user(self.request.user)
+        return Tag.select_by_user(self.request.user)
+
+    # update() is handled by XOSRetrieveUpdateDestroyAPIView
+
+    # destroy() is handled by XOSRetrieveUpdateDestroyAPIView
+
+
+
+class InterfaceTypeList(XOSListCreateAPIView):
+    queryset = InterfaceType.objects.select_related().all()
+    serializer_class = InterfaceTypeSerializer
+    id_serializer_class = InterfaceTypeIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','direction',)
+
+    def get_serializer_class(self):
+        no_hyperlinks=False
+        if hasattr(self.request,"query_params"):
+            no_hyperlinks = self.request.query_params.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
+    def get_queryset(self):
+        if (not self.request.user.is_authenticated()):
+            raise XOSNotAuthenticated()
+        return InterfaceType.select_by_user(self.request.user)
+
+
+class InterfaceTypeDetail(XOSRetrieveUpdateDestroyAPIView):
+    queryset = InterfaceType.objects.select_related().all()
+    serializer_class = InterfaceTypeSerializer
+    id_serializer_class = InterfaceTypeIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks=False
+        if hasattr(self.request,"query_params"):
+            no_hyperlinks = self.request.query_params.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
+    def get_queryset(self):
+        if (not self.request.user.is_authenticated()):
+            raise XOSNotAuthenticated()
+        return InterfaceType.select_by_user(self.request.user)
 
     # update() is handled by XOSRetrieveUpdateDestroyAPIView
 
@@ -5190,7 +5158,7 @@
     serializer_class = NetworkTemplateSerializer
     id_serializer_class = NetworkTemplateIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','name','description','visibility','translation','access','shared_network_name','shared_network_id','topology_kind','controller_kind','vtn_kind',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','description','visibility','translation','access','shared_network_name','shared_network_id','topology_kind','controller_kind','vtn_kind',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -5232,59 +5200,12 @@
 
 
 
-class TenantRootList(XOSListCreateAPIView):
-    queryset = TenantRoot.objects.select_related().all()
-    serializer_class = TenantRootSerializer
-    id_serializer_class = TenantRootIdSerializer
-    filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','kind','name','service_specific_attribute','service_specific_id',)
-
-    def get_serializer_class(self):
-        no_hyperlinks=False
-        if hasattr(self.request,"query_params"):
-            no_hyperlinks = self.request.query_params.get('no_hyperlinks', False)
-        if (no_hyperlinks):
-            return self.id_serializer_class
-        else:
-            return self.serializer_class
-
-    def get_queryset(self):
-        if (not self.request.user.is_authenticated()):
-            raise XOSNotAuthenticated()
-        return TenantRoot.select_by_user(self.request.user)
-
-
-class TenantRootDetail(XOSRetrieveUpdateDestroyAPIView):
-    queryset = TenantRoot.objects.select_related().all()
-    serializer_class = TenantRootSerializer
-    id_serializer_class = TenantRootIdSerializer
-
-    def get_serializer_class(self):
-        no_hyperlinks=False
-        if hasattr(self.request,"query_params"):
-            no_hyperlinks = self.request.query_params.get('no_hyperlinks', False)
-        if (no_hyperlinks):
-            return self.id_serializer_class
-        else:
-            return self.serializer_class
-
-    def get_queryset(self):
-        if (not self.request.user.is_authenticated()):
-            raise XOSNotAuthenticated()
-        return TenantRoot.select_by_user(self.request.user)
-
-    # update() is handled by XOSRetrieveUpdateDestroyAPIView
-
-    # destroy() is handled by XOSRetrieveUpdateDestroyAPIView
-
-
-
 class ServicePrivilegeList(XOSListCreateAPIView):
     queryset = ServicePrivilege.objects.select_related().all()
     serializer_class = ServicePrivilegeSerializer
     id_serializer_class = ServicePrivilegeIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
-    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','user','service','role',)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','user','service','role',)
 
     def get_serializer_class(self):
         no_hyperlinks=False
@@ -5324,3 +5245,50 @@
 
     # destroy() is handled by XOSRetrieveUpdateDestroyAPIView
 
+
+
+class ServiceInstanceList(XOSListCreateAPIView):
+    queryset = ServiceInstance.objects.select_related().all()
+    serializer_class = ServiceInstanceSerializer
+    id_serializer_class = ServiceInstanceIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','policed','backend_register','backend_need_delete','backend_need_reap','backend_status','deleted','write_protect','lazy_blocked','no_sync','no_policy','policy_status','name','service_specific_id','service_specific_attribute','owner',)
+
+    def get_serializer_class(self):
+        no_hyperlinks=False
+        if hasattr(self.request,"query_params"):
+            no_hyperlinks = self.request.query_params.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
+    def get_queryset(self):
+        if (not self.request.user.is_authenticated()):
+            raise XOSNotAuthenticated()
+        return ServiceInstance.select_by_user(self.request.user)
+
+
+class ServiceInstanceDetail(XOSRetrieveUpdateDestroyAPIView):
+    queryset = ServiceInstance.objects.select_related().all()
+    serializer_class = ServiceInstanceSerializer
+    id_serializer_class = ServiceInstanceIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks=False
+        if hasattr(self.request,"query_params"):
+            no_hyperlinks = self.request.query_params.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
+    def get_queryset(self):
+        if (not self.request.user.is_authenticated()):
+            raise XOSNotAuthenticated()
+        return ServiceInstance.select_by_user(self.request.user)
+
+    # update() is handled by XOSRetrieveUpdateDestroyAPIView
+
+    # destroy() is handled by XOSRetrieveUpdateDestroyAPIView
+
diff --git a/xos/xos_client/xosapi/convenience/cordsubscriberroot.py b/xos/xos_client/xosapi/convenience/cordsubscriberroot.py
index 876e3c4..317094a 100644
--- a/xos/xos_client/xosapi/convenience/cordsubscriberroot.py
+++ b/xos/xos_client/xosapi/convenience/cordsubscriberroot.py
@@ -4,9 +4,13 @@
 class ORMWrapperCordSubscriberRoot(ORMWrapper):
     @property
     def volt(self):
-        volt_tenants = self.stub.VOLTTenant.objects.filter(subscriber_root_id = self.id)
-        if volt_tenants:
-            return volt_tenants[0]
+        links = self.subscribed_links.all()
+        for link in links:
+            # TODO: hardcoded service dependency
+            # cast from ServiceInstance to VOLTTenant
+            volts = self.stub.VOLTTenant.objects.filter(id = link.provider_service_instance.id)
+            if volts:
+                return volts[0]
         return None
 
     sync_attributes = ("firewall_enable",
diff --git a/xos/xos_client/xosapi/convenience/tenant.py b/xos/xos_client/xosapi/convenience/tenant.py
index 94b55b5..e8078f4 100644
--- a/xos/xos_client/xosapi/convenience/tenant.py
+++ b/xos/xos_client/xosapi/convenience/tenant.py
@@ -1,12 +1,19 @@
 import json
 from xosapi.orm import ORMWrapper, register_convenience_wrapper
 
-class ORMWrapperTenant(ORMWrapper):
+class ORMWrapperServiceInstance(ORMWrapper):
     @property
-    def tenantattribute_dict(self):
+    def serviceinstanceattribute_dict(self):
         attrs = {}
-        for attr in self.tenantattributes.all():
+        for attr in self.service_instance_attributes.all():
             attrs[attr.name] = attr.value
         return attrs
 
-register_convenience_wrapper("Tenant", ORMWrapperTenant)
+    @property
+    def tenantattribute_dict(self):
+        return self.serviceinstanceattribute_dict
+
+class ORMWrapperTenant(ORMWrapperServiceInstance):
+    pass
+
+register_convenience_wrapper("ServiceInstance", ORMWrapperServiceInstance)
diff --git a/xos/xos_client/xosapi/convenience/volttenant.py b/xos/xos_client/xosapi/convenience/volttenant.py
index d8bb24c..5c19564 100644
--- a/xos/xos_client/xosapi/convenience/volttenant.py
+++ b/xos/xos_client/xosapi/convenience/volttenant.py
@@ -3,19 +3,21 @@
 class ORMWrapperVOLTTenant(ORMWrapper):
     @property
     def vcpe(self):
-        vcpe_tenants = self.stub.VSGTenant.objects.filter(subscriber_tenant_id = self.id)
-        if vcpe_tenants:
-            return vcpe_tenants[0]
+        links = self.stub.ServiceInstanceLink.objects.filter(subscriber_service_instance_id = self.id)
+        for link in links:
+            # cast from ServiceInstance to VSGTenant
+            vsgs = self.stub.VSGTenant.objects.filter(id = link.provider_service_instance.id)
+            if vsgs:
+                return vsgs[0]
         return None
 
     @property
     def subscriber(self):
-        if not self.subscriber_root:
-            return None
-        subs = self.stub.CordSubscriberRoot.objects.filter(id=self.subscriber_root.id)
-        if not subs:
-            return None
-        return subs[0]
-
+        links = self.stub.ServiceInstanceLink.objects.filter(provider_service_instance_id = self.id)
+        for link in links:
+            subs = self.stub.CordSubscriberRoot.objects.filter(id=link.subscriber_service_instance_id)
+            if subs:
+                return subs[0]
+        return None
 
 register_convenience_wrapper("VOLTTenant", ORMWrapperVOLTTenant)
diff --git a/xos/xos_client/xosapi/convenience/vsgtenant.py b/xos/xos_client/xosapi/convenience/vsgtenant.py
index 0d3fa90..809d36d 100644
--- a/xos/xos_client/xosapi/convenience/vsgtenant.py
+++ b/xos/xos_client/xosapi/convenience/vsgtenant.py
@@ -7,19 +7,22 @@
 
     @property
     def volt(self):
-        if not self.subscriber_tenant:
-            return None
-        # make sure subscriber_tenant is properly subclassed to a volt object
-        volts = self.stub.VOLTTenant.objects.filter(id = self.subscriber_tenant.id)
-        if not volts:
-            return None
-        return volts[0]
+        links = self.provided_links.all()
+        for link in links:
+            # cast from ServiceInstance to VoltTenant
+            volts = self.stub.VOLTTenant.objects.filter(id = link.subscriber_service_instance.id)
+            if volts:
+                return volts[0]
+        return None
 
     @property
     def vrouter(self):
-        vrouter_tenants = self.stub.VRouterTenant.objects.filter(subscriber_tenant_id = self.id)
-        if vrouter_tenants:
-            return vrouter_tenants[0]
+        links = self.subscribed_links.all()
+        for link in links:
+            # cast from ServiceInstance to VRouterTenant
+            vrouters = self.stub.VRouterTenant.objects.filter(id = link.provider_service_instance.id)
+            if vrouters:
+                return vrouters[0]
         return None
 
     def get_vrouter_field(self, name, default=None):