blob: 435ba0f126ca14462bbd76084be8aa818b2c7185 [file] [log] [blame]
import os
import pdb
import sys
import tempfile
sys.path.append("/opt/tosca")
from translator.toscalib.tosca_template import ToscaTemplate
from core.models import Sliver,User,Network,NetworkTemplate,NetworkSliver
from xosresource import XOSResource
class XOSPort(XOSResource):
provides = ["tosca.nodes.network.Port"]
xos_model = NetworkSliver
def get_existing_objs(self):
# Port objects have no name, their unique key is (sliver, network)
args = self.get_xos_args(throw_exception=False)
sliver = args.get('sliver',None)
network = args.get('network',None)
if (not sliver) or (not network):
return []
return self.xos_model.objects.filter(**{'sliver': sliver, 'network': network})
def get_xos_args(self, throw_exception=True):
args = {}
sliver_name = self.get_requirement("tosca.relationships.network.BindsTo")
if sliver_name:
args["sliver"] = self.get_xos_object(Sliver, throw_exception, name=sliver_name)
net_name = self.get_requirement("tosca.relationships.network.LinksTo")
if net_name:
args["network"] = self.get_xos_object(Network, throw_exception, name=net_name)
return args
def postprocess(self, obj):
pass
def create(self):
xos_args = self.get_xos_args()
if not xos_args.get("sliver", None):
raise Exception("Must specify slver when creating port")
if not xos_args.get("network", None):
raise Exception("Must specify network when creating port")
port = NetworkSliver(**xos_args)
port.caller = self.user
port.save()
self.postprocess(port)
self.info("Created NetworkSliver '%s' connect sliver '%s' to network %s" % (str(port), str(port.sliver), str(port.network)))
def delete(self, obj):
super(XOSPort, self).delete(obj)