blob: 2c0236541a204e8ec8a322b21854f1c8cf6efaed [file] [log] [blame]
Scott Baker3fb49312015-08-03 15:43:54 -07001import os
2import pdb
3import sys
4import tempfile
5sys.path.append("/opt/tosca")
6from translator.toscalib.tosca_template import ToscaTemplate
7
Scott Bakerfd897ee2015-08-26 17:46:19 -07008from core.models import Slice,User,Site,Network,NetworkSlice,SliceRole,SlicePrivilege,Service
Scott Baker3fb49312015-08-03 15:43:54 -07009
10from xosresource import XOSResource
11
12class XOSSlice(XOSResource):
13 provides = "tosca.nodes.Slice"
Scott Bakere4f9c2c2015-08-04 16:44:18 -070014 xos_model = Slice
Scott Baker69334ad2015-09-22 12:51:20 -070015 copyin_props = ["enabled", "description", "slice_url", "max_instances"]
Scott Baker3fb49312015-08-03 15:43:54 -070016
Scott Bakere4f9c2c2015-08-04 16:44:18 -070017 def get_xos_args(self):
Scott Baker69334ad2015-09-22 12:51:20 -070018 args = super(XOSSlice, self).get_xos_args()
Scott Bakerfd897ee2015-08-26 17:46:19 -070019
Scott Bakere4f9c2c2015-08-04 16:44:18 -070020 site_name = self.get_requirement("tosca.relationships.MemberOfSite", throw_exception=True)
21 site = self.get_xos_object(Site, login_base=site_name)
Scott Bakerfd897ee2015-08-26 17:46:19 -070022 args["site"] = site
23
24 serviceName = self.get_requirement("tosca.relationships.MemberOfService", throw_exception=False)
25 if serviceName:
26 service = self.get_xos_object(Service, name=serviceName)
27 args["service"] = service
28
29 return args
Scott Bakere4f9c2c2015-08-04 16:44:18 -070030
Scott Bakerb2bddd82015-08-06 17:21:34 -070031 def postprocess(self, obj):
32 for net_name in self.get_requirements("tosca.relationships.ConnectsToNetwork"):
33 net = self.get_xos_object(Network, name=net_name)
34 if not NetworkSlice.objects.filter(network=net, slice=obj):
35 ns = NetworkSlice(network=net, slice=obj)
36 ns.save()
37 self.info("Added network connection from '%s' to '%s'" % (str(obj), str(net)))
38
Scott Bakerb31659b2015-08-07 17:06:47 -070039 rolemap = ( ("tosca.relationships.AdminPrivilege", "admin"), ("tosca.relationships.AccessPrivilege", "access"),
40 ("tosca.relationships.PIPrivilege", "pi"), ("tosca.relationships.TechPrivilege", "tech") )
Scott Baker5329d3a2015-09-24 15:37:16 -070041 self.postprocess_privileges(SliceRole, SlicePrivilege, rolemap, obj, "slice")
Scott Bakerb31659b2015-08-07 17:06:47 -070042
Scott Bakere4f9c2c2015-08-04 16:44:18 -070043 def create(self):
Scott Baker3fb49312015-08-03 15:43:54 -070044 nodetemplate = self.nodetemplate
45 sliceName = nodetemplate.name
46
Scott Bakere4f9c2c2015-08-04 16:44:18 -070047 xos_args = self.get_xos_args()
48 slice = Slice(**xos_args)
49 slice.caller = self.user
50 slice.save()
Scott Baker3fb49312015-08-03 15:43:54 -070051
Scott Bakerb2bddd82015-08-06 17:21:34 -070052 self.postprocess(slice)
53
Scott Bakere4f9c2c2015-08-04 16:44:18 -070054 self.info("Created Slice '%s' on Site '%s'" % (str(slice), str(slice.site)))
Scott Baker3fb49312015-08-03 15:43:54 -070055
Scott Baker4ee562b2015-08-05 16:35:09 -070056 def delete(self, obj):
Tony Mack3de59e32015-08-19 11:58:18 -040057 if obj.instances.exists():
58 self.info("Slice %s has active instances; skipping delete" % obj.name)
Scott Baker4ee562b2015-08-05 16:35:09 -070059 return
60 super(XOSSlice, self).delete(obj)
61
62
Scott Baker3fb49312015-08-03 15:43:54 -070063