]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Make the "heat delete" command work.
authorAngus Salkeld <asalkeld@redhat.com>
Mon, 2 Apr 2012 05:48:00 +0000 (15:48 +1000)
committerAngus Salkeld <asalkeld@redhat.com>
Mon, 2 Apr 2012 05:48:00 +0000 (15:48 +1000)
Signed-off-by: Angus Salkeld <asalkeld@redhat.com>
heat/engine/api/v1/stacks.py
heat/engine/parser.py
heat/engine/resources.py

index e8ae6ddb6e019ec6bf27fc969bc333473d12f2b1..bceaa79cef08fe5c10d0c316d9d73ab4d48dc9f2 100644 (file)
@@ -119,6 +119,7 @@ class StacksController(object):
             return webob.exc.HTTPNotFound('No stack by that name')
 
         logger.info('deleting stack %s' % id)
+        stack_db[id].stop()
         del stack_db[id]
         return None
 
index 6783d3ce440ed1c5336cde08a2e9c0929838c49b..38285e01162cd3ba2e874f82f06609fec5aa623a 100644 (file)
@@ -103,6 +103,10 @@ class Stack:
             #print 'calling start [stack->%s]' % (self.resources[r].name)
             self.resources[r].start()
 
+    def stop(self):
+        for r in self.t['Resources']:
+            self.resources[r].stop()
+
     def calulate_dependencies(self, s, r):
         if isinstance(s, dict):
             for i in s:
index 10ed0883d68ce412eda0f6df1b9592f1669308cf..630992e0082ef5f182f5304873fb431890f51c40 100644 (file)
@@ -316,6 +316,29 @@ class Instance(Resource):
         else:
             self.state_set(self.CREATE_FAILED)
 
+    def stop(self):
+
+        if self.state == self.DELETE_IN_PROGRESS or self.state == self.DELETE_COMPLETE:
+            return
+        self.state_set(self.DELETE_IN_PROGRESS)
+        Resource.stop(self)
+
+        if self.instance_id == None:
+            self.state_set(self.DELETE_COMPLETE)
+            return
+
+        username = self.stack.creds['username']
+        password = self.stack.creds['password']
+        tenant = self.stack.creds['tenant']
+        auth_url = self.stack.creds['auth_url']
+
+        nova_client = client.Client(username, password, tenant, auth_url, service_type='compute', service_name='nova')
+        server = nova_client.servers.get(self.instance_id)
+        server.delete()
+        self.instance_id = None
+        self.state_set(self.DELETE_COMPLETE)
+
+
     def insert_package_and_services(self, r, new_script):
 
         try: