diff options
-rw-r--r-- | nova/tests/unit/virt/vmwareapi/test_vmops.py | 17 | ||||
-rw-r--r-- | nova/virt/vmwareapi/vmops.py | 33 |
2 files changed, 43 insertions, 7 deletions
diff --git a/nova/tests/unit/virt/vmwareapi/test_vmops.py b/nova/tests/unit/virt/vmwareapi/test_vmops.py index dc6493d985..3e1f3f7235 100644 --- a/nova/tests/unit/virt/vmwareapi/test_vmops.py +++ b/nova/tests/unit/virt/vmwareapi/test_vmops.py @@ -1469,3 +1469,20 @@ class VMwareVMOpsTestCase(test.NoDBTestCase): pbm_default_policy='default-policy', group='vmware') extra_specs = self._vmops._get_extra_specs(flavor) self.assertEqual('flavor-policy', extra_specs.storage_policy) + + def test_get_base_folder_not_set(self): + self.flags(image_cache_subdirectory_name='vmware_base') + base_folder = self._vmops._get_base_folder() + self.assertEqual('vmware_base', base_folder) + + def test_get_base_folder_host_ip(self): + self.flags(my_ip='7.7.7.7', + image_cache_subdirectory_name='_base') + base_folder = self._vmops._get_base_folder() + self.assertEqual('7.7.7.7_base', base_folder) + + def test_get_base_folder_cache_prefix(self): + self.flags(cache_prefix='my_prefix', group='vmware') + self.flags(image_cache_subdirectory_name='_base') + base_folder = self._vmops._get_base_folder() + self.assertEqual('my_prefix_base', base_folder) diff --git a/nova/virt/vmwareapi/vmops.py b/nova/virt/vmwareapi/vmops.py index d8d7a60442..df7ec380ec 100644 --- a/nova/virt/vmwareapi/vmops.py +++ b/nova/virt/vmwareapi/vmops.py @@ -57,8 +57,19 @@ from nova.virt.vmwareapi import vif as vmwarevif from nova.virt.vmwareapi import vim_util from nova.virt.vmwareapi import vm_util +vmops_opts = [ + cfg.StrOpt('cache_prefix', + help='The prefix for Where cached images are stored. This is ' + 'NOT the full path - just a folder prefix. ' + 'This should only be used when a datastore cache should ' + 'be shared between compute nodes. Note: this should only ' + 'be used when the compute nodes have a shared file ' + 'system.'), + ] CONF = cfg.CONF +CONF.register_opts(vmops_opts, 'vmware') + CONF.import_opt('image_cache_subdirectory_name', 'nova.virt.imagecache') CONF.import_opt('remove_unused_base_images', 'nova.virt.imagecache') CONF.import_opt('vnc_enabled', 'nova.vnc') @@ -151,13 +162,7 @@ class VMwareVMOps(object): self._root_resource_pool = vm_util.get_res_pool_ref(self._session, self._cluster) self._datastore_regex = datastore_regex - # Ensure that the base folder is unique per compute node - if CONF.remove_unused_base_images: - self._base_folder = '%s%s' % (CONF.my_ip, - CONF.image_cache_subdirectory_name) - else: - # Aging disable ensures backward compatibility - self._base_folder = CONF.image_cache_subdirectory_name + self._base_folder = self._get_base_folder() self._tmp_folder = 'vmware_temp' self._rescue_suffix = '-rescue' self._migrate_suffix = '-orig' @@ -166,6 +171,20 @@ class VMwareVMOps(object): self._imagecache = imagecache.ImageCacheManager(self._session, self._base_folder) + def _get_base_folder(self): + # Enable more than one compute node to run on the same host + if CONF.vmware.cache_prefix: + base_folder = '%s%s' % (CONF.vmware.cache_prefix, + CONF.image_cache_subdirectory_name) + # Ensure that the base folder is unique per compute node + elif CONF.remove_unused_base_images: + base_folder = '%s%s' % (CONF.my_ip, + CONF.image_cache_subdirectory_name) + else: + # Aging disable ensures backward compatibility + base_folder = CONF.image_cache_subdirectory_name + return base_folder + def _extend_virtual_disk(self, instance, requested_size, name, dc_ref): service_content = self._session.vim.service_content LOG.debug("Extending root virtual disk to %s", requested_size) |