blob: 22a1a9acd0ff53d2d48350f2814e1ade2877e649 [file] [log] [blame]
Matteo Scandoloaca86652017-08-08 13:05:27 -07001
2# Copyright 2017-present Open Networking Foundation
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16
Sapan Bhatia46482ee2017-04-21 17:59:48 +020017sync_attributes = ("wan_container_ip", "wan_container_mac", "wan_container_netbits",
18 "wan_container_gateway_ip", "wan_container_gateway_mac",
19 "wan_vm_ip", "wan_vm_mac")
20
21def __init__(self, *args, **kwargs):
22 super(VSGTenant, self).__init__(*args, **kwargs)
Scott Bakeradd58dd2017-08-23 15:56:58 -070023 self.cached_address_service_instance=None
Sapan Bhatia46482ee2017-04-21 17:59:48 +020024
25@property
Scott Bakeradd58dd2017-08-23 15:56:58 -070026def address_service_instance(self):
27 address_service_instance = self.get_newest_subscribed_tenant(AddressManagerServiceInstance)
28 if not address_service_instance:
Sapan Bhatia46482ee2017-04-21 17:59:48 +020029 return None
30
31 # always return the same object when possible
Scott Bakeradd58dd2017-08-23 15:56:58 -070032 if (self.cached_address_service_instance) and (self.cached_address_service_instance.id == address_service_instance.id):
33 return self.cached_address_service_instance
Sapan Bhatia46482ee2017-04-21 17:59:48 +020034
Scott Bakeradd58dd2017-08-23 15:56:58 -070035 address_service_instance.caller = self.creator
36 self.cached_address_service_instance = address_service_instance
37 return address_service_instance
Sapan Bhatia46482ee2017-04-21 17:59:48 +020038
Scott Bakeradd58dd2017-08-23 15:56:58 -070039@address_service_instance.setter
40def address_service_instance(self, value):
41 raise XOSConfigurationError("VSGTenant.address_service_instance setter is not implemented")
Sapan Bhatia46482ee2017-04-21 17:59:48 +020042
43@property
44def volt(self):
45 from services.volt.models import VOLTTenant
46 if not self.subscriber_tenant:
47 return None
48 volts = VOLTTenant.objects.filter(id=self.subscriber_tenant.id)
49 if not volts:
50 return None
51 return volts[0]
52
53@volt.setter
54def volt(self, value):
55 raise XOSConfigurationError("VSGTenant.volt setter is not implemented")
56
57@property
58def ssh_command(self):
59 if self.instance:
60 return self.instance.get_ssh_command()
61 else:
62 return "no-instance"
63
Scott Bakeradd58dd2017-08-23 15:56:58 -070064def get_address_service_instance_field(self, name, default=None):
65 if self.address_service_instance:
66 return getattr(self.address_service_instance, name, default)
Sapan Bhatia46482ee2017-04-21 17:59:48 +020067 else:
68 return default
69
70@property
71def wan_container_ip(self):
Scott Bakeradd58dd2017-08-23 15:56:58 -070072 return self.get_address_service_instance_field("public_ip", None)
Sapan Bhatia46482ee2017-04-21 17:59:48 +020073
74@property
75def wan_container_mac(self):
Scott Bakeradd58dd2017-08-23 15:56:58 -070076 return self.get_address_service_instance_field("public_mac", None)
Sapan Bhatia46482ee2017-04-21 17:59:48 +020077
78@property
79def wan_container_netbits(self):
Scott Bakeradd58dd2017-08-23 15:56:58 -070080 return self.get_address_service_instance_field("netbits", None)
Sapan Bhatia46482ee2017-04-21 17:59:48 +020081
82@property
83def wan_container_gateway_ip(self):
Scott Bakeradd58dd2017-08-23 15:56:58 -070084 return self.get_address_service_instance_field("gateway_ip", None)
Sapan Bhatia46482ee2017-04-21 17:59:48 +020085
86@property
87def wan_container_gateway_mac(self):
Scott Bakeradd58dd2017-08-23 15:56:58 -070088 return self.get_address_service_instance_field("gateway_mac", None)
Sapan Bhatia46482ee2017-04-21 17:59:48 +020089
90@property
91def wan_vm_ip(self):
Scott Baker248ed752017-05-24 16:40:28 -070092 tags = Tag.objects.filter(content_type=self.instance.get_content_type_key(), object_id=self.instance.id, name="vm_vrouter_tenant")
Sapan Bhatia46482ee2017-04-21 17:59:48 +020093 if tags:
Scott Bakeradd58dd2017-08-23 15:56:58 -070094 tenant = AddressManagerServiceInstance.objects.get(id=tags[0].value)
Sapan Bhatia46482ee2017-04-21 17:59:48 +020095 return tenant.public_ip
96 else:
97 raise Exception("no vm_vrouter_tenant tag for instance %s" % o.instance)
98
99@property
100def wan_vm_mac(self):
Scott Baker248ed752017-05-24 16:40:28 -0700101 tags = Tag.objects.filter(content_type=self.instance.get_content_type_key(), object_id=self.instance.id, name="vm_vrouter_tenant")
Sapan Bhatia46482ee2017-04-21 17:59:48 +0200102 if tags:
Scott Bakeradd58dd2017-08-23 15:56:58 -0700103 tenant = AddressManagerServiceInstance.objects.get(id=tags[0].value)
Sapan Bhatia46482ee2017-04-21 17:59:48 +0200104 return tenant.public_mac
105 else:
106 raise Exception("no vm_vrouter_tenant tag for instance %s" % o.instance)
107
108@property
109def is_synced(self):
110 return (self.enacted is not None) and (self.enacted >= self.updated)
111
112@is_synced.setter
113def is_synced(self, value):
114 pass
115
Sapan Bhatia46482ee2017-04-21 17:59:48 +0200116def save(self, *args, **kwargs):
117 if not self.creator:
118 if not getattr(self, "caller", None):
119 # caller must be set when creating a vCPE since it creates a slice
120 raise XOSProgrammingError("VSGTenant's self.caller was not set")
121 self.creator = self.caller
122 if not self.creator:
123 raise XOSProgrammingError("VSGTenant's self.creator was not set")
124
125 super(VSGTenant, self).save(*args, **kwargs)
Sapan Bhatia46482ee2017-04-21 17:59:48 +0200126
127def delete(self, *args, **kwargs):
Sapan Bhatia46482ee2017-04-21 17:59:48 +0200128 super(VSGTenant, self).delete(*args, **kwargs)
129