blob: f483b6caf4c4162c32ac97078c2413e51207e273 [file] [log] [blame]
import os
import pdb
import sys
import tempfile
sys.path.append("/opt/tosca")
from translator.toscalib.tosca_template import ToscaTemplate
import pdb
from core.models import Slice,User,Network,NetworkTemplate,NetworkSlice
from xosresource import XOSResource
class XOSNetwork(XOSResource):
provides = ["tosca.nodes.network.Network", "tosca.nodes.network.Network.XOS"]
xos_model = Network
copyin_props = ["ports", "labels"]
def get_xos_args(self):
args = super(XOSNetwork, self).get_xos_args()
args["autoconnect"] = False
slice_name = self.get_requirement("tosca.relationships.MemberOfSlice")
if slice_name:
args["owner"] = self.get_xos_object(Slice, name=slice_name)
net_template_name = self.get_requirement("tosca.relationships.UsesNetworkTemplate")
if net_template_name:
args["template"] = self.get_xos_object(NetworkTemplate, name=net_template_name)
if self.nodetemplate.type == "tosca.nodes.network.Network.XOS":
# copy simple string properties from the template into the arguments
for prop in ["ports", "labels", "permit_all_slices"]:
v = self.get_property(prop)
if v:
args[prop] = v
else:
# tosca.nodes.network.Netwrok is not as rich as an XOS network. So
# we have to manually fill in some defaults.
args["permit_all_slices"] = True
return args
def postprocess(self, obj):
for sliceName in self.get_requirements("tosca.relationships.ConnectsToSlice"):
slice = self.get_xos_object(Slice, name=sliceName)
netSlices = NetworkSlice.objects.filter(network=obj, slice = slice)
if not netSlices:
self.info("Attached Network %s to Slice %s" % (obj, slice))
ns = NetworkSlice(network = obj, slice=slice)
ns.save()
# v = self.get_property("permitted_slices")
# if v:
# for slicename in v.split(","):
# slice = self.get_xos_object(Slice, name = slicename.strip())
#
# if not obj.permitted_slices.filter(id = slice.id).exists():
# obj.permitted_slices.add(slice)
def create(self):
nodetemplate = self.nodetemplate
xos_args = self.get_xos_args()
if not xos_args.get("owner", None):
raise Exception("Must specify slice when creating network")
if not xos_args.get("template", None):
raise Exception("Must specify network template when creating network")
network = Network(**xos_args)
network.caller = self.user
network.save()
self.postprocess(network)
self.info("Created Network '%s' owned by Slice '%s'" % (str(network), str(network.owner)))
def delete(self, obj):
super(XOSNetwork, self).delete(obj)