diff options
| author | Monty Taylor <mordred@inaugust.com> | 2018-07-23 10:19:50 -0500 |
|---|---|---|
| committer | Dean Troyer <dtroyer@gmail.com> | 2018-07-23 13:38:35 -0500 |
| commit | 3dd9613b21d78005e1c8f5b3b20b48b686459717 (patch) | |
| tree | 258de5a4163527c6b56c7772bcb93d5f30e23e13 /openstackclient | |
| parent | ee35409069b0f77984e912cfc0c90cb9cce52512 (diff) | |
| download | python-openstackclient-3dd9613b21d78005e1c8f5b3b20b48b686459717.tar.gz | |
Pass volume snapshot size to volume create
When creating a volume from a snapshot, the size parameter is required
and type is checked. Since we have to pass something and it needs to be
a valid data type (None is not acceptable) grab the size from the
snapshot object and pass it.
Change-Id: Ie23e3d23828919234e40336b5c65b22e140d337c
Diffstat (limited to 'openstackclient')
| -rw-r--r-- | openstackclient/tests/unit/volume/v2/test_volume.py | 2 | ||||
| -rw-r--r-- | openstackclient/volume/v2/volume.py | 16 |
2 files changed, 14 insertions, 4 deletions
diff --git a/openstackclient/tests/unit/volume/v2/test_volume.py b/openstackclient/tests/unit/volume/v2/test_volume.py index 2fa924b8..304aa91c 100644 --- a/openstackclient/tests/unit/volume/v2/test_volume.py +++ b/openstackclient/tests/unit/volume/v2/test_volume.py @@ -430,7 +430,7 @@ class TestVolumeCreate(TestVolume): columns, data = self.cmd.take_action(parsed_args) self.volumes_mock.create.assert_called_once_with( - size=None, + size=snapshot.size, snapshot_id=snapshot.id, name=self.new_volume.name, description=None, diff --git a/openstackclient/volume/v2/volume.py b/openstackclient/volume/v2/volume.py index 61f846b0..ee3d2f20 100644 --- a/openstackclient/volume/v2/volume.py +++ b/openstackclient/volume/v2/volume.py @@ -186,11 +186,21 @@ class CreateVolume(command.ShowOne): image_client.images, parsed_args.image).id + size = parsed_args.size + snapshot = None if parsed_args.snapshot: - snapshot = utils.find_resource( + snapshot_obj = utils.find_resource( volume_client.volume_snapshots, - parsed_args.snapshot).id + parsed_args.snapshot) + snapshot = snapshot_obj.id + # Cinder requires a value for size when creating a volume + # even if creating from a snapshot. Cinder will create the + # volume with at least the same size as the snapshot anyway, + # so since we have the object here, just override the size + # value if it's either not given or is smaller than the + # snapshot size. + size = max(size or 0, snapshot_obj.size) project = None if parsed_args.project: @@ -205,7 +215,7 @@ class CreateVolume(command.ShowOne): parsed_args.user).id volume = volume_client.volumes.create( - size=parsed_args.size, + size=size, snapshot_id=snapshot, name=parsed_args.name, description=parsed_args.description, |
