blob: 1e869d1fdb885a1c9eb567f31d59e2e5c4d5713d [file] [log] [blame]
Scott Baker189db412015-10-15 16:09:18 -07001from django.db import models
2from core.models import Service, PlCoreBase, Slice, Instance, Tenant, TenantWithContainer, Node, Image, User, Flavor, Subscriber
3from core.models.plcorebase import StrippedCharField
4import os
5from django.db import models, transaction
6from django.forms.models import model_to_dict
7from django.db.models import Q
8from operator import itemgetter, attrgetter, methodcaller
9import traceback
10from xos.exceptions import *
11from core.models import SlicePrivilege, SitePrivilege
12from sets import Set
13
14ONOS_KIND = "onos"
15
16class ONOSService(Service):
17 KIND = ONOS_KIND
18
19 class Meta:
20 app_label = "onos"
21 verbose_name = "ONOS Service"
22 proxy = True
23
Scott Bakerb97ce982015-10-19 17:37:01 -070024 default_attributes = {"use_external_host": ""}
25
26 @property
27 def use_external_host(self):
28 return self.get_attribute("use_external_host", self.default_attributes["use_external_host"])
29
30 @use_external_host.setter
31 def use_external_host(self, value):
32 self.set_attribute("use_external_host", value)
33
Scott Baker189db412015-10-15 16:09:18 -070034class ONOSApp(Tenant): # aka 'ONOSTenant'
35 class Meta:
36 proxy = True
37
38 KIND = ONOS_KIND
39
Scott Baker881f7452015-10-19 16:24:02 -070040 default_attributes = {"name": "",
Srikanth Vavilapalli6ff55982016-01-22 14:35:50 -050041 "install_dependencies": "",
Scott Bakere3353f82015-10-20 21:22:23 -070042 "dependencies": ""}
Scott Baker189db412015-10-15 16:09:18 -070043 def __init__(self, *args, **kwargs):
44 onos_services = ONOSService.get_service_objects().all()
45 if onos_services:
46 self._meta.get_field("provider_service").default = onos_services[0].id
47 super(ONOSApp, self).__init__(*args, **kwargs)
48
49 @property
50 def creator(self):
51 from core.models import User
52 if getattr(self, "cached_creator", None):
53 return self.cached_creator
54 creator_id=self.get_attribute("creator_id")
55 if not creator_id:
56 return None
57 users=User.objects.filter(id=creator_id)
58 if not users:
59 return None
60 user=users[0]
61 self.cached_creator = users[0]
62 return user
63
64 @creator.setter
65 def creator(self, value):
66 if value:
67 value = value.id
68 if (value != self.get_attribute("creator_id", None)):
69 self.cached_creator=None
70 self.set_attribute("creator_id", value)
71
72 @property
73 def name(self):
74 return self.get_attribute("name", self.default_attributes["name"])
75
76 @name.setter
77 def name(self, value):
78 self.set_attribute("name", value)
79
Scott Baker881f7452015-10-19 16:24:02 -070080 @property
81 def dependencies(self):
82 return self.get_attribute("dependencies", self.default_attributes["dependencies"])
83
84 @dependencies.setter
85 def dependencies(self, value):
86 self.set_attribute("dependencies", value)
87
Srikanth Vavilapalli6ff55982016-01-22 14:35:50 -050088 @property
89 def install_dependencies(self):
90 return self.get_attribute("install_dependencies", self.default_attributes["install_dependencies"])
91
92 @install_dependencies.setter
93 def install_dependencies(self, value):
94 self.set_attribute("install_dependencies", value)
95
Scott Bakere3353f82015-10-20 21:22:23 -070096 #@property
97 #def instance(self):
98 # instance_id = self.get_attribute("instance_id", self.default_attributes["instance_id"])
99 # if instance_id:
100 # instances = Instance.objects.filter(id=instance_id)
101 # if instances:
102 # return instances[0]
103 # return None
104
105 #@instance.setter
106 #def instance(self, value):
107 # self.set_attribute("instance_id", value.id)
108
Scott Baker189db412015-10-15 16:09:18 -0700109 def save(self, *args, **kwargs):
110 if not self.creator:
111 if not getattr(self, "caller", None):
112 # caller must be set when creating a vCPE since it creates a slice
113 raise XOSProgrammingError("ONOSApp's self.caller was not set")
114 self.creator = self.caller
115 if not self.creator:
116 raise XOSProgrammingError("ONOSApp's self.creator was not set")
117
118 super(ONOSApp, self).save(*args, **kwargs)
119 model_policy_onos_app(self.pk)
120
121# TODO: Probably don't need this...
122def model_policy_onos_app(pk):
123 # TODO: this should be made in to a real model_policy
124 with transaction.atomic():
125 oa = ONOSApp.objects.select_for_update().filter(pk=pk)
126 if not oa:
127 return
128 oa = oa[0]
129 #oa.manage_container()
130
131