Merge branch 'master' of github.com:open-cloud/xos
diff --git a/xos/tosca/custom_types/xos.yaml b/xos/tosca/custom_types/xos.yaml
index b1f6873..fbc8010 100644
--- a/xos/tosca/custom_types/xos.yaml
+++ b/xos/tosca/custom_types/xos.yaml
@@ -3,17 +3,22 @@
node_types:
tosca.nodes.Service:
derived_from: tosca.nodes.Root
+ capabilities:
+ scalable:
+ type tosca.capabilities.Scalable
+# properties:
+# persistent:
+# type: boolean
+# required: false
+# default: false
+# description: prevent this resource from being deleted
tosca.nodes.Site:
derived_from: tosca.nodes.Root
tosca.nodes.Slice:
derived_from: tosca.nodes.Root
- properties:
-# site:
-# type: string
-# required: true
-
+
tosca.relationships.MemberOfSlice:
derived_from: tosca.relationships.Root
diff --git a/xos/tosca/engine.py b/xos/tosca/engine.py
index b5ce94b..0801c9b 100644
--- a/xos/tosca/engine.py
+++ b/xos/tosca/engine.py
@@ -105,7 +105,7 @@
return order + noorder
def execute(self, user):
- for nodetemplate in self.ordered_nodetemplates: # self.template.nodetemplates:
+ for nodetemplate in self.ordered_nodetemplates:
self.execute_nodetemplate(user, nodetemplate)
def execute_nodetemplate(self, user, nodetemplate):
@@ -115,13 +115,6 @@
obj = cls(user, nodetemplate)
obj.create_or_update()
- def execute_nodetemplate(self, user, nodetemplate):
- if nodetemplate.type in resources.resources:
- cls = resources.resources[nodetemplate.type]
- print "work on", cls.__name__, nodetemplate.name
- obj = cls(user, nodetemplate)
- obj.create_or_update()
-
def destroy(self, user):
nodetemplates = self.ordered_nodetemplates
models = []
@@ -129,9 +122,10 @@
if nodetemplate.type in resources.resources:
cls = resources.resources[nodetemplate.type]
obj = cls(user, nodetemplate)
- models = models + list(obj.get_existing_objs())
+ for model in obj.get_existing_objs():
+ models.append( (obj, model) )
models.reverse()
- for model in models:
+ for (resource,model) in models:
print "destroying", model
- model.delete(purge=True) # XXX change before deploying
+ resource.delete(model)
diff --git a/xos/tosca/resources/service.py b/xos/tosca/resources/service.py
index fb394e4..12b0464 100644
--- a/xos/tosca/resources/service.py
+++ b/xos/tosca/resources/service.py
@@ -42,3 +42,9 @@
self.info("Created Service '%s'" % (str(service), ))
+ def delete(self, obj):
+ if obj.slices.exists():
+ self.info("Service %s has active slices; skipping delete" % obj.name)
+ return
+ obj.delete()
+
diff --git a/xos/tosca/resources/slice.py b/xos/tosca/resources/slice.py
index 7e63ba0..7ac45f7 100644
--- a/xos/tosca/resources/slice.py
+++ b/xos/tosca/resources/slice.py
@@ -30,4 +30,11 @@
self.info("Created Slice '%s' on Site '%s'" % (str(slice), str(slice.site)))
+ def delete(self, obj):
+ if obj.slivers.exists():
+ self.info("Slice %s has active slivers; skipping delete" % obj.name)
+ return
+ super(XOSSlice, self).delete(obj)
+
+
diff --git a/xos/tosca/resources/xosresource.py b/xos/tosca/resources/xosresource.py
index 573c167..04ee4aa 100644
--- a/xos/tosca/resources/xosresource.py
+++ b/xos/tosca/resources/xosresource.py
@@ -74,6 +74,9 @@
def update(self, obj):
pass
+ def delete(self, obj):
+ obj.delete(purge=True) # XXX TODO: turn off purge before production
+
def info(self, s):
print s