blob: e5ab4b1f44a769a69427c23c6d84875ed6ed96cd [file] [log] [blame]
Scott Bakerf2c83982015-08-05 18:23:40 -07001# note: this module named xossite.py instead of site.py due to conflict with
2# /usr/lib/python2.7/site.py
3
4import os
5import pdb
6import sys
7import tempfile
8sys.path.append("/opt/tosca")
9from translator.toscalib.tosca_template import ToscaTemplate
10
Scott Baker5329d3a2015-09-24 15:37:16 -070011from core.models import User,Deployment,DeploymentRole,DeploymentPrivilege,Image,ImageDeployments,Flavor
Scott Bakerf2c83982015-08-05 18:23:40 -070012
13from xosresource import XOSResource
14
15class XOSDeployment(XOSResource):
16 provides = "tosca.nodes.Deployment"
17 xos_model = Deployment
Scott Bakere71ab8b2015-09-22 17:26:31 -070018 copyin_props = ["accessControl"]
Scott Bakerf2c83982015-08-05 18:23:40 -070019
20 def get_xos_args(self):
Scott Bakere71ab8b2015-09-22 17:26:31 -070021 args = super(XOSDeployment, self).get_xos_args()
Scott Bakerf2c83982015-08-05 18:23:40 -070022
23 return args
24
Scott Bakerff8845c2015-09-23 21:48:35 -070025 def postprocess(self, obj):
26 for imageName in self.get_requirements("tosca.relationships.SupportsImage"):
27 image = self.get_xos_object(Image, name=imageName)
28 imageDeps = ImageDeployments.objects.filter(deployment=obj, image=image)
29 if not imageDeps:
30 self.info("Attached Image %s to Deployment %s" % (image, obj))
31 imageDep = ImageDeployments(deployment=obj, image=image)
32 imageDep.save()
Scott Bakerf2c83982015-08-05 18:23:40 -070033
Scott Baker786750b2016-04-25 09:21:08 -070034 # DEPRECATED - should switch to using a requirement, so tosca can do
35 # the topsort properly
Scott Bakerf2c83982015-08-05 18:23:40 -070036
Scott Bakerff8845c2015-09-23 21:48:35 -070037 flavors = self.get_property("flavors")
38 if flavors:
39 flavors = flavors.split(",")
40 flavors = [x.strip() for x in flavors]
41
42 for flavor in flavors:
43 flavor = self.get_xos_object(Flavor, name=flavor)
44 if not flavor.deployments.filter(id=obj.id).exists():
45 self.info("Attached flavor %s to deployment %s" % (flavor, obj))
46 flavor.deployments.add(obj)
47 flavor.save()
Scott Bakerf2c83982015-08-05 18:23:40 -070048
Scott Baker786750b2016-04-25 09:21:08 -070049 # The new, right way
50 for flavor in self.get_requirements("tosca.relationships.SupportsFlavor"):
51 flavor = self.get_xos_object(Flavor, name=flavor)
52 if not flavor.deployments.filter(id=obj.id).exists():
53 self.info("Attached flavor %s to deployment %s" % (flavor, obj))
54 flavor.deployments.add(obj)
55 flavor.save()
56
57
Scott Baker5329d3a2015-09-24 15:37:16 -070058 rolemap = ( ("tosca.relationships.AdminPrivilege", "admin"), )
59 self.postprocess_privileges(DeploymentRole, DeploymentPrivilege, rolemap, obj, "deployment")
60
Scott Bakerf2c83982015-08-05 18:23:40 -070061 def delete(self, obj):
Scott Bakerf2c83982015-08-05 18:23:40 -070062 if obj.sites.exists():
63 self.info("Deployment %s has active sites; skipping delete" % obj.name)
64 return
Scott Bakerfbb400f2015-10-08 16:51:08 -070065 for sd in obj.sitedeployments.all():
66 if sd.nodes.exists():
67 self.info("Deployment %s has active nodes; skipping delete" % obj.name)
68 return
Scott Bakerf2c83982015-08-05 18:23:40 -070069 #if obj.nodes.exists():
70 # self.info("Deployment %s has active nodes; skipping delete" % obj.name)
71 # return
72 super(XOSDeployment, self).delete(obj)
73
74
75