Merge "Better image checking in update_image command"

This commit is contained in:
Jenkins 2015-03-04 22:25:15 +00:00 committed by Gerrit Code Review
commit 30c31a8640

View File

@ -180,44 +180,38 @@ class NodePoolCmd(object):
def image_update(self):
with self.pool.getDB().getSession() as session:
self.pool.reconfigureManagers(self.pool.config)
label = self.pool.config.labels.get(self.args.image)
def provider_save_image(provider_name):
"""Method to save an image to the given provider.
This works either by uploading a previously build dib
image or by spinning up a node and taking a snapshot
of that node.
This is a closure around the DB session and label being
updated.
"""
if provider_name in label.diskimage_providers:
self.pool.uploadImage(session, provider_name,
label.name)
elif provider_name in label.snapshot_providers:
self.pool.updateImage(session, provider_name,
label.name)
elif provider_name in self.pool.config.providers:
raise Exception("Provider %s does not provide label %s"
% (provider_name, label.name))
else:
raise Exception("Provider %s does not exist"
% provider_name)
if label and self.args.provider == 'all':
if label.diskimage_providers:
self.image_build()
for provider_name in label.providers:
provider_save_image(provider_name)
elif label:
if label.diskimage_providers.get(self.args.provider):
self.image_build()
provider_save_image(self.args.provider)
else:
raise Exception("Trying to update unknown label: %s"
if self.args.image not in self.pool.config.images_in_use:
raise Exception("Image specified, %s, is not in use."
% self.args.image)
if self.args.provider == 'all':
dib_image_built = False
for provider in self.pool.config.providers.values():
image = provider.images.get(self.args.image)
if image and image.diskimage:
if not dib_image_built:
self.image_build()
dib_image_built = True
self.pool.uploadImage(session, provider.name,
image.name)
elif image:
self.pool.updateImage(session, provider.name,
image.name)
else:
provider = self.pool.config.providers.get(self.args.provider)
if not provider:
raise Exception("Provider %s does not exist"
% self.args.provider)
image = provider.images.get(self.args.image)
if image and image.diskimage:
self.image_build()
self.pool.uploadImage(session, provider.name, image.name)
elif image:
self.pool.updateImage(session, provider.name, image.name)
else:
raise Exception("Image %s not in use by provider %s"
% (self.args.image, self.args.provider))
def image_build(self):
if self.args.image not in self.pool.config.diskimages:
# only can build disk images, not snapshots