From ae7adbb92babf2dfc928daa76474aaba8e325d9c Mon Sep 17 00:00:00 2001 From: Rick Harris Date: Fri, 20 Jul 2012 22:35:10 +0000 Subject: Adds non_inheritable_image_properties flag. Some image-properties should not be inherited from the instance when taking a snapshot because we want that functionality to only available for the base-image, not subsequent snapshots. As an example, we would like 'cache_in_nova' fast-cloning to be available just for base-images and not customer snapshots created off a base-image. This patch adds a new configuration which allows operators to, at runtime, select which image-properties should not be inherited by newly created snapshots. Change-Id: I8d7781b05ffd71a59ba69fb7c3df4616cba94cce --- nova/flags.py | 4 ++++ nova/virt/xenapi/vm_utils.py | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/nova/flags.py b/nova/flags.py index 5291f08f1..23e42bd30 100644 --- a/nova/flags.py +++ b/nova/flags.py @@ -414,6 +414,10 @@ global_opts = [ cfg.StrOpt('auth_strategy', default='noauth', help='The strategy to use for auth: noauth or keystone.'), + cfg.ListOpt('non_inheritable_image_properties', + default=['cache_in_nova'], + help='These are image properties which a snapshot should not' + ' inherit from an instance'), ] FLAGS.register_opts(global_opts) diff --git a/nova/virt/xenapi/vm_utils.py b/nova/virt/xenapi/vm_utils.py index d028379cf..27065e471 100644 --- a/nova/virt/xenapi/vm_utils.py +++ b/nova/virt/xenapi/vm_utils.py @@ -567,12 +567,16 @@ def upload_image(context, session, instance, vdi_uuids, image_id): glance_host, glance_port = glance.pick_glance_api_server() + # TODO(sirp): this inherit-image-property code should probably go in + # nova/compute/manager so it can be shared across hypervisors sys_meta = db.instance_system_metadata_get(context, instance['uuid']) properties = {} prefix = 'image_' for key, value in sys_meta.iteritems(): if key.startswith(prefix): key = key[len(prefix):] + if key in FLAGS.non_inheritable_image_properties: + continue properties[key] = value properties['auto_disk_config'] = instance.auto_disk_config properties['os_type'] = instance.os_type or FLAGS.default_os_type -- cgit