Merge "Better image checking in update_image command"
This commit is contained in:
commit
30c31a8640
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user