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)