CORD-1467: Developing service models without attics

Change-Id: I94b4a62a5db547bfe92f25041b88b58942dc5c39
diff --git a/xos/models.py b/xos/models.py
index 0419fbe..906d125 100644
--- a/xos/models.py
+++ b/xos/models.py
@@ -1,290 +1,141 @@
-from header import *
+from django.db import models
+from core.models import Service, XOSBase, Slice, Instance, Tenant, TenantWithContainer, Node, Image, User, Flavor, NetworkParameter, NetworkParameterType, Port, AddressPool
+from core.models.xosbase import StrippedCharField
+import os
+from django.db import models, transaction
+from django.forms.models import model_to_dict
+from django.db.models import *
+from operator import itemgetter, attrgetter, methodcaller
+from core.models import Tag
+from core.models.service import LeastLoadedNodeScheduler
+import traceback
+from xos.exceptions import *
+from models_decl import *
 
 
+class ConfigurationError(Exception):
+    pass
 
 
+class VRouterService (VRouterService_decl):
+    class Meta:
+        proxy = True
 
+    def ip_to_mac(self, ip):
+	(a, b, c, d) = ip.split('.')
+	return "02:42:%02x:%02x:%02x:%02x" % (int(a), int(b), int(c), int(d))
 
+    def get_gateways(self):
+	gateways = []
 
+	aps = self.addresspools.all()
+	for ap in aps:
+	    gateways.append({"gateway_ip": ap.gateway_ip, "gateway_mac": ap.gateway_mac})
 
+	return gateways
 
+    def get_address_pool(self, name):
+	ap = AddressPool.objects.filter(name=name, service=self)
+	if not ap:
+	    raise Exception("vRouter unable to find addresspool %s" % name)
+	return ap[0]
 
+    def get_tenant(self, **kwargs):
+	address_pool_name = kwargs.pop("address_pool_name")
 
+	ap = self.get_address_pool(address_pool_name)
 
+	ip = ap.get_address()
+	if not ip:
+	    raise Exception("AddressPool '%s' has run out of addresses." % ap.name)
 
+	t = VRouterTenant(provider_service=self, **kwargs)
+	t.public_ip = ip
+	t.public_mac = self.ip_to_mac(ip)
+	t.address_pool_id = ap.id
+	t.save()
 
+	return t
 
 
+class VRouterDevice (VRouterDevice_decl):
 
+    class Meta:
+        proxy = True
+    pass
 
+class VRouterPort (VRouterPort_decl):
 
+    class Meta:
+        proxy = True
+    pass
 
+class VRouterApp (VRouterApp_decl):
 
+    class Meta:
+        proxy = True
+    def _get_interfaces(self):
+        app_interfaces = []
+        devices = VRouterDevice.objects.filter(vrouter_service=self.vrouter_service)
+        for device in devices:
+            ports = VRouterPort.objects.filter(vrouter_device=device.id)
+            for port in ports:
+                interfaces = VRouterInterface.objects.filter(vrouter_port=port.id)
+                for iface in interfaces:
+                    app_interfaces.append(iface.name)
+        return app_interfaces
 
+class VRouterInterface (VRouterInterface_decl):
 
-#from core.models.service import Service
-from core.models import Service
+    class Meta:
+        proxy = True
+    pass
 
+class VRouterIp (VRouterIp_decl):
 
+    class Meta:
+        proxy = True
+    pass
 
-from core.models import AddressPool#from core.models.tenant import Tenant
-from core.models import Tenant
+class VRouterTenant (VRouterTenant_decl):
 
+    class Meta:
+        proxy = True
+    @property
+    def gateway_ip(self):
+        if not self.address_pool:
+            return None
+        return self.address_pool.gateway_ip
 
+    @property
+    def gateway_mac(self):
+        if not self.address_pool:
+            return None
+        return self.address_pool.gateway_mac
 
+    @property
+    def cidr(self):
+        if not self.address_pool:
+            return None
+        return self.address_pool.cidr
 
+    @property
+    def netbits(self):
+        # return number of bits in the network portion of the cidr
+        if self.cidr:
+            parts = self.cidr.split("/")
+            if len(parts) == 2:
+                return int(parts[1].strip())
+        return None
 
-class VRouterApp(XOSBase):
+    def cleanup_addresspool(self):
+        if self.address_pool:
+            ap = self.address_pool
+            if ap:
+                ap.put_address(self.public_ip)
+                self.public_ip = None
 
-  KIND = "vROUTER"
-
-  class Meta:
-      app_label = "vrouter"
-      name = "vrouter"
-      verbose_name = "vRouter Service"
-
-  # Primitive Fields (Not Relations)
-  name = CharField( help_text = "application name", max_length = 50, null = False, db_index = False, blank = False )
-  control_plane_connect_point = CharField( help_text = "port identifier in ONOS", max_length = 21, null = False, db_index = False, blank = False )
-  ospf_enabled = BooleanField( default = True, help_text = "ospf enabled", null = False, db_index = False, blank = True )
-  
-
-  # Relations
-  
-  vrouter_service = ForeignKey(VRouterService, db_index = True, related_name = 'apps', null = False, blank = False )
-
-  def _get_interfaces(self):
-      app_interfaces = []
-      devices = VRouterDevice.objects.filter(vrouter_service=self.vrouter_service)
-      for device in devices:
-          ports = VRouterPort.objects.filter(vrouter_device=device.id)
-          for port in ports:
-              interfaces = VRouterInterface.objects.filter(vrouter_port=port.id)
-              for iface in interfaces:
-                  app_interfaces.append(iface.name)
-      return app_interfaces
-  
-  pass
-
-
-
-
-class VRouterDevice(XOSBase):
-
-  KIND = "vROUTER"
-
-  class Meta:
-      app_label = "vrouter"
-      name = "vrouter"
-      verbose_name = "vRouter Service"
-
-  # Primitive Fields (Not Relations)
-  name = CharField( help_text = "device friendly name", max_length = 20, null = True, db_index = False, blank = True )
-  openflow_id = CharField( help_text = "device identifier in ONOS", max_length = 20, null = False, db_index = False, blank = False )
-  config_key = CharField( default = "basic", max_length = 32, blank = False, help_text = "configuration key", null = False, db_index = False )
-  driver = CharField( help_text = "driver type", max_length = 32, null = False, db_index = False, blank = False )
-  
-
-  # Relations
-  
-  vrouter_service = ForeignKey(VRouterService, db_index = True, related_name = 'devices', null = False, blank = False )
-
-  
-  pass
-
-
-
-
-class VRouterInterface(XOSBase):
-
-  KIND = "vROUTER"
-
-  class Meta:
-      app_label = "vrouter"
-      name = "vrouter"
-      verbose_name = "vRouter Service"
-
-  # Primitive Fields (Not Relations)
-  name = CharField( help_text = "interface name", max_length = 10, null = False, db_index = False, blank = False )
-  mac = CharField( help_text = "interface mac", max_length = 17, null = False, db_index = False, blank = False )
-  vlan = CharField( help_text = "interface vlan id", max_length = 10, null = True, db_index = False, blank = True )
-  
-
-  # Relations
-  
-  vrouter_port = ForeignKey(VRouterPort, db_index = True, related_name = 'interfaces', null = False, blank = False )
-
-  
-  pass
-
-
-
-
-class VRouterIp(XOSBase):
-
-  KIND = "vROUTER"
-
-  class Meta:
-      app_label = "vrouter"
-      name = "vrouter"
-      verbose_name = "vRouter Service"
-
-  # Primitive Fields (Not Relations)
-  name = CharField( help_text = "ip friendly name", max_length = 20, null = True, db_index = False, blank = True )
-  ip = CharField( help_text = "interface ips", max_length = 19, null = False, db_index = False, blank = False )
-  
-
-  # Relations
-  
-  vrouter_interface = ForeignKey(VRouterInterface, db_index = True, related_name = 'ips', null = False, blank = False )
-
-  
-  pass
-
-
-
-
-class VRouterPort(XOSBase):
-
-  KIND = "vROUTER"
-
-  class Meta:
-      app_label = "vrouter"
-      name = "vrouter"
-      verbose_name = "vRouter Service"
-
-  # Primitive Fields (Not Relations)
-  name = CharField( help_text = "port friendly name", max_length = 20, null = True, db_index = False, blank = True )
-  openflow_id = CharField( help_text = "port identifier in ONOS", max_length = 21, null = False, db_index = False, blank = False )
-  
-
-  # Relations
-  
-  vrouter_device = ForeignKey(VRouterDevice, db_index = True, related_name = 'ports', null = False, blank = False )
-  vrouter_service = ForeignKey(VRouterService, db_index = True, related_name = 'device_ports', null = False, blank = False )
-
-  
-  pass
-
-
-
-
-class VRouterService(Service):
-
-  KIND = "vROUTER"
-
-  class Meta:
-      app_label = "vrouter"
-      name = "vrouter"
-      verbose_name = "vRouter Service"
-
-  # Primitive Fields (Not Relations)
-  rest_hostname = StrippedCharField( db_index = False, max_length = 255, null = True, blank = True )
-  rest_port = IntegerField( default = 8181, null = False, blank = False, db_index = False )
-  rest_user = StrippedCharField( default = "onos", max_length = 255, null = False, db_index = False, blank = False )
-  rest_pass = StrippedCharField( default = "rocks", max_length = 255, null = False, db_index = False, blank = False )
-  
-
-  # Relations
-  
-
-  def ip_to_mac(self, ip):
-      (a, b, c, d) = ip.split('.')
-      return "02:42:%02x:%02x:%02x:%02x" % (int(a), int(b), int(c), int(d))
-  
-  def get_gateways(self):
-      gateways = []
-  
-      aps = self.addresspools.all()
-      for ap in aps:
-          gateways.append({"gateway_ip": ap.gateway_ip, "gateway_mac": ap.gateway_mac})
-  
-      return gateways
-  
-  def get_address_pool(self, name):
-      ap = AddressPool.objects.filter(name=name, service=self)
-      if not ap:
-          raise Exception("vRouter unable to find addresspool %s" % name)
-      return ap[0]
-  
-  def get_tenant(self, **kwargs):
-      address_pool_name = kwargs.pop("address_pool_name")
-  
-      ap = self.get_address_pool(address_pool_name)
-  
-      ip = ap.get_address()
-      if not ip:
-          raise Exception("AddressPool '%s' has run out of addresses." % ap.name)
-  
-      t = VRouterTenant(provider_service=self, **kwargs)
-      t.public_ip = ip
-      t.public_mac = self.ip_to_mac(ip)
-      t.address_pool_id = ap.id
-      t.save()
-  
-      return t
-  
-  pass
-
-
-
-
-class VRouterTenant(Tenant):
-
-  KIND = "vROUTER"
-
-  class Meta:
-      app_label = "vrouter"
-      name = "vrouter"
-      verbose_name = "vRouter Service"
-
-  # Primitive Fields (Not Relations)
-  public_ip = StrippedCharField( db_index = False, max_length = 30, null = True, blank = True )
-  public_mac = StrippedCharField( db_index = False, max_length = 30, null = True, blank = True )
-  
-
-  # Relations
-  
-  address_pool = ForeignKey(AddressPool, db_index = True, related_name = 'vrouter_tenants', null = True, blank = True )
-
-  @property
-  def gateway_ip(self):
-      if not self.address_pool:
-          return None
-      return self.address_pool.gateway_ip
-  
-  @property
-  def gateway_mac(self):
-      if not self.address_pool:
-          return None
-      return self.address_pool.gateway_mac
-  
-  @property
-  def cidr(self):
-      if not self.address_pool:
-          return None
-      return self.address_pool.cidr
-  
-  @property
-  def netbits(self):
-      # return number of bits in the network portion of the cidr
-      if self.cidr:
-          parts = self.cidr.split("/")
-          if len(parts) == 2:
-              return int(parts[1].strip())
-      return None
-  
-  def cleanup_addresspool(self):
-      if self.address_pool:
-          ap = self.address_pool
-          if ap:
-              ap[0].put_address(self.public_ip)
-              self.public_ip = None
-  
-  def delete(self, *args, **kwargs):
-      self.cleanup_addresspool()
-      super(VRouterTenant, self).delete(*args, **kwargs)
-  
-  pass
-
+    def delete(self, *args, **kwargs):
+        self.cleanup_addresspool()
+        super(VRouterTenant, self).delete(*args, **kwargs)