Custom properties are missing in the image details section.
This is due to the changes made to handle the community change where V1 glance API got removed with Queens release of openstack. And, with V2 the response format has changed returning fewer properties.This bug is to fix the issue related to missing custom properties and add them back to be displayed to the user. Change-Id: I116ad05b00de6e94cf6c507dbcffa607b916fc42 Closes-Bug: #1814739
This commit is contained in:
parent
9980f8ee64
commit
4685d5fbc7
@ -1,4 +1,4 @@
|
|||||||
# Copyright 2013, 2018 IBM Corp.
|
# Copyright 2013, 2019 IBM Corp.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
All PowerVC Driver ImageManager Constants
|
All PowerVC Driver ImageManager Constants
|
||||||
@ -98,5 +98,11 @@ IMAGE_SYNC_CHECK_INTERVAL_TIME_IN_SECONDS = 1
|
|||||||
# Block Device Mapping Key in image properties
|
# Block Device Mapping Key in image properties
|
||||||
BDM_KEY = 'block_device_mapping'
|
BDM_KEY = 'block_device_mapping'
|
||||||
|
|
||||||
|
# Fix for Bug#1814739. Handle missing custom properties for an
|
||||||
|
# image due to API version change
|
||||||
V1_PROPERTIES = ['os_distro', 'block_device_mapping', 'hypervisor_type',
|
V1_PROPERTIES = ['os_distro', 'block_device_mapping', 'hypervisor_type',
|
||||||
'bdm_v2', 'architecture', 'endianness', 'root_device_name']
|
'bdm_v2', 'architecture', 'endianness', 'vcpus',
|
||||||
|
'boot_roles', 'root_device_name', 'owner_id',
|
||||||
|
'owner_user_name', 'user_id', 'Euca2ools state',
|
||||||
|
'decision_id', 'disk_format', 'image_location', 'memory_mb',
|
||||||
|
'storage_connectivity_group_id', 'owner_project_name']
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright 2013, 2018 IBM Corp.
|
# Copyright 2013, 2019 IBM Corp.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
PowerVC Driver ImageManager service
|
PowerVC Driver ImageManager service
|
||||||
@ -604,12 +604,18 @@ class PowerVCImageManager(service.Service):
|
|||||||
v2pvc_images)
|
v2pvc_images)
|
||||||
|
|
||||||
if updated_image is None:
|
if updated_image is None:
|
||||||
|
# Fix for Bug#1814739. Handle missing custom properties for an
|
||||||
|
# image due to API version change
|
||||||
|
if isinstance(pvc_image, dict):
|
||||||
|
pvc_image_name = pvc_image['name']
|
||||||
|
else:
|
||||||
|
pvc_image_name = pvc_image.name
|
||||||
LOG.error(_('PowerVC image \'%s\' with UUID %s was not'
|
LOG.error(_('PowerVC image \'%s\' with UUID %s was not'
|
||||||
' updated during periodic image '
|
' updated during periodic image '
|
||||||
'synchronization. It will be updated again'
|
'synchronization. It will be updated again'
|
||||||
' during the next periodic image '
|
' during the next periodic image '
|
||||||
'synchronization operation.'),
|
'synchronization operation.'),
|
||||||
pvc_image.name, uuid)
|
pvc_image_name, uuid)
|
||||||
else:
|
else:
|
||||||
self.pvc_updated_count += 1
|
self.pvc_updated_count += 1
|
||||||
|
|
||||||
@ -617,6 +623,11 @@ class PowerVCImageManager(service.Service):
|
|||||||
# next periodic sync operation. The update times are
|
# next periodic sync operation. The update times are
|
||||||
# stored in a dict with the PowerVC UUID as the keys
|
# stored in a dict with the PowerVC UUID as the keys
|
||||||
# and the updated_at image attribute as the values.
|
# and the updated_at image attribute as the values.
|
||||||
|
# Fix for Bug#1814739. Handle missing custom properties for an
|
||||||
|
# image due to API version change
|
||||||
|
if isinstance(updated_image, dict):
|
||||||
|
self.pvc_updated_at[uuid] = updated_image['updated_at']
|
||||||
|
else:
|
||||||
self.pvc_updated_at[uuid] = updated_image.updated_at
|
self.pvc_updated_at[uuid] = updated_image.updated_at
|
||||||
self.local_updated_at[uuid] = local_image.updated_at
|
self.local_updated_at[uuid] = local_image.updated_at
|
||||||
|
|
||||||
@ -1892,9 +1903,12 @@ class PowerVCImageManager(service.Service):
|
|||||||
|
|
||||||
# Adds are keys in the source that are not in the target
|
# Adds are keys in the source that are not in the target
|
||||||
adds = src_prop_set.difference(tgt_prop_set)
|
adds = src_prop_set.difference(tgt_prop_set)
|
||||||
|
|
||||||
# Deletes are keys in the target that are not in the source.
|
# Deletes are keys in the target that are not in the source.
|
||||||
deletes = tgt_prop_set.difference(src_prop_set)
|
# Fix for Bug#1814739. Handle missing custom properties for an
|
||||||
|
# image due to API version change. Skip deleting the keys
|
||||||
|
# that are not in the source.
|
||||||
|
# deletes = tgt_prop_set.difference(src_prop_set)
|
||||||
|
deletes = None
|
||||||
|
|
||||||
# Get the adds and updates
|
# Get the adds and updates
|
||||||
for key in adds:
|
for key in adds:
|
||||||
@ -2229,9 +2243,12 @@ class PowerVCImageManager(service.Service):
|
|||||||
|
|
||||||
# Adds are keys in the source that are not in the target
|
# Adds are keys in the source that are not in the target
|
||||||
adds = src_image_set.difference(tgt_image_set)
|
adds = src_image_set.difference(tgt_image_set)
|
||||||
|
|
||||||
# Deletes are keys in the target that are not in the source.
|
# Deletes are keys in the target that are not in the source.
|
||||||
deletes = tgt_image_set.difference(src_image_set)
|
# Fix for Bug#1814739. Handle missing custom properties for an
|
||||||
|
# image due to API version change. Skip deleting the keys
|
||||||
|
# that are not in the source.
|
||||||
|
# deletes = tgt_image_set.difference(src_image_set)
|
||||||
|
deletes = None
|
||||||
|
|
||||||
# Get the adds and updates
|
# Get the adds and updates
|
||||||
add_update_dict = {}
|
add_update_dict = {}
|
||||||
@ -3259,19 +3276,35 @@ class PowerVCImageManager(service.Service):
|
|||||||
# update_at dict so the change isn't processed during a periodic
|
# update_at dict so the change isn't processed during a periodic
|
||||||
# scan
|
# scan
|
||||||
if pvc_id in self.pvc_updated_at.keys():
|
if pvc_id in self.pvc_updated_at.keys():
|
||||||
|
# Fix for Bug#1814739. Handle missing custom properties for an
|
||||||
|
# image due to API version change
|
||||||
|
if isinstance(pvc_image, dict):
|
||||||
|
self.pvc_updated_at[pvc_id] = pvc_image['updated_at']
|
||||||
|
else:
|
||||||
self.pvc_updated_at[pvc_id] = pvc_image.updated_at
|
self.pvc_updated_at[pvc_id] = pvc_image.updated_at
|
||||||
|
|
||||||
# Attempt to update the entry for this image in the local
|
# Attempt to update the entry for this image in the local
|
||||||
# updated_at dict so that it is not processed during a periodic
|
# updated_at dict so that it is not processed during a periodic
|
||||||
# sync due to this update.
|
# sync due to this update.
|
||||||
if pvc_id in self.local_updated_at.keys():
|
if pvc_id in self.local_updated_at.keys():
|
||||||
|
# Fix for Bug#1814739. Handle missing custom properties for an
|
||||||
|
# image due to API version change
|
||||||
|
if isinstance(image, dict):
|
||||||
|
self.local_updated_at[pvc_id] = image['updated_at']
|
||||||
|
else:
|
||||||
self.local_updated_at[pvc_id] = image.updated_at
|
self.local_updated_at[pvc_id] = image.updated_at
|
||||||
|
|
||||||
# Set the new master image
|
# Set the new master image
|
||||||
self.master_image[pvc_id] = pvc_image
|
self.master_image[pvc_id] = pvc_image
|
||||||
|
# Fix for Bug#1814739. Handle missing custom properties for an
|
||||||
|
# image due to API version change
|
||||||
|
if isinstance(pvc_image, dict):
|
||||||
|
pvc_image_name = pvc_image['name']
|
||||||
|
else:
|
||||||
|
pvc_image_name = pvc_image.name
|
||||||
LOG.info(_('Completed update sync of image \'%s\' from PowerVC to '
|
LOG.info(_('Completed update sync of image \'%s\' from PowerVC to '
|
||||||
'the local hosting OS after an image update event'),
|
'the local hosting OS after an image update event'),
|
||||||
pvc_image.name)
|
pvc_image_name)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
LOG.exception(_('An error occurred processing the PowerVC image '
|
LOG.exception(_('An error occurred processing the PowerVC image '
|
||||||
'update event: %s'), e)
|
'update event: %s'), e)
|
||||||
@ -3470,9 +3503,15 @@ class PowerVCImageManager(service.Service):
|
|||||||
|
|
||||||
# Update the image if it is in the local hosting OS, else add it
|
# Update the image if it is in the local hosting OS, else add it
|
||||||
if local_image is not None:
|
if local_image is not None:
|
||||||
|
# Fix for Bug#1814739. Handle missing custom properties for an
|
||||||
|
# image due to API version change
|
||||||
|
if isinstance(pvc_image, dict):
|
||||||
|
pvc_image_name = pvc_image['name']
|
||||||
|
else:
|
||||||
|
pvc_image_name = pvc_image.name
|
||||||
LOG.info(_('The local hosting OS image \'%s\' with PowerVC '
|
LOG.info(_('The local hosting OS image \'%s\' with PowerVC '
|
||||||
'UUID %s already exists so it will be updated.'),
|
'UUID %s already exists so it will be updated.'),
|
||||||
pvc_image.name, pvc_id)
|
pvc_image_name, pvc_id)
|
||||||
|
|
||||||
# If this is a snapshot image, it may not have an entry in the
|
# If this is a snapshot image, it may not have an entry in the
|
||||||
# ids_dict so add one here.
|
# ids_dict so add one here.
|
||||||
@ -3525,9 +3564,15 @@ class PowerVCImageManager(service.Service):
|
|||||||
pvc_v2client.http_client.endpoint, v1local_images,
|
pvc_v2client.http_client.endpoint, v1local_images,
|
||||||
v2local_images)
|
v2local_images)
|
||||||
if image is None:
|
if image is None:
|
||||||
|
# Fix for Bug#1814739. Handle missing custom properties for an
|
||||||
|
# image due to API version change
|
||||||
|
if isinstance(pvc_image, dict):
|
||||||
|
pvc_image_name = pvc_image['name']
|
||||||
|
else:
|
||||||
|
pvc_image_name = pvc_image.name
|
||||||
LOG.error(_('Local hosting OS image \'%s\' for PowerVC'
|
LOG.error(_('Local hosting OS image \'%s\' for PowerVC'
|
||||||
'UUID %s could not be created after an '
|
'UUID %s could not be created after an '
|
||||||
'image create event.'), pvc_image.name,
|
'image create event.'), pvc_image_name,
|
||||||
pvc_id)
|
pvc_id)
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -3552,9 +3597,15 @@ class PowerVCImageManager(service.Service):
|
|||||||
# only be used if the there is an image for the UUID on hoth
|
# only be used if the there is an image for the UUID on hoth
|
||||||
# servers.
|
# servers.
|
||||||
self.master_image[pvc_id] = pvc_image
|
self.master_image[pvc_id] = pvc_image
|
||||||
|
# Fix for Bug#1814739. Handle missing custom properties for an
|
||||||
|
# image due to API version change
|
||||||
|
if isinstance(pvc_image, dict):
|
||||||
|
pvc_image_name = pvc_image['name']
|
||||||
|
else:
|
||||||
|
pvc_image_name = pvc_image.name
|
||||||
LOG.info(_('Completed add sync of image \'%s\' from PowerVC to the'
|
LOG.info(_('Completed add sync of image \'%s\' from PowerVC to the'
|
||||||
' local hosting OS after an image activate event'),
|
' local hosting OS after an image activate event'),
|
||||||
pvc_image.name)
|
pvc_image_name)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
LOG.exception(_('An error occurred processing the PowerVC image '
|
LOG.exception(_('An error occurred processing the PowerVC image '
|
||||||
'create event: %s'), e)
|
'create event: %s'), e)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user