Skip to content

Commit 7b037ca

Browse files
committed
image v1: Migrate 'create image' volume calls to SDK
Change Ie57a5c17a6df5a333abd6b11e28b65833740e102 did this for the v2 API but missed v1. Correct this now. Change-Id: I53c72cce4be38d7eb64345db29abf95d5d5ffeb7 Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
1 parent f792b88 commit 7b037ca

3 files changed

Lines changed: 39 additions & 49 deletions

File tree

openstackclient/image/v1/image.py

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -297,19 +297,17 @@ def take_action(
297297

298298
if not parsed_args.location and not parsed_args.copy_from:
299299
if parsed_args.volume:
300-
volume_client = self.app.client_manager.volume
301-
source_volume = utils.find_resource(
302-
volume_client.volumes,
303-
parsed_args.volume,
300+
volume_client = self.app.client_manager.sdk_connection.volume
301+
source_volume = volume_client.find_volume(
302+
parsed_args.volume, ignore_missing=False
304303
)
305-
_response, body = volume_client.volumes.upload_to_image(
306-
source_volume.id,
307-
parsed_args.force,
304+
info = source_volume.upload_to_image(
305+
volume_client,
308306
parsed_args.name,
309-
parsed_args.container_format,
310-
parsed_args.disk_format,
307+
force=parsed_args.force,
308+
container_format=parsed_args.container_format,
309+
disk_format=parsed_args.disk_format,
311310
)
312-
info = body['os-volume_upload_image']
313311
elif parsed_args.file:
314312
# Send an open file handle to glanceclient so it will
315313
# do a chunked transfer
@@ -764,21 +762,22 @@ def take_action(self, parsed_args: argparse.Namespace) -> None:
764762

765763
if not parsed_args.location and not parsed_args.copy_from:
766764
if parsed_args.volume:
767-
volume_client = self.app.client_manager.volume
768-
source_volume = utils.find_resource(
769-
volume_client.volumes,
770-
parsed_args.volume,
765+
volume_client = (
766+
self.app.client_manager.sdk_connection.volume
771767
)
772-
volume_client.volumes.upload_to_image(
773-
source_volume.id,
774-
parsed_args.force,
768+
source_volume = volume_client.find_volume(
769+
parsed_args.volume, ignore_missing=False
770+
)
771+
source_volume.upload_to_image(
772+
volume_client,
775773
parsed_args.image,
776-
(
774+
force=parsed_args.force,
775+
container_format=(
777776
parsed_args.container_format
778777
if parsed_args.container_format
779778
else image.container_format
780779
),
781-
(
780+
disk_format=(
782781
parsed_args.disk_format
783782
if parsed_args.disk_format
784783
else image.disk_format

openstackclient/tests/unit/image/v1/fakes.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from unittest import mock
1616
import uuid
1717

18+
from openstack.block_storage.v2 import _proxy as block_storage_v2_proxy
1819
from openstack.image.v1 import _proxy
1920
from openstack.image.v1 import image
2021

@@ -41,6 +42,12 @@ def setUp(self):
4142
)
4243
self.volume_client = self.app.client_manager.volume
4344

45+
self.app.client_manager.sdk_connection.volume = mock.Mock(
46+
spec=block_storage_v2_proxy.Proxy,
47+
)
48+
self.app.client_manager.sdk_connection.volume.api_version = '2'
49+
self.volume_sdk_client = self.app.client_manager.sdk_connection.volume
50+
4451

4552
def create_one_image(attrs=None):
4653
"""Create a fake image.

openstackclient/tests/unit/image/v1/test_image.py

Lines changed: 14 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,11 @@
1515
import copy
1616
from unittest import mock
1717

18+
from openstack.block_storage.v2 import volume as _volume
19+
from openstack.test import fakes as sdk_fakes
1820
from osc_lib.cli import format_columns
1921

2022
from openstackclient.image.v1 import image
21-
from openstackclient.tests.unit import fakes
2223
from openstackclient.tests.unit.image.v1 import fakes as image_fakes
2324

2425

@@ -591,27 +592,8 @@ def test_image_set_properties(self):
591592
self.assertIsNone(result)
592593

593594
def test_image_update_volume(self):
594-
# Set up VolumeManager Mock
595-
volumes_mock = self.volume_client.volumes
596-
volumes_mock.reset_mock()
597-
volumes_mock.get.return_value = fakes.FakeResource(
598-
None,
599-
copy.deepcopy({'id': 'vol1', 'name': 'volly'}),
600-
loaded=True,
601-
)
602-
response = {
603-
"id": 'volume_id',
604-
"updated_at": 'updated_at',
605-
"status": 'uploading',
606-
"display_description": 'desc',
607-
"size": 'size',
608-
"volume_type": 'volume_type',
609-
"container_format": image.DEFAULT_CONTAINER_FORMAT,
610-
"disk_format": image.DEFAULT_DISK_FORMAT,
611-
"image": self._image.name,
612-
}
613-
full_response = {"os-volume_upload_image": response}
614-
volumes_mock.upload_to_image.return_value = (201, full_response)
595+
source_volume = sdk_fakes.generate_fake_resource(_volume.Volume)
596+
self.volume_sdk_client.find_volume.return_value = source_volume
615597

616598
arglist = [
617599
'--volume',
@@ -632,18 +614,20 @@ def test_image_update_volume(self):
632614
]
633615
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
634616

617+
source_volume.upload_to_image = mock.Mock()
618+
635619
result = self.cmd.take_action(parsed_args)
636620

637-
# VolumeManager.upload_to_image(volume, force, image_name,
638-
# container_format, disk_format)
639-
volumes_mock.upload_to_image.assert_called_with(
640-
'vol1',
641-
False,
621+
self.volume_sdk_client.find_volume.assert_called_once_with(
622+
'volly', ignore_missing=False
623+
)
624+
source_volume.upload_to_image.assert_called_once_with(
625+
self.volume_sdk_client,
642626
self._image.name,
643-
'',
644-
'',
627+
force=False,
628+
container_format=self._image.container_format,
629+
disk_format=self._image.disk_format,
645630
)
646-
# ImageManager.update(image_id, remove_props=, **)
647631
self.image_client.update_image.assert_called_with(
648632
self._image.id,
649633
name='updated_image',

0 commit comments

Comments
 (0)