Fix image_type=base after snapshot

When an instance is snapshotted, the resultant image should have the
image_type property set to "snapshot".  However, if the base image
already had image_type set to "base", the image_type on the snapshot
will also be set to "base".  This turns out to be because we set
image properties in two different places.  The first is when the
image record is created in glance, which occurs in
nova.compute.api:API._create_image(); this is when image_type is set
to "snapshot".  However, in nova.virt.xenapi.vm_utils:upload_image(),
all the properties from the base image are copied over, so all the
properties set by _create_image() could be overwritten.

The quick solution was to extend the non_inheritable_image_properties
configuration setting to also cover the image properties set by
_create_image().  Long-term, these two metadata-setting processes
need to be more closely unified.  (It should be noted that the
upload_image() function contains a TODO stating that the code should
move into the compute manager, so it can be shared across
hypervisors…)

Fixes bug 1031079.

Change-Id: I936bc147fb823eca67e40084cba5c3bc1a7fe73a
This commit is contained in:
Kevin L. Mitchell
2012-07-30 15:59:08 -05:00
parent 4e5344374d
commit f8a01887dc

View File

@@ -415,7 +415,13 @@ global_opts = [
default='noauth',
help='The strategy to use for auth: noauth or keystone.'),
cfg.ListOpt('non_inheritable_image_properties',
default=['cache_in_nova'],
default=['cache_in_nova',
'instance_uuid',
'user_id',
'image_type',
'backup_type',
'min_ram',
'min_disk'],
help='These are image properties which a snapshot should not'
' inherit from an instance'),
]