| Scott Baker | ca0ba65 | 2015-08-24 15:51:06 -0700 | [diff] [blame] | 1 | import os |
| 2 | import pdb |
| 3 | import sys |
| 4 | import tempfile |
| 5 | sys.path.append("/opt/tosca") |
| 6 | from translator.toscalib.tosca_template import ToscaTemplate |
| 7 | |
| 8 | from core.models import Sliver,User,Network,NetworkTemplate,NetworkSliver |
| 9 | |
| 10 | from xosresource import XOSResource |
| 11 | |
| 12 | class 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 Baker | 693d3ca | 2015-08-24 16:27:05 -0700 | [diff] [blame] | 18 | 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 Baker | ca0ba65 | 2015-08-24 15:51:06 -0700 | [diff] [blame] | 23 | return self.xos_model.objects.filter(**{'sliver': sliver, 'network': network}) |
| 24 | |
| Scott Baker | 693d3ca | 2015-08-24 16:27:05 -0700 | [diff] [blame] | 25 | def get_xos_args(self, throw_exception=True): |
| Scott Baker | ca0ba65 | 2015-08-24 15:51:06 -0700 | [diff] [blame] | 26 | args = {} |
| 27 | |
| 28 | sliver_name = self.get_requirement("tosca.relationships.network.BindsTo") |
| 29 | if sliver_name: |
| Scott Baker | 693d3ca | 2015-08-24 16:27:05 -0700 | [diff] [blame] | 30 | args["sliver"] = self.get_xos_object(Sliver, throw_exception, name=sliver_name) |
| Scott Baker | ca0ba65 | 2015-08-24 15:51:06 -0700 | [diff] [blame] | 31 | |
| 32 | net_name = self.get_requirement("tosca.relationships.network.LinksTo") |
| 33 | if net_name: |
| Scott Baker | 693d3ca | 2015-08-24 16:27:05 -0700 | [diff] [blame] | 34 | args["network"] = self.get_xos_object(Network, throw_exception, name=net_name) |
| Scott Baker | ca0ba65 | 2015-08-24 15:51:06 -0700 | [diff] [blame] | 35 | |
| 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 | |