Support create_volume_kwargs for relevant scenarios
In some scenarios, rally creates a volume first and then it spins up a VM using this volume. Depending on the cloud configuration, there is a chance that volume will be created in a different availability zone than a VM which will lead to failure. In some tests like 'boot_server_from_volume_and_resize' there already is a support for 'create_volume_kwargs' and 'boot_server_kwargs' which provide a way to define extra arguments for both volume and server creation. This patch implements 'create_volume_kwargs' and 'boot_server_kwargs' for scenarios that may require it. It allows to explicitly define availability zone when creating volume and a server. 'kwargs' argument in these scenarios was deprecated in favor of 'create_volume_kwargs' and 'boot_server_kwargs' but it's still supported for backward compatiblity. Change-Id: Ib43fa522e07afece38541d03ce70da87d8c836e4
This commit is contained in:
@@ -166,7 +166,8 @@ class BootServerFromVolumeAndDelete(utils.NovaScenario,
|
||||
cinder_utils.CinderBasic):
|
||||
|
||||
def run(self, image, flavor, volume_size, volume_type=None,
|
||||
min_sleep=0, max_sleep=0, force_delete=False, **kwargs):
|
||||
min_sleep=0, max_sleep=0, force_delete=False,
|
||||
create_volume_kwargs=None, boot_server_kwargs=None, **kwargs):
|
||||
"""Boot a server from volume and then delete it.
|
||||
|
||||
The scenario first creates a volume and then a server.
|
||||
@@ -182,14 +183,21 @@ class BootServerFromVolumeAndDelete(utils.NovaScenario,
|
||||
:param min_sleep: Minimum sleep time in seconds (non-negative)
|
||||
:param max_sleep: Maximum sleep time in seconds (non-negative)
|
||||
:param force_delete: True if force_delete should be used
|
||||
:param boot_server_kwargs: optional arguments for VM creation
|
||||
:param create_volume_kwargs: optional arguments for volume creation
|
||||
:param kwargs: Optional additional arguments for server creation
|
||||
(deprecated)
|
||||
"""
|
||||
boot_server_kwargs = boot_server_kwargs or kwargs
|
||||
create_volume_kwargs = create_volume_kwargs or {}
|
||||
|
||||
volume = self.cinder.create_volume(volume_size, imageRef=image,
|
||||
volume_type=volume_type)
|
||||
volume_type=volume_type,
|
||||
**create_volume_kwargs)
|
||||
block_device_mapping = {"vda": "%s:::0" % volume.id}
|
||||
server = self._boot_server(None, flavor,
|
||||
block_device_mapping=block_device_mapping,
|
||||
**kwargs)
|
||||
**boot_server_kwargs)
|
||||
self.sleep_between(min_sleep, max_sleep)
|
||||
self._delete_server(server, force=force_delete)
|
||||
|
||||
@@ -339,7 +347,9 @@ class BootServer(utils.NovaScenario):
|
||||
class BootServerFromVolume(utils.NovaScenario, cinder_utils.CinderBasic):
|
||||
|
||||
def run(self, image, flavor, volume_size,
|
||||
volume_type=None, auto_assign_nic=False, **kwargs):
|
||||
volume_type=None, auto_assign_nic=False,
|
||||
create_volume_kwargs=None, boot_server_kwargs=None,
|
||||
**kwargs):
|
||||
"""Boot a server from volume.
|
||||
|
||||
The scenario first creates a volume and then a server.
|
||||
@@ -351,14 +361,22 @@ class BootServerFromVolume(utils.NovaScenario, cinder_utils.CinderBasic):
|
||||
:param volume_type: specifies volume type when there are
|
||||
multiple backends
|
||||
:param auto_assign_nic: True if NICs should be assigned
|
||||
:param boot_server_kwargs: optional arguments for VM creation
|
||||
:param create_volume_kwargs: optional arguments for volume creation
|
||||
:param kwargs: Optional additional arguments for server creation
|
||||
(deprecated)
|
||||
"""
|
||||
|
||||
boot_server_kwargs = boot_server_kwargs or kwargs
|
||||
create_volume_kwargs = create_volume_kwargs or {}
|
||||
|
||||
volume = self.cinder.create_volume(volume_size, imageRef=image,
|
||||
volume_type=volume_type)
|
||||
volume_type=volume_type,
|
||||
**create_volume_kwargs)
|
||||
block_device_mapping = {"vda": "%s:::0" % volume.id}
|
||||
self._boot_server(None, flavor, auto_assign_nic=auto_assign_nic,
|
||||
block_device_mapping=block_device_mapping,
|
||||
**kwargs)
|
||||
**boot_server_kwargs)
|
||||
|
||||
|
||||
@types.convert(image={"type": "glance_image"},
|
||||
@@ -794,7 +812,8 @@ class BootServerFromVolumeAndLiveMigrate(utils.NovaScenario,
|
||||
|
||||
def run(self, image, flavor, volume_size, volume_type=None,
|
||||
block_migration=False, disk_over_commit=False, force_delete=False,
|
||||
min_sleep=0, max_sleep=0, **kwargs):
|
||||
min_sleep=0, max_sleep=0, create_volume_kwargs=None,
|
||||
boot_server_kwargs=None, **kwargs):
|
||||
"""Boot a server from volume and then migrate it.
|
||||
|
||||
The scenario first creates a volume and a server booted from
|
||||
@@ -817,14 +836,21 @@ class BootServerFromVolumeAndLiveMigrate(utils.NovaScenario,
|
||||
:param force_delete: True if force_delete should be used
|
||||
:param min_sleep: Minimum sleep time in seconds (non-negative)
|
||||
:param max_sleep: Maximum sleep time in seconds (non-negative)
|
||||
:param boot_server_kwargs: optional arguments for VM creation
|
||||
:param create_volume_kwargs: optional arguments for volume creation
|
||||
:param kwargs: Optional additional arguments for server creation
|
||||
(deprecated)
|
||||
"""
|
||||
boot_server_kwargs = boot_server_kwargs or kwargs
|
||||
create_volume_kwargs = create_volume_kwargs or {}
|
||||
|
||||
volume = self.cinder.create_volume(volume_size, imageRef=image,
|
||||
volume_type=volume_type)
|
||||
volume_type=volume_type,
|
||||
**create_volume_kwargs)
|
||||
block_device_mapping = {"vda": "%s:::0" % volume.id}
|
||||
server = self._boot_server(None, flavor,
|
||||
block_device_mapping=block_device_mapping,
|
||||
**kwargs)
|
||||
**boot_server_kwargs)
|
||||
self.sleep_between(min_sleep, max_sleep)
|
||||
|
||||
self._live_migrate(server, block_migration, disk_over_commit)
|
||||
@@ -1129,7 +1155,8 @@ class BootServerFromVolumeSnapshot(utils.NovaScenario,
|
||||
cinder_utils.CinderBasic):
|
||||
|
||||
def run(self, image, flavor, volume_size, volume_type=None,
|
||||
auto_assign_nic=False, **kwargs):
|
||||
auto_assign_nic=False, create_volume_kwargs=None,
|
||||
boot_server_kwargs=None, **kwargs):
|
||||
"""Boot a server from a snapshot.
|
||||
|
||||
The scenario first creates a volume and creates a
|
||||
@@ -1143,15 +1170,22 @@ class BootServerFromVolumeSnapshot(utils.NovaScenario,
|
||||
:param volume_type: specifies volume type when there are
|
||||
multiple backends
|
||||
:param auto_assign_nic: True if NICs should be assigned
|
||||
:param boot_server_kwargs: optional arguments for VM creation
|
||||
:param create_volume_kwargs: optional arguments for volume creation
|
||||
:param kwargs: Optional additional arguments for server creation
|
||||
(deprecated)
|
||||
"""
|
||||
boot_server_kwargs = boot_server_kwargs or kwargs
|
||||
create_volume_kwargs = create_volume_kwargs or {}
|
||||
|
||||
volume = self.cinder.create_volume(volume_size, imageRef=image,
|
||||
volume_type=volume_type)
|
||||
volume_type=volume_type,
|
||||
**create_volume_kwargs)
|
||||
snapshot = self.cinder.create_snapshot(volume.id, force=False)
|
||||
block_device_mapping = {"vda": "%s:snap::1" % snapshot.id}
|
||||
self._boot_server(None, flavor, auto_assign_nic=auto_assign_nic,
|
||||
block_device_mapping=block_device_mapping,
|
||||
**kwargs)
|
||||
**boot_server_kwargs)
|
||||
|
||||
|
||||
@logging.log_deprecated_args(
|
||||
|
||||
Reference in New Issue
Block a user