From: Sapan Bhatia Date: Fri, 19 Dec 2014 18:21:06 +0000 (-0500) Subject: Sync images converted over to Ansible X-Git-Url: http://git.onelab.eu/?p=plstackapi.git;a=commitdiff_plain;h=abf5f75c42083eccb4c54dc31ef39c1a8488e6e8 Sync images converted over to Ansible --- diff --git a/planetstack/openstack_observer/steps/sync_controller_images.py b/planetstack/openstack_observer/steps/sync_controller_images.py index 67cd7b5..4446d9a 100644 --- a/planetstack/openstack_observer/steps/sync_controller_images.py +++ b/planetstack/openstack_observer/steps/sync_controller_images.py @@ -17,61 +17,25 @@ class SyncControllerImages(OpenStackSyncStep): def fetch_pending(self, deleted): if (deleted): return [] - # smbaker: commented out automatic creation of ControllerImages as - # as they will now be configured in GUI. Not sure if this is - # sufficient. - -# # ensure images are available across all controllers -# controller_images = ControllerImages.objects.all() -# image_deploy_lookup = defaultdict(list) -# for controller_image in controller_images: -# image_deploy_lookup[controller_image.image].append(controller_image.controller) -# -# all_controllers = Controller.objects.all() -# for image in Image.objects.all(): -# expected_controllers = all_controllers -# for expected_controller in expected_controllers: -# if image not in image_deploy_lookup or \ -# expected_controller not in image_deploy_lookup[image]: -# id = ControllerImages(image=image, controller=expected_controller) -# id.save() # now we return all images that need to be enacted return ControllerImages.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) def sync_record(self, controller_image): logger.info("Working on image %s on controller %s" % (controller_image.image.name, controller_image.controller)) - driver = self.driver.admin_driver(controller=controller_image.controller.name) - images = driver.shell.glance.get_images() - glance_image = None - for image in images: - if image['name'] == controller_image.image.name: - glance_image = image - break - if glance_image: - logger.info("Found image %s on controller %s" % (controller_image.image.name, controller_image.controller.name)) - controller_image.glance_image_id = glance_image['id'] - elif controller_image.image.path: - image = { - 'name': controller_image.image.name, - 'is_public': True, - 'disk_format': 'raw', - 'container_format': 'bare', - 'file': controller_image.image.path, - } - - logger.info("Creating image %s on controller %s" % (controller_image.image.name, controller_image.controller.name)) - - glance_image = driver.shell.glanceclient.images.create(name=controller_image.image.name, - is_public=True, - disk_format='raw', - container_format='bare') - glance_image.update(data=open(controller_image.image.path, 'rb')) - # 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 controller %s" % controller_image.controller.name - controller_image.glance_image_id = getattr(glance_image, "id") - controller_image.save() + image_fields = {'endpoint':controller_image.controller.auth_url, + 'admin_user':controller_image.controller.admin_user, + 'admin_password':controller_image.controller.admin_password, + 'name':controller_image.image.name, + 'filepath':controller_image.image.path + } + + res = run_template('sync_controller_images.yaml', image_fields) + + if (len(res)!=1): + raise Exception('Could not sync image %s'%controller_image.image.name) + else: + image_id = res[0]['id'] + controller_image.glance_image_id = image_id + controller_image.save()