]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Add a convenience method to get instance volumes
authorZane Bitter <zbitter@redhat.com>
Fri, 24 May 2013 08:31:27 +0000 (10:31 +0200)
committerZane Bitter <zbitter@redhat.com>
Fri, 24 May 2013 08:31:27 +0000 (10:31 +0200)
Change-Id: If22cd9245b043f35386ad3c24d46a41b0b8c2c86

heat/engine/resources/instance.py

index 65847ca0e8c9be00dfe01527c4e355644c07f2be..2f637a5845a494590fa8dd9fab2ee5f6d168cd1a 100644 (file)
@@ -363,26 +363,30 @@ class Instance(resource.Resource):
                                   ('nova reported unexpected',
                                    self.name, server.status))
 
+    def volumes(self):
+        """
+        Return an iterator over (volume_id, device) tuples for all volumes
+        that should be attached to this instance.
+        """
+        volumes = self.properties['Volumes']
+        if volumes is None:
+            return []
+
+        return ((vol['VolumeId'], vol['Device']) for vol in volumes)
+
     def attach_volumes(self):
-        if not self.properties['Volumes']:
-            return
-        for vol in self.properties['Volumes']:
-            if 'DeviceId' in vol:
-                dev = vol['DeviceId']
-            else:
-                dev = vol['Device']
+        for volume_id, device in self.volumes():
             attach_task = volume.VolumeAttachTask(self.stack,
                                                   self.resource_id,
-                                                  vol['VolumeId'],
-                                                  vol['Device'])
+                                                  volume_id,
+                                                  device)
             scheduler.TaskRunner(attach_task)()
 
     def detach_volumes(self):
-        server_id = self.resource_id
-        for vol in self.properties['Volumes']:
+        for volume_id, device in self.volumes():
             detach_task = volume.VolumeDetachTask(self.stack,
                                                   self.resource_id,
-                                                  vol['VolumeId'])
+                                                  volume_id)
             scheduler.TaskRunner(detach_task)()
 
     def handle_update(self, json_snippet, tmpl_diff, prop_diff):
@@ -426,8 +430,7 @@ class Instance(resource.Resource):
         if self.resource_id is None:
             return
 
-        if self.properties['Volumes']:
-            self.detach_volumes()
+        self.detach_volumes()
 
         try:
             server = self.nova().servers.get(self.resource_id)