CORD-1244 clean up attics

Change-Id: I6e54dfd6958b8934b676ff47bfbe24f6addb6bb5
diff --git a/xos/core/admin.py b/xos/core/admin.py
index 428aceb..bac92de 100644
--- a/xos/core/admin.py
+++ b/xos/core/admin.py
@@ -301,34 +301,34 @@
     class SafeDeleteQuerysetWrapper(object):
         def __init__(self, wrapped_queryset):
             self.wrapped_queryset = wrapped_queryset
-

-        def _safe_delete(self):

-            for obj in list(self.wrapped_queryset):

-                obj.delete()

-

-        def __getattr__(self, attr):

-            if attr == 'delete':

-                return self._safe_delete

-            else:

-                return getattr(self.wrapped_queryset, attr)

-

-        def __iter__(self):

-            for obj in list(self.wrapped_queryset):

-                yield obj

-

-        def __getitem__(self, index):

-            return self.wrapped_queryset[index]

-

-        def __len__(self):

-            return len(self.wrapped_queryset)

-

-    def get_actions(self, request):

-        actions = super(XOSAdminMixin, self).get_actions(request)

-        actions['delete_selected'] = (XOSAdminMixin.action_safe_bulk_delete, 'delete_selected', ugettext_lazy("Delete selected %(verbose_name_plural)s"))

-        return actions

-

-    def action_safe_bulk_delete(self, request, queryset):

-        wrapped_queryset = XOSAdminMixin.SafeDeleteQuerysetWrapper(queryset)

+
+        def _safe_delete(self):
+            for obj in list(self.wrapped_queryset):
+                obj.delete()
+
+        def __getattr__(self, attr):
+            if attr == 'delete':
+                return self._safe_delete
+            else:
+                return getattr(self.wrapped_queryset, attr)
+
+        def __iter__(self):
+            for obj in list(self.wrapped_queryset):
+                yield obj
+
+        def __getitem__(self, index):
+            return self.wrapped_queryset[index]
+
+        def __len__(self):
+            return len(self.wrapped_queryset)
+
+    def get_actions(self, request):
+        actions = super(XOSAdminMixin, self).get_actions(request)
+        actions['delete_selected'] = (XOSAdminMixin.action_safe_bulk_delete, 'delete_selected', ugettext_lazy("Delete selected %(verbose_name_plural)s"))
+        return actions
+
+    def action_safe_bulk_delete(self, request, queryset):
+        wrapped_queryset = XOSAdminMixin.SafeDeleteQuerysetWrapper(queryset)
         return delete_selected(self, request, wrapped_queryset)
 
 
@@ -494,8 +494,8 @@
 
     def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
         if db_field.name == 'deployment':
-            kwargs['queryset'] = Deployment.select_by_acl(request.user).filter(
-                sitedeployments__nodes__isnull=False).distinct()
+#            kwargs['queryset'] = Deployment.select_by_acl(request.user).filter(
+#                sitedeployments__nodes__isnull=False).distinct()
             kwargs['widget'] = forms.Select(
                 attrs={'onChange': "instance_deployment_changed(this);"})
         if db_field.name == 'flavor':
@@ -523,8 +523,8 @@
     def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
         if db_field.name == 'deployment':
 
-            kwargs['queryset'] = Deployment.select_by_acl(request.user).filter(
-                sitedeployments__nodes__isnull=False).distinct()
+#            kwargs['queryset'] = Deployment.select_by_acl(request.user).filter(
+#                sitedeployments__nodes__isnull=False).distinct()
             kwargs['widget'] = forms.Select(
                 attrs={'onChange': "instance_deployment_changed(this);"})
         if db_field.name == 'flavor':
@@ -1460,10 +1460,6 @@
 
     class Meta:
         model = Node
-        widgets = {
-            'site': LinkedSelect,
-            'deployment': LinkedSelect
-        }
         fields = '__all__'
 
     def __init__(self, *args, **kwargs):
@@ -1508,16 +1504,6 @@
     suit_form_tabs = (('details', 'Node Details'), ('instances',
                                                     'Instances'), ('labels', 'Labels'))
 
-    def formfield_for_foreignkey(self, db_field, request, **kwargs):
-        if db_field.name == 'site':
-            kwargs['queryset'] = Site.select_by_user(
-                request.user).filter(hosts_nodes=True)
-
-        field = super(NodeAdmin, self).formfield_for_foreignkey(
-            db_field, request, **kwargs)
-
-        return field
-
 
 class InstanceForm(forms.ModelForm):
 
@@ -1639,8 +1625,8 @@
 
     def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
         if db_field.name == 'deployment':
-            kwargs['queryset'] = Deployment.select_by_acl(request.user).filter(
-                sitedeployments__nodes__isnull=False).distinct()
+#            kwargs['queryset'] = Deployment.select_by_acl(request.user).filter(
+#                sitedeployments__nodes__isnull=False).distinct()
             kwargs['widget'] = forms.Select(
                 attrs={'onChange': "instance_deployment_changed(this);"})
         if db_field.name == 'flavor':
diff --git a/xos/core/models/attic/controller_model.py b/xos/core/models/attic/controller_model.py
index 78a6896..1e07807 100644
--- a/xos/core/models/attic/controller_model.py
+++ b/xos/core/models/attic/controller_model.py
@@ -1,14 +1,3 @@
-def __init__(self, *args, **kwargs):
-    super(Controller, self).__init__(*args, **kwargs)
-    self.no_sync=True
-
-@property
-def auth_url_v3(self):
-    if self.auth_url and self.auth_url[-1] == '/':
-        return '{}/v3/'.format('/'.join(self.auth_url.split('/')[:-2]))
-    else:
-        return '{}/v3/'.format('/'.join(self.auth_url.split('/')[:-1]))
-
 @staticmethod
 def select_by_user(user):
 
diff --git a/xos/core/models/attic/deployment_model.py b/xos/core/models/attic/deployment_model.py
index 78f6e4e..d9da903 100644
--- a/xos/core/models/attic/deployment_model.py
+++ b/xos/core/models/attic/deployment_model.py
@@ -1,7 +1,3 @@
-def __init__(self, *args, **kwargs):
-    super(Deployment, self).__init__(*args, **kwargs)
-    self.no_sync=True
-
 def get_acl(self):
     return AccessControlList(self.accessControl)
 
diff --git a/xos/core/models/attic/diag_model.py b/xos/core/models/attic/diag_model.py
deleted file mode 100644
index bf6bd68..0000000
--- a/xos/core/models/attic/diag_model.py
+++ /dev/null
@@ -1,7 +0,0 @@
-@property
-def enacted(self):
-    return None
-
-@enacted.setter
-def enacted(self, value):
-    pass # Ignore sets, Diag objects are always pending.
diff --git a/xos/core/models/attic/flavor_model.py b/xos/core/models/attic/flavor_model.py
deleted file mode 100644
index 56e0e52..0000000
--- a/xos/core/models/attic/flavor_model.py
+++ /dev/null
@@ -1,8 +0,0 @@
-class Meta:
-    app_label = "core"
-    ordering = ('order', 'name')
-
-def __init__(self, *args, **kwargs):
-    super(Flavor, self).__init__(*args, **kwargs)
-    self.no_sync=True
-
diff --git a/xos/core/models/attic/header.py b/xos/core/models/attic/header.py
index 300f57f..122b6a0 100644
--- a/xos/core/models/attic/header.py
+++ b/xos/core/models/attic/header.py
@@ -21,10 +21,6 @@
 
 config = Config()
 
-# If true, then IP addresses will be allocated by the model. If false, then
-# we will assume the observer handles it.
-NO_OBSERVER=False
-
 def ParseNatList(ports):
     """ Support a list of ports in the format "protocol:port, protocol:port, ..."
         examples:
@@ -76,24 +72,3 @@
     except Exception,e:
         raise ValidationError(str(e))
 
-
-
-def get_default_flavor(controller = None):
-    # Find a default flavor that can be used for a instance. This is particularly
-    # useful in evolution. It's also intended this helper function can be used
-    # for admin.py when users
-
-    if controller:
-        flavors = controller.flavors.all()
-    else:
-        from core.models.flavor import Flavor
-        flavors = Flavor.objects.all()
-
-    if not flavors:
-        return None
-
-    for flavor in flavors:
-        if flavor.default:
-            return flavor
-
-    return flavors[0]
diff --git a/xos/core/models/attic/instance_bottom.py b/xos/core/models/attic/instance_bottom.py
deleted file mode 100644
index 7b87eab..0000000
--- a/xos/core/models/attic/instance_bottom.py
+++ /dev/null
@@ -1,7 +0,0 @@
-def controller_setter(instance, **kwargs):
-    try:
-        instance.controller = instance.node.site_deployment.controller
-    except:
-        instance.controller = None
-
-models.signals.post_init.connect(controller_setter, Instance)
diff --git a/xos/core/models/attic/network_model.py b/xos/core/models/attic/network_model.py
index 20180a2..c58639a 100644
--- a/xos/core/models/attic/network_model.py
+++ b/xos/core/models/attic/network_model.py
@@ -1,13 +1,6 @@
-def save(self, *args, **kwds):
-    super(Network, self).save(*args, **kwds)
-
 def can_update(self, user):
     return user.can_update_slice(self.owner)
 
-@property
-def nat_list(self):
-    return ParseNatList(self.ports)
-
 @staticmethod
 def select_by_user(user):
     if user.is_admin:
@@ -18,11 +11,4 @@
         qs = Network.objects.filter(owner__in=slices)
     return qs
 
-def get_parameters(self):
-    # returns parameters from the template, updated by self.
-    p={}
-    if self.template:
-        p = self.template.get_parameters()
-    p.update(ParameterMixin.get_parameters(self))
-    return p
 
diff --git a/xos/core/models/attic/network_top.py b/xos/core/models/attic/network_top.py
deleted file mode 100644
index 47ae705..0000000
--- a/xos/core/models/attic/network_top.py
+++ /dev/null
@@ -1,34 +0,0 @@
-
-from core.models.networkparameter import NetworkParameter
-
-class ParameterMixin(object):
-    # helper classes for dealing with NetworkParameter
-
-    def get_parameters(self):
-        parameter_dict = {}
-
-        instance_type = ContentType.objects.get_for_model(self)
-        for param in NetworkParameter.objects.filter(content_type__pk=instance_type.id, object_id=self.id):
-            parameter_dict[param.parameter.name] = param.value
-
-        return parameter_dict
-
-    def set_parameter(self, name, value):
-        instance_type = ContentType.objects.get_for_model(self)
-        existing_params = NetworkParameter.objects.filter(parameter__name=name, content_type__pk=instance_type.id, object_id=self.id)
-        if existing_params:
-            p=existing_params[0]
-            p.value = value
-            p.save()
-        else:
-            from core.models.networkparametertype import NetworkParameterType
-            pt = NetworkParameterType.objects.get(name=name)
-            p = NetworkParameter(parameter=pt, content_type=instance_type, object_id=self.id, value=value)
-            p.save()
-
-    def unset_parameter(self, name):
-        instance_type = ContentType.objects.get_for_model(self)
-        existing_params = NetworkParameter.objects.filter(parameter__name=name, content_type__pk=instance_type.id, object_id=self.id)
-        for p in existing_params:
-            p.delete()
-
diff --git a/xos/core/models/attic/node_model.py b/xos/core/models/attic/node_model.py
index 98c5ed4..763f480 100644
--- a/xos/core/models/attic/node_model.py
+++ b/xos/core/models/attic/node_model.py
@@ -1,12 +1,3 @@
-def __init__(self, *args, **kwargs):
-    super(Node, self).__init__(*args, **kwargs)
-    self.no_sync=True
-
 def can_update(self, user):
-    return user.can_update_site(self.site, allow=['tech'])
+    return user.can_update_site(self.site_deployment.site, allow=['tech'])
 
-def save(self, *args, **kwds):
-    if self.site is None and self.site_deployment is not None:
-        self.site = self.site_deployment.site
-
-    super(Node, self).save(*args, **kwds)
diff --git a/xos/core/models/attic/port_model.py b/xos/core/models/attic/port_model.py
index 507e923..00f59ad 100644
--- a/xos/core/models/attic/port_model.py
+++ b/xos/core/models/attic/port_model.py
@@ -32,11 +32,3 @@
         qs = Port.objects.filter(Q(instance__in=instance_ids) | Q(network__in=network_ids))
     return qs
 
-def get_parameters(self):
-    # returns parameters from the network, updated by self.
-    p={}
-    if self.network:
-        p = self.network.get_parameters()
-    p.update(ParameterMixin.get_parameters(self))
-    return p
-
diff --git a/xos/core/models/attic/port_top.py b/xos/core/models/attic/port_top.py
deleted file mode 100644
index 5fa8ca9..0000000
--- a/xos/core/models/attic/port_top.py
+++ /dev/null
@@ -1,34 +0,0 @@
-
-from core.models.networkparameter import NetworkParameter
-from core.models.networkparametertype import NetworkParameterType
-
-class ParameterMixin(object):
-    # helper classes for dealing with NetworkParameter
-
-    def get_parameters(self):
-        parameter_dict = {}
-
-        instance_type = self.get_content_type_key()
-        for param in NetworkParameter.objects.filter(content_type=instance_type, object_id=self.id):
-            parameter_dict[param.parameter.name] = param.value
-
-        return parameter_dict
-
-    def set_parameter(self, name, value):
-        instance_type = self.get_content_type_key()
-        existing_params = NetworkParameter.objects.filter(parameter__name=name, content_type=instance_type, object_id=self.id)
-        if existing_params:
-            p=existing_params[0]
-            p.value = value
-            p.save()
-        else:
-            pt = NetworkParameterType.objects.get(name=name)
-            p = NetworkParameter(parameter=pt, content_type=instance_type, object_id=self.id, value=value)
-            p.save()
-
-    def unset_parameter(self, name):
-        instance_type = self.get_content_type_key()
-        existing_params = NetworkParameter.objects.filter(parameter__name=name, content_type=instance_type, object_id=self.id)
-        for p in existing_params:
-            p.delete()
-
diff --git a/xos/core/models/attic/service_model.py b/xos/core/models/attic/service_model.py
index 5959f86..d7175b6 100644
--- a/xos/core/models/attic/service_model.py
+++ b/xos/core/models/attic/service_model.py
@@ -6,18 +6,6 @@
     super(Service, self).__init__(*args, **kwargs)
 
 @classmethod
-def get_service_objects(cls):
-    return cls.objects.filter(kind=cls.KIND)
-
-@classmethod
-def get_deleted_service_objects(cls):
-    return cls.deleted_objects.filter(kind=cls.KIND)
-
-@classmethod
-def get_service_objects_by_user(cls, user):
-    return cls.select_by_user(user).filter(kind=cls.KIND)
-
-@classmethod
 def select_by_user(cls, user):
     if user.is_admin:
         return cls.objects.all()
diff --git a/xos/core/models/attic/serviceprivilege_model.py b/xos/core/models/attic/serviceprivilege_model.py
index a5bb038..294fd90 100644
--- a/xos/core/models/attic/serviceprivilege_model.py
+++ b/xos/core/models/attic/serviceprivilege_model.py
@@ -1,21 +1,6 @@
 class Meta:
     unique_together = ('user', 'service', 'role')
 
-def can_update(self, user):
-    if not self.service.enabled:
-        raise PermissionDenied, "Cannot modify permission(s) of a disabled service"
-    return self.service.can_update(user)
-
-def save(self, *args, **kwds):
-    if not self.service.enabled:
-        raise PermissionDenied, "Cannot modify permission(s) of a disabled service"
-    super(ServicePrivilege, self).save(*args, **kwds)
-
-def delete(self, *args, **kwds):
-    if not self.service.enabled:
-        raise PermissionDenied, "Cannot modify permission(s) of a disabled service"
-    super(ServicePrivilege, self).delete(*args, **kwds)
-
 @classmethod
 def select_by_user(cls, user):
     if user.is_admin:
diff --git a/xos/core/models/attic/siteprivilege_model.py b/xos/core/models/attic/siteprivilege_model.py
index 6130d6a..0a05b5f 100644
--- a/xos/core/models/attic/siteprivilege_model.py
+++ b/xos/core/models/attic/siteprivilege_model.py
@@ -10,7 +10,3 @@
         qs = SitePrivilege.objects.filter(id__in=sp_ids)
     return qs
 
-def save(self, *args, **kwds):
-    if not self.user.is_active:
-        raise PermissionDenied, "Cannot modify role(s) of a disabled user"
-    super(SitePrivilege, self).save(*args, **kwds)
diff --git a/xos/core/models/attic/slice_model.py b/xos/core/models/attic/slice_model.py
index 503a3f9..e296429 100644
--- a/xos/core/models/attic/slice_model.py
+++ b/xos/core/models/attic/slice_model.py
@@ -61,19 +61,4 @@
         qs = Slice.objects.filter(id__in=slice_ids)
     return qs
 
-"""
-def delete(self, *args, **kwds):
-    # delete networks associated with this slice
-    from core.models.network import Network
-    nets = Network.objects.filter(slices=self)
-    nets.delete() 
-    # delete slice controllers
-    slice_controllers = ControllerSlice.objects.filter(slice=self)
-    slice_controllers.delete()
-    # delete slice privilege
-    slice_privileges = SlicePrivilege.objects.filter(slice=self)
-    slice_privileges.delete() 
-    # continue with normal delete
-    super(Slice, self).delete(*args, **kwds) 
-"""
 
diff --git a/xos/core/models/attic/sliceprivilege_model.py b/xos/core/models/attic/sliceprivilege_model.py
index 3dd30e4..8516454 100644
--- a/xos/core/models/attic/sliceprivilege_model.py
+++ b/xos/core/models/attic/sliceprivilege_model.py
@@ -1,9 +1,6 @@
 class Meta:
     unique_together = ('user', 'slice', 'role')
 
-def save(self, *args, **kwds):
-    super(SlicePrivilege, self).save(*args, **kwds)
-
 def can_update(self, user):
     return user.can_update_slice(self.slice)
 
diff --git a/xos/core/models/attic/tag_model.py b/xos/core/models/attic/tag_model.py
index f67ee60..364baa2 100644
--- a/xos/core/models/attic/tag_model.py
+++ b/xos/core/models/attic/tag_model.py
@@ -1,10 +1,6 @@
 def can_update(self, user):
     return user.can_update_root()
 
-@classmethod
-def select_by_content_object(cls, obj):
-    return cls.objects.filter(content_type=obj.get_content_type_key(), object_id=obj.id)
-
 @staticmethod
 def select_by_user(user):
     return Tag.objects.all()
diff --git a/xos/core/models/attic/tenant_model.py b/xos/core/models/attic/tenant_model.py
index 168c7ad..e283c5a 100644
--- a/xos/core/models/attic/tenant_model.py
+++ b/xos/core/models/attic/tenant_model.py
@@ -5,18 +5,6 @@
     self._meta.get_field("kind").default = self.KIND
     super(Tenant, self).__init__(*args, **kwargs)
 
-@classmethod
-def get_tenant_objects(cls):
-    return cls.objects.filter(kind=cls.KIND)
-
-@classmethod
-def get_tenant_objects_by_user(cls, user):
-    return cls.select_by_user(user).filter(kind=cls.KIND)
-
-@classmethod
-def get_deleted_tenant_objects(cls):
-    return cls.deleted_objects.filter(kind=cls.KIND)
-
 @property
 def tenantattribute_dict(self):
     attrs = {}
@@ -32,7 +20,7 @@
             raise XOSMissingField("subscriber_specific_id is None, and it's a required field", fields={
                                   "service_specific_id": "cannot be none"})
 
-        conflicts = self.get_tenant_objects().filter(
+        conflicts = self.__class__.objects.filter(
             service_specific_id=self.service_specific_id)
         if conflicts:
             raise XOSDuplicateKey("service_specific_id %s already exists" % self.service_specific_id, fields={
diff --git a/xos/core/models/attic/tenantprivilege_model.py b/xos/core/models/attic/tenantprivilege_model.py
index 1c416f2..0b59d81 100644
--- a/xos/core/models/attic/tenantprivilege_model.py
+++ b/xos/core/models/attic/tenantprivilege_model.py
@@ -1,8 +1,3 @@
-def save(self, *args, **kwds):
-    if not self.user.is_active:
-        raise PermissionDenied, "Cannot modify role(s) of a disabled user"
-    super(TenantPrivilege, self).save(*args, **kwds)
-
 def can_update(self, user):
     return user.can_update_tenant_privilege(self)
 
diff --git a/xos/core/models/attic/tenantroot_model.py b/xos/core/models/attic/tenantroot_model.py
index 20e3480..bb09b1e 100644
--- a/xos/core/models/attic/tenantroot_model.py
+++ b/xos/core/models/attic/tenantroot_model.py
@@ -19,14 +19,6 @@
     return sorted(st, key=attrgetter('id'))[0]
 
 @classmethod
-def get_tenant_objects(cls):
-    return cls.objects.filter(kind=cls.KIND)
-
-@classmethod
-def get_tenant_objects_by_user(cls, user):
-    return cls.select_by_user(user).filter(kind=cls.KIND)
-
-@classmethod
 def select_by_user(cls, user):
     if user.is_admin:
         return cls.objects.all()
@@ -44,7 +36,7 @@
                               "service_specific_id": "cannot be none"})
 
     if self.service_specific_id:
-        conflicts = self.get_tenant_objects().filter(
+        conflicts = self.__class__.objects.filter(
             service_specific_id=self.service_specific_id)
         if self.pk:
             conflicts = conflicts.exclude(pk=self.pk)
diff --git a/xos/core/models/attic/tenantrootprivilege_model.py b/xos/core/models/attic/tenantrootprivilege_model.py
index c2d054e..8dee9a1 100644
--- a/xos/core/models/attic/tenantrootprivilege_model.py
+++ b/xos/core/models/attic/tenantrootprivilege_model.py
@@ -1,11 +1,6 @@
 class Meta:
     unique_together = ('user', 'tenant_root', 'role')
 
-def save(self, *args, **kwds):
-    if not self.user.is_active:
-        raise PermissionDenied, "Cannot modify role(s) of a disabled user"
-    super(TenantRootPrivilege, self).save(*args, **kwds)
-
 def can_update(self, user):
     return user.can_update_tenant_root_privilege(self)
 
diff --git a/xos/core/models/attic/tenantwithcontainer_model.py b/xos/core/models/attic/tenantwithcontainer_model.py
index 7b11323..5e87c04 100644
--- a/xos/core/models/attic/tenantwithcontainer_model.py
+++ b/xos/core/models/attic/tenantwithcontainer_model.py
@@ -61,7 +61,7 @@
 # not permit any new attributes to be defined. Find if any better solutions
 def count_of_tenants_of_an_instance(self, instance):
     tenant_count = 0
-    for tenant in self.get_tenant_objects().all():
+    for tenant in self.__class__.objects.all():
         if tenant.get_attribute("instance_id", None) == instance.id:
             tenant_count += 1
     return tenant_count
diff --git a/xos/core/models/attic/xosguiextension_model.py b/xos/core/models/attic/xosguiextension_model.py
deleted file mode 100644
index dbbad60..0000000
--- a/xos/core/models/attic/xosguiextension_model.py
+++ /dev/null
@@ -1,4 +0,0 @@
-"""Persist GUI Extension"""
-class Meta:
-    app_label = "core"
-
diff --git a/xos/core/models/flavor.xproto b/xos/core/models/flavor.xproto
index 08714d0..b76f419 100644
--- a/xos/core/models/flavor.xproto
+++ b/xos/core/models/flavor.xproto
@@ -4,7 +4,5 @@
      required string name = 1 [max_length = 32, content_type = "stripped", blank = False, help_text = "name of this flavor, as displayed to users", null = False, db_index = False];
      optional string description = 2 [db_index = False, max_length = 1024, null = True, content_type = "stripped", blank = True];
      required string flavor = 3 [max_length = 32, content_type = "stripped", blank = False, help_text = "flavor string used to configure deployments", null = False, db_index = False];
-     required int32 order = 4 [help_text = "used to order flavors when displayed in a list", default = 0, null = False, db_index = False, blank = False];
-     required bool default = 5 [help_text = "make this a default flavor to use when creating new instances", default = False, null = False, db_index = False, blank = True];
      required manytomany deployments->Deployment/DashboardView_deployments:flavors = 6 [db_index = False, null = False, blank = True];
 }
diff --git a/xos/core/models/instance.xproto b/xos/core/models/instance.xproto
index b34291e..dbbd4cd 100644
--- a/xos/core/models/instance.xproto
+++ b/xos/core/models/instance.xproto
@@ -12,7 +12,7 @@
      required manytoone deployment->Deployment:instance_deployment = 9 [db_index = True, null = False, blank = False];
      required manytoone node->Node:instances = 10 [db_index = True, null = False, blank = False];
      required int32 numberCores = 11 [help_text = "Number of cores for instance", default = 0, null = False, db_index = False, blank = False];
-     required manytoone flavor->Flavor:instance = 12 [help_text = "Flavor of this instance", default = "get_default_flavor()", null = False, db_index = True, blank = False];
+     required manytoone flavor->Flavor:instance = 12 [help_text = "Flavor of this instance", null = False, db_index = True, blank = False];
      optional string userData = 13 [help_text = "user_data passed to instance during creation", null = True, db_index = False, blank = True];
      required string isolation = 14 [default = "vm", choices = "(('vm', 'Virtual Machine'), ('container', 'Container'), ('container_vm', 'Container In VM'))", max_length = 30, blank = False, null = False, db_index = False];
      optional string volumes = 15 [help_text = "Comma-separated list of directories to expose to parent context", null = True, db_index = False, blank = True];
diff --git a/xos/core/models/network.xproto b/xos/core/models/network.xproto
index ffd1eb1..a44d378 100644
--- a/xos/core/models/network.xproto
+++ b/xos/core/models/network.xproto
@@ -1,6 +1,4 @@
-
-
-message Network (XOSBase,ParameterMixin){
+message Network (XOSBase){
      required string name = 1 [db_index = False, max_length = 32, null = False, blank = False];
      required manytoone template->NetworkTemplate:network = 2 [db_index = True, null = False, blank = False];
      required string subnet = 3 [db_index = False, max_length = 32, null = False, blank = True];
diff --git a/xos/core/models/networktemplate.xproto b/xos/core/models/networktemplate.xproto
index d9653ab..ab7fe1d 100644
--- a/xos/core/models/networktemplate.xproto
+++ b/xos/core/models/networktemplate.xproto
@@ -1,6 +1,4 @@
-
-
-message NetworkTemplate (XOSBase,ParameterMixin){
+message NetworkTemplate (XOSBase){
      required string name = 1 [db_index = False, max_length = 32, null = False, blank = False];
      optional string description = 2 [db_index = False, max_length = 1024, null = True, blank = True];
      required string visibility = 4 [default = "private", choices = "(('public', 'public'), ('private', 'private'))", max_length = 30, blank = False, null = False, db_index = False];
diff --git a/xos/core/models/node.xproto b/xos/core/models/node.xproto
index 36495d5..f4b12b0 100644
--- a/xos/core/models/node.xproto
+++ b/xos/core/models/node.xproto
@@ -1,5 +1,4 @@
 message Node (XOSBase){
      required string name = 1 [max_length = 200, content_type = "stripped", blank = False, help_text = "Name of the Node", null = False, db_index = False];
      required manytoone site_deployment->SiteDeployment:nodes = 2 [db_index = True, null = False, blank = False];
-     optional manytoone site->Site:nodes = 3 [db_index = True, null = True, blank = True];
 }
diff --git a/xos/core/models/port.xproto b/xos/core/models/port.xproto
index 115b0db..d7841ab 100644
--- a/xos/core/models/port.xproto
+++ b/xos/core/models/port.xproto
@@ -1,6 +1,4 @@
-
-
-message Port (XOSBase,ParameterMixin){
+message Port (XOSBase){
      required manytoone network->Network:links = 1 [db_index = True, null = False, blank = False];
      optional manytoone instance->Instance:ports = 2 [db_index = True, null = True, blank = True];
      optional string ip = 3 [max_length = 39, content_type = "ip", blank = True, help_text = "Instance ip address", null = True, db_index = False];
diff --git a/xos/tosca/resources/node.py b/xos/tosca/resources/node.py
index 399a3e6..2051dd8 100644
--- a/xos/tosca/resources/node.py
+++ b/xos/tosca/resources/node.py
@@ -12,7 +12,6 @@
         siteName = self.get_requirement("tosca.relationships.MemberOfSite", throw_exception=False)
         if siteName:
             site = self.get_xos_object(Site, login_base=siteName)
-            args["site"] = site
 
         deploymentName = self.get_requirement("tosca.relationships.MemberOfDeployment", throw_exception=False)
         if deploymentName:
@@ -36,8 +35,6 @@
     def create(self):
         xos_args = self.get_xos_args()
 
-        if not xos_args.get("site", None):
-            raise Exception("Site is a required field of Node")
         if not xos_args.get("site_deployment", None):
             raise Exception("Deployment is a required field of Node")
 
@@ -47,7 +44,7 @@
 
         self.postprocess(node)
 
-        self.info("Created Node '%s' on Site '%s' Deployment '%s'" % (str(node), str(node.site), str(node.site_deployment.deployment)))
+        self.info("Created Node '%s' on Site '%s' Deployment '%s'" % (str(node), str(node.site_deployment.site), str(node.site_deployment.deployment)))
 
     def delete(self, obj):
         super(XOSNode, self).delete(obj)