fix getattr problem, add additional logging
authorScott Baker <smbaker@gmail.com>
Tue, 3 Jun 2014 05:59:08 +0000 (22:59 -0700)
committerScott Baker <smbaker@gmail.com>
Tue, 3 Jun 2014 05:59:08 +0000 (22:59 -0700)
planetstack/observer/steps/sync_image_deployments.py

index 3522eca..52aaeef 100644 (file)
@@ -6,6 +6,9 @@ from planetstack.config import Config
 from observer.openstacksyncstep import OpenStackSyncStep
 from core.models.deployment import Deployment
 from core.models.image import Image, ImageDeployments
+from util.logger import Logger, logging
+\r
+logger = Logger(level=logging.INFO)
 
 class SyncImageDeployments(OpenStackSyncStep):
     provides=[ImageDeployments]
@@ -17,8 +20,8 @@ class SyncImageDeployments(OpenStackSyncStep):
         image_deploy_lookup = defaultdict(list)
         for image_deployment in image_deployments:
             image_deploy_lookup[image_deployment.image].append(image_deployment.deployment)
-        
-        all_deployments = Deployment.objects.all() 
+
+        all_deployments = Deployment.objects.all()
         for image in Image.objects.all():
             expected_deployments = all_deployments
             for expected_deployment in expected_deployments:
@@ -26,11 +29,12 @@ class SyncImageDeployments(OpenStackSyncStep):
                   expected_deployment not in image_deploy_lookup[image]:
                     id = ImageDeployments(image=image, deployment=expected_deployment)
                     id.save()
-            
+
         # now we return all images that need to be enacted
-        return ImageDeployments.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) 
-                      
+        return ImageDeployments.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
+
     def sync_record(self, image_deployment):
+        logger.info("Working on image %s on deployment %s" % (image_deployment.image.name, image_deployment.deployment.name))
         driver = self.driver.admin_driver(deployment=image_deployment.deployment.name)
         images = driver.shell.glance.get_images()
         glance_image = None
@@ -39,22 +43,29 @@ class SyncImageDeployments(OpenStackSyncStep):
                 glance_image = image
                 break
         if glance_image:
+            logger.info("Found image %s on deployment %s" % (image_deployment.image.name, image_deployment.deployment.name))
             image_deployment.glance_image_id = glance_image['id']
         elif image_deployment.image.path:
             image = {
                 'name': image_deployment.image.name,
                 'is_public': True,
-                'disk_format': 'raw', 
+                'disk_format': 'raw',
                 'container_format': 'bare',
-                'file': image_deployment.image.path, 
-            }  
+                'file': image_deployment.image.path,
+            }
+
+            logger.info("Creating image %s on deployment %s" % (image_deployment.image.name, image_deployment.deployment.name))
+
             glance_image = driver.shell.glanceclient.images.create(name=image_deployment.image.name,
                                                                    is_public=True,
                                                                    disk_format='raw',
                                                                    container_format='bare')
             glance_image.update(data=open(image_deployment.image.path, 'rb'))
-            if not glance_image or not glance_image.get('id'): 
+
+            # While the images returned by driver.shell.glance.get_images()
+            #   are dicts, the images returned by driver.shell.glanceclient.images.create
+            #   are not dicts. We have to use getattr() instead of [] operator.
+            if not glance_image or not getattr(glance_image,"id",None):
                 raise Exception, "Add image failed at deployment %s" % image_deployment.deployment.name
-            image_deployment.glance_image_id = glance_image['id']
+            image_deployment.glance_image_id = getattr(glance_image, "id")
         image_deployment.save()