diff options
-rw-r--r-- | nova/flags.py | 9 | ||||
-rw-r--r-- | nova/virt/xenapi/vm_utils.py | 28 |
2 files changed, 31 insertions, 6 deletions
diff --git a/nova/flags.py b/nova/flags.py index 25d5e0be7..bc05901a3 100644 --- a/nova/flags.py +++ b/nova/flags.py @@ -406,9 +406,12 @@ global_opts = [ cfg.ListOpt('isolated_hosts', default=[], help='Host reserved for specific images'), - cfg.BoolOpt('cache_images', - default=True, - help='Cache glance images locally'), + cfg.StrOpt('cache_images', + default='all', + help='Cache glance images locally. `all` will cache all' + ' images, `some` will only cache images that have the' + ' image_property `cache_in_nova=True`, and `none` turns' + ' off caching entirely'), cfg.BoolOpt('use_cow_images', default=True, help='Whether to use cow images'), diff --git a/nova/virt/xenapi/vm_utils.py b/nova/virt/xenapi/vm_utils.py index 69478d34f..1eb56b880 100644 --- a/nova/virt/xenapi/vm_utils.py +++ b/nova/virt/xenapi/vm_utils.py @@ -36,6 +36,7 @@ from eventlet import greenthread from nova.compute import instance_types from nova.compute import power_state +from nova import db from nova import exception from nova import flags from nova.image import glance @@ -677,12 +678,33 @@ def create_image(context, session, instance, image_id, image_type): Returns: A list of dictionaries that describe VDIs """ - if FLAGS.cache_images and image_type != ImageType.DISK_ISO: + cache_images = FLAGS.cache_images.lower() + + # Deterimine if the image is cacheable + if image_type == ImageType.DISK_ISO: + cache = False + elif cache_images == 'all': + cache = True + elif cache_images == 'some': + # FIXME(sirp): This should be eager loaded like instance metadata + sys_meta = db.instance_system_metadata_get(context, + instance['uuid']) + try: + cache = utils.bool_from_str(sys_meta['image_cache_in_nova']) + except KeyError: + cache = False + elif cache_images == 'none': + cache = False + else: + LOG.warning(_("Unrecognized cache_images value '%s', defaulting to" + " True"), FLAGS.cache_images) + cache = True + + # Fetch (and cache) the image + if cache: vdis = _create_cached_image( context, session, instance, image_id, image_type) else: - # If caching is disabled, we do not have to keep a copy of the - # image. Fetch the image from glance. vdis = fetch_image( context, session, instance, image_id, image_type) |