blob: 435ba0f126ca14462bbd76084be8aa818b2c7185 [file] [log] [blame]
Scott Bakerca0ba652015-08-24 15:51:06 -07001import os
2import pdb
3import sys
4import tempfile
5sys.path.append("/opt/tosca")
6from translator.toscalib.tosca_template import ToscaTemplate
7
8from core.models import Sliver,User,Network,NetworkTemplate,NetworkSliver
9
10from xosresource import XOSResource
11
12class XOSPort(XOSResource):
13 provides = ["tosca.nodes.network.Port"]
14 xos_model = NetworkSliver
15
16 def get_existing_objs(self):
17 # Port objects have no name, their unique key is (sliver, network)
Scott Baker693d3ca2015-08-24 16:27:05 -070018 args = self.get_xos_args(throw_exception=False)
19 sliver = args.get('sliver',None)
20 network = args.get('network',None)
21 if (not sliver) or (not network):
22 return []
Scott Bakerca0ba652015-08-24 15:51:06 -070023 return self.xos_model.objects.filter(**{'sliver': sliver, 'network': network})
24
Scott Baker693d3ca2015-08-24 16:27:05 -070025 def get_xos_args(self, throw_exception=True):
Scott Bakerca0ba652015-08-24 15:51:06 -070026 args = {}
27
28 sliver_name = self.get_requirement("tosca.relationships.network.BindsTo")
29 if sliver_name:
Scott Baker693d3ca2015-08-24 16:27:05 -070030 args["sliver"] = self.get_xos_object(Sliver, throw_exception, name=sliver_name)
Scott Bakerca0ba652015-08-24 15:51:06 -070031
32 net_name = self.get_requirement("tosca.relationships.network.LinksTo")
33 if net_name:
Scott Baker693d3ca2015-08-24 16:27:05 -070034 args["network"] = self.get_xos_object(Network, throw_exception, name=net_name)
Scott Bakerca0ba652015-08-24 15:51:06 -070035
36 return args
37
38 def postprocess(self, obj):
39 pass
40
41 def create(self):
42 xos_args = self.get_xos_args()
43
44 if not xos_args.get("sliver", None):
45 raise Exception("Must specify slver when creating port")
46 if not xos_args.get("network", None):
47 raise Exception("Must specify network when creating port")
48
49 port = NetworkSliver(**xos_args)
50 port.caller = self.user
51 port.save()
52
53 self.postprocess(port)
54
55 self.info("Created NetworkSliver '%s' connect sliver '%s' to network %s" % (str(port), str(port.sliver), str(port.network)))
56
57 def delete(self, obj):
58 super(XOSPort, self).delete(obj)
59
60
61