blob: f483b6caf4c4162c32ac97078c2413e51207e273 [file] [log] [blame]
Scott Bakerb2bddd82015-08-06 17:21:34 -07001import os
2import pdb
3import sys
4import tempfile
5sys.path.append("/opt/tosca")
6from translator.toscalib.tosca_template import ToscaTemplate
Scott Baker8d3741e2015-08-31 16:16:41 -07007import pdb
Scott Bakerb2bddd82015-08-06 17:21:34 -07008
Scott Bakera7c9efc2015-09-01 11:07:56 -07009from core.models import Slice,User,Network,NetworkTemplate,NetworkSlice
Scott Bakerb2bddd82015-08-06 17:21:34 -070010
11from xosresource import XOSResource
12
13class XOSNetwork(XOSResource):
Scott Baker2edd4f32015-08-14 12:41:18 -070014 provides = ["tosca.nodes.network.Network", "tosca.nodes.network.Network.XOS"]
Scott Bakerb2bddd82015-08-06 17:21:34 -070015 xos_model = Network
Scott Baker01234ce2015-09-03 15:47:56 -070016 copyin_props = ["ports", "labels"]
Scott Bakerb2bddd82015-08-06 17:21:34 -070017
18 def get_xos_args(self):
Scott Baker01234ce2015-09-03 15:47:56 -070019 args = super(XOSNetwork, self).get_xos_args()
20
21 args["autoconnect"] = False
Scott Bakerb2bddd82015-08-06 17:21:34 -070022
23 slice_name = self.get_requirement("tosca.relationships.MemberOfSlice")
24 if slice_name:
25 args["owner"] = self.get_xos_object(Slice, name=slice_name)
26
27 net_template_name = self.get_requirement("tosca.relationships.UsesNetworkTemplate")
28 if net_template_name:
29 args["template"] = self.get_xos_object(NetworkTemplate, name=net_template_name)
30
Scott Baker8d3741e2015-08-31 16:16:41 -070031 if self.nodetemplate.type == "tosca.nodes.network.Network.XOS":
32 # copy simple string properties from the template into the arguments
33 for prop in ["ports", "labels", "permit_all_slices"]:
34 v = self.get_property(prop)
35 if v:
36 args[prop] = v
37 else:
38 # tosca.nodes.network.Netwrok is not as rich as an XOS network. So
39 # we have to manually fill in some defaults.
40 args["permit_all_slices"] = True
Scott Bakerb2bddd82015-08-06 17:21:34 -070041
42 return args
43
44 def postprocess(self, obj):
Scott Bakera7c9efc2015-09-01 11:07:56 -070045 for sliceName in self.get_requirements("tosca.relationships.ConnectsToSlice"):
Scott Baker121d5c32015-09-03 15:33:52 -070046 slice = self.get_xos_object(Slice, name=sliceName)
Scott Bakera7c9efc2015-09-01 11:07:56 -070047 netSlices = NetworkSlice.objects.filter(network=obj, slice = slice)
48 if not netSlices:
49 self.info("Attached Network %s to Slice %s" % (obj, slice))
50 ns = NetworkSlice(network = obj, slice=slice)
51 ns.save()
Scott Bakerb2bddd82015-08-06 17:21:34 -070052
Scott Baker2edd4f32015-08-14 12:41:18 -070053# v = self.get_property("permitted_slices")
54# if v:
55# for slicename in v.split(","):
56# slice = self.get_xos_object(Slice, name = slicename.strip())
57#
58# if not obj.permitted_slices.filter(id = slice.id).exists():
59# obj.permitted_slices.add(slice)
Scott Bakerb2bddd82015-08-06 17:21:34 -070060
61 def create(self):
62 nodetemplate = self.nodetemplate
63
64 xos_args = self.get_xos_args()
65
66 if not xos_args.get("owner", None):
67 raise Exception("Must specify slice when creating network")
68 if not xos_args.get("template", None):
69 raise Exception("Must specify network template when creating network")
70
71 network = Network(**xos_args)
72 network.caller = self.user
73 network.save()
74
75 self.postprocess(network)
76
77 self.info("Created Network '%s' owned by Slice '%s'" % (str(network), str(network.owner)))
78
79 def delete(self, obj):
80 super(XOSNetwork, self).delete(obj)
81
82
83