diff --git a/cinder/tests/unit/volume/drivers/vmware/test_vmware_vmdk.py b/cinder/tests/unit/volume/drivers/vmware/test_vmware_vmdk.py index d17a95068e3..c417858fd61 100644 --- a/cinder/tests/unit/volume/drivers/vmware/test_vmware_vmdk.py +++ b/cinder/tests/unit/volume/drivers/vmware/test_vmware_vmdk.py @@ -97,6 +97,7 @@ class VMwareVcVmdkDriverTestCase(test.TestCase): self._config.vmware_connection_pool_size = self.POOL_SIZE self._config.vmware_adapter_type = self.ADAPTER_TYPE self._config.vmware_snapshot_format = self.SNAPSHOT_FORMAT + self._config.vmware_lazy_create = True self._db = mock.Mock() self._driver = vmdk.VMwareVcVmdkDriver(configuration=self._config, @@ -169,6 +170,14 @@ class VMwareVcVmdkDriverTestCase(test.TestCase): verify_volume_creation.assert_called_once_with(volume) + @mock.patch.object(VMDK_DRIVER, '_create_backing') + def test_create_volume_with_lazy_create_disabled(self, create_backing): + self._config.vmware_lazy_create = False + volume = self._create_volume_dict() + self._driver.create_volume(volume) + + create_backing.assert_called_once_with(volume) + @mock.patch.object(VMDK_DRIVER, 'volumeops') def test_delete_volume_without_backing(self, vops): vops.get_backing.return_value = None diff --git a/cinder/volume/drivers/vmware/vmdk.py b/cinder/volume/drivers/vmware/vmdk.py index 72ee32fc5bb..88b540daabd 100644 --- a/cinder/volume/drivers/vmware/vmdk.py +++ b/cinder/volume/drivers/vmware/vmdk.py @@ -144,6 +144,12 @@ vmdk_opts = [ choices=['template', 'COW'], default='template', help='Volume snapshot format in vCenter server.'), + cfg.BoolOpt('vmware_lazy_create', + default=True, + help='If true, the backend volume in vCenter server is created' + ' lazily when the volume is created without any source. ' + 'The backend volume is created when the volume is ' + 'attached, uploaded to image service or during backup.'), ] CONF = cfg.CONF @@ -251,7 +257,8 @@ class VMwareVcVmdkDriver(driver.VolumeDriver): # support for revert-to-snapshot # improve scalability of querying volumes in backend (bug 1600754) # 3.1.0 - support adapter type change using retype - VERSION = '3.1.0' + # 3.2.0 - config option to disable lazy creation of backend volume + VERSION = '3.2.0' # ThirdPartySystems wiki page CI_WIKI_NAME = "VMware_CI" @@ -355,7 +362,10 @@ class VMwareVcVmdkDriver(driver.VolumeDriver): :param volume: Volume object """ - self._verify_volume_creation(volume) + if self.configuration.vmware_lazy_create: + self._verify_volume_creation(volume) + else: + self._create_backing(volume) def _delete_volume(self, volume): """Delete the volume backing if it is present. diff --git a/releasenotes/notes/vmware_lazy_create-52f52f71105d2067.yaml b/releasenotes/notes/vmware_lazy_create-52f52f71105d2067.yaml new file mode 100644 index 00000000000..e90520c323f --- /dev/null +++ b/releasenotes/notes/vmware_lazy_create-52f52f71105d2067.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + VMware VMDK driver now supports a config option + ``vmware_lazy_create`` to disable the default behavior of + lazy creation of raw volumes in the backend.