diff --git a/rally-jobs/cinder.yaml b/rally-jobs/cinder.yaml index 0b8dce25..0446858f 100644 --- a/rally-jobs/cinder.yaml +++ b/rally-jobs/cinder.yaml @@ -480,6 +480,8 @@ - args: size: 1 + image: + name: {{image_name}} runner: type: "constant" times: 1 @@ -498,6 +500,8 @@ args: size: 1 volume_type: test + image: + name: {{image_name}} runner: type: "constant" times: 1 diff --git a/rally/plugins/openstack/scenarios/cinder/volumes.py b/rally/plugins/openstack/scenarios/cinder/volumes.py index 22d6c0dc..5ee773cd 100644 --- a/rally/plugins/openstack/scenarios/cinder/volumes.py +++ b/rally/plugins/openstack/scenarios/cinder/volumes.py @@ -433,11 +433,12 @@ class CinderVolumes(cinder_utils.CinderScenario, self._create_snapshot(volume["id"], force=force, **kwargs) self._list_snapshots(detailed) + @types.convert(image={"type": "glance_image"}) @validation.required_services(consts.Service.CINDER, consts.Service.GLANCE) @validation.required_openstack(users=True) @validation.required_parameters("size") @scenario.configure(context={"cleanup": ["cinder", "glance"]}) - def create_and_upload_volume_to_image(self, size, force=False, + def create_and_upload_volume_to_image(self, size, image=None, force=False, container_format="bare", disk_format="raw", do_delete=True, @@ -448,6 +449,7 @@ class CinderVolumes(cinder_utils.CinderScenario, dictionary, must contain two values: min - minimum size volumes will be created as; max - maximum size volumes will be created as. + :param image: image to be used to create volume. :param force: when set to True volume that is attached to an instance could be uploaded to image :param container_format: image container format @@ -455,6 +457,8 @@ class CinderVolumes(cinder_utils.CinderScenario, :param do_delete: deletes image and volume after uploading if True :param kwargs: optional args to create a volume """ + if image: + kwargs["imageRef"] = image volume = self._create_volume(size, **kwargs) image = self._upload_volume_to_image(volume, force, container_format, disk_format) diff --git a/samples/tasks/scenarios/cinder/create-and-upload-volume-to-image.json b/samples/tasks/scenarios/cinder/create-and-upload-volume-to-image.json index a721bdf2..76747619 100644 --- a/samples/tasks/scenarios/cinder/create-and-upload-volume-to-image.json +++ b/samples/tasks/scenarios/cinder/create-and-upload-volume-to-image.json @@ -6,7 +6,10 @@ "force": false, "container_format": "bare", "disk_format": "raw", - "do_delete": true + "do_delete": true, + "image": { + "name": "^cirros.*uec$" + } }, "runner": { "type": "constant", @@ -29,7 +32,10 @@ "force": false, "container_format": "bare", "disk_format": "raw", - "do_delete": true + "do_delete": true, + "image": { + "name": "^cirros.*uec$" + } }, "runner": { "type": "constant", diff --git a/samples/tasks/scenarios/cinder/create-and-upload-volume-to-image.yaml b/samples/tasks/scenarios/cinder/create-and-upload-volume-to-image.yaml index 07b93487..de73b2b0 100644 --- a/samples/tasks/scenarios/cinder/create-and-upload-volume-to-image.yaml +++ b/samples/tasks/scenarios/cinder/create-and-upload-volume-to-image.yaml @@ -7,6 +7,8 @@ container_format: "bare" disk_format: "raw" do_delete: true + image: + name: "^cirros.*uec$" runner: type: "constant" times: 3 @@ -24,6 +26,8 @@ container_format: "bare" disk_format: "raw" do_delete: true + image: + name: "^cirros.*uec$" runner: type: "constant" times: 3 @@ -31,4 +35,4 @@ context: users: tenants: 2 - users_per_tenant: 2 \ No newline at end of file + users_per_tenant: 2 diff --git a/tests/unit/plugins/openstack/scenarios/cinder/test_volumes.py b/tests/unit/plugins/openstack/scenarios/cinder/test_volumes.py index d70feaa7..14740bc3 100644 --- a/tests/unit/plugins/openstack/scenarios/cinder/test_volumes.py +++ b/tests/unit/plugins/openstack/scenarios/cinder/test_volumes.py @@ -221,12 +221,14 @@ class CinderServersTestCase(test.ScenarioTestCase): scenario._delete_volume = mock.MagicMock() scenario._delete_image = mock.MagicMock() - scenario.create_and_upload_volume_to_image(2, + scenario.create_and_upload_volume_to_image(2, image="img", container_format="fake", disk_format="disk", - do_delete=False) + do_delete=False, + fakeargs="fakeargs") - scenario._create_volume.assert_called_once_with(2) + scenario._create_volume.assert_called_once_with(2, imageRef="img", + fakeargs="fakeargs") scenario._upload_volume_to_image.assert_called_once_with(fake_volume, False, "fake", @@ -234,9 +236,11 @@ class CinderServersTestCase(test.ScenarioTestCase): scenario._create_volume.reset_mock() scenario._upload_volume_to_image.reset_mock() - scenario.create_and_upload_volume_to_image(1, do_delete=True) + scenario.create_and_upload_volume_to_image(1, image=None, + do_delete=True, + fakeargs="fakeargs") - scenario._create_volume.assert_called_once_with(1) + scenario._create_volume.assert_called_once_with(1, fakeargs="fakeargs") scenario._upload_volume_to_image.assert_called_once_with(fake_volume, False, "bare",