Skip to content

Commit 9acbd3e

Browse files
author
Thrivikram Mudunuri
committed
Switch server image create to SDK
Switch the server image create command from novaclient to SDK. Use the SDK versions of test fakes to support fake Server resources. Also, fetch updated image *after* waiting. If a user requests that we wait (--wait) for a server image to become active before returning, then we should probably return the final image. If we don't then the image can appear to be in a non-active state when it fact it's active. Correct this by fetching the image after the wait call. Change-Id: I83a403c035add9ab041ed6d59b5b29e42267f143
1 parent f824e13 commit 9acbd3e

3 files changed

Lines changed: 25 additions & 24 deletions

File tree

openstackclient/compute/v2/server_image.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -73,25 +73,23 @@ def _show_progress(progress):
7373
self.app.stdout.write('\rProgress: %s' % progress)
7474
self.app.stdout.flush()
7575

76-
compute_client = self.app.client_manager.compute
76+
compute_client = self.app.client_manager.sdk_connection.compute
77+
image_client = self.app.client_manager.image
7778

78-
server = utils.find_resource(
79-
compute_client.servers,
80-
parsed_args.server,
79+
server = compute_client.find_server(
80+
parsed_args.server, ignore_missing=False,
8181
)
82+
8283
if parsed_args.name:
8384
image_name = parsed_args.name
8485
else:
8586
image_name = server.name
8687

87-
image_id = compute_client.servers.create_image(
88+
image_id = compute_client.create_server_image(
8889
server.id,
8990
image_name,
9091
parsed_args.properties,
91-
)
92-
93-
image_client = self.app.client_manager.image
94-
image = image_client.find_image(image_id)
92+
).id
9593

9694
if parsed_args.wait:
9795
if utils.wait_for_status(
@@ -105,6 +103,8 @@ def _show_progress(progress):
105103
_('Error creating server image: %s'), parsed_args.server)
106104
raise exceptions.CommandError
107105

106+
image = image_client.find_image(image_id, ignore_missing=False)
107+
108108
if self.app.client_manager._api_version['image'] == '1':
109109
info = {}
110110
info.update(image._info)

openstackclient/tests/unit/compute/v2/test_server_image.py

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,9 @@ def setUp(self):
2727
super(TestServerImage, self).setUp()
2828

2929
# Get a shortcut to the compute client ServerManager Mock
30-
self.servers_mock = self.app.client_manager.compute.servers
31-
self.servers_mock.reset_mock()
30+
self.app.client_manager.sdk_connection = mock.Mock()
31+
self.app.client_manager.sdk_connection.compute = mock.Mock()
32+
self.sdk_client = self.app.client_manager.sdk_connection.compute
3233

3334
# Get a shortcut to the image client ImageManager Mock
3435
self.images_mock = self.app.client_manager.image
@@ -41,14 +42,14 @@ def setUp(self):
4142
self.methods = {}
4243

4344
def setup_servers_mock(self, count):
44-
servers = compute_fakes.FakeServer.create_servers(
45+
servers = compute_fakes.FakeServer.create_sdk_servers(
4546
attrs=self.attrs,
4647
methods=self.methods,
4748
count=count,
4849
)
4950

50-
# This is the return value for utils.find_resource()
51-
self.servers_mock.get = compute_fakes.FakeServer.get_servers(
51+
# This is the return value for compute_client.find_server()
52+
self.sdk_client.find_server = compute_fakes.FakeServer.get_servers(
5253
servers,
5354
0,
5455
)
@@ -104,8 +105,8 @@ def setup_images_mock(self, count, servers=None):
104105
)
105106

106107
self.images_mock.find_image = mock.Mock(side_effect=images)
107-
self.servers_mock.create_image = mock.Mock(
108-
return_value=images[0].id,
108+
self.sdk_client.create_server_image = mock.Mock(
109+
return_value=images[0],
109110
)
110111
return images
111112

@@ -126,8 +127,7 @@ def test_server_image_create_defaults(self):
126127
# data to be shown.
127128
columns, data = self.cmd.take_action(parsed_args)
128129

129-
# ServerManager.create_image(server, image_name, metadata=)
130-
self.servers_mock.create_image.assert_called_with(
130+
self.sdk_client.create_server_image.assert_called_with(
131131
servers[0].id,
132132
servers[0].name,
133133
None,
@@ -157,8 +157,7 @@ def test_server_image_create_options(self):
157157
# data to be shown.
158158
columns, data = self.cmd.take_action(parsed_args)
159159

160-
# ServerManager.create_image(server, image_name, metadata=)
161-
self.servers_mock.create_image.assert_called_with(
160+
self.sdk_client.create_server_image.assert_called_with(
162161
servers[0].id,
163162
'img-nam',
164163
{'key': 'value'},
@@ -188,8 +187,7 @@ def test_server_create_image_wait_fail(self, mock_wait_for_status):
188187
parsed_args,
189188
)
190189

191-
# ServerManager.create_image(server, image_name, metadata=)
192-
self.servers_mock.create_image.assert_called_with(
190+
self.sdk_client.create_server_image.assert_called_with(
193191
servers[0].id,
194192
servers[0].name,
195193
None,
@@ -221,8 +219,7 @@ def test_server_create_image_wait_ok(self, mock_wait_for_status):
221219
# data to be shown.
222220
columns, data = self.cmd.take_action(parsed_args)
223221

224-
# ServerManager.create_image(server, image_name, metadata=)
225-
self.servers_mock.create_image.assert_called_with(
222+
self.sdk_client.create_server_image.assert_called_with(
226223
servers[0].id,
227224
servers[0].name,
228225
None,
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
features:
3+
- |
4+
Migrate openstack server image create from novaclient to sdk.

0 commit comments

Comments
 (0)