Skip to content

Commit e05d39a

Browse files
committed
Switch console url show operations to SDK
Switch from using novaclient to SDK for openstack console url show operation. Depends-On: https://review.opendev.org/756286 Change-Id: Ibe247825148788c549c2c1e991aae92338cdf557
1 parent 66f5fa1 commit e05d39a

4 files changed

Lines changed: 54 additions & 75 deletions

File tree

lower-constraints.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ asn1crypto==0.23.0
55
bandit==1.1.0
66
cachetools==2.0.0
77
cffi==1.14.0
8-
cliff==2.8.0
8+
cliff==3.4.0
99
cmd2==0.8.0
1010
contextlib2==0.4.0
1111
coverage==4.0
@@ -48,7 +48,7 @@ netifaces==0.10.4
4848
openstacksdk==0.48.0
4949
os-service-types==1.7.0
5050
os-testr==1.0.0
51-
osc-lib==2.0.0
51+
osc-lib==2.2.0
5252
osc-placement==1.7.0
5353
oslo.concurrency==3.26.0
5454
oslo.config==5.2.0

openstackclient/compute/v2/console.py

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,15 @@
2222
from openstackclient.i18n import _
2323

2424

25+
def _get_console_columns(item):
26+
# To maintain backwards compatibility we need to rename sdk props to
27+
# whatever OSC was using before
28+
column_map = {}
29+
hidden_columns = ['id', 'links', 'location', 'name']
30+
return utils.get_osc_show_columns_for_sdk_resource(
31+
item, column_map, hidden_columns)
32+
33+
2534
class ShowConsoleLog(command.Command):
2635
_description = _("Show server's console output")
2736

@@ -119,21 +128,15 @@ def get_parser(self, prog_name):
119128
return parser
120129

121130
def take_action(self, parsed_args):
122-
compute_client = self.app.client_manager.compute
123-
server = utils.find_resource(
124-
compute_client.servers,
131+
compute_client = self.app.client_manager.sdk_connection.compute
132+
server = compute_client.find_server(
125133
parsed_args.server,
126-
)
134+
ignore_missing=False)
135+
136+
data = compute_client.create_console(server.id,
137+
console_type=parsed_args.url_type)
138+
139+
display_columns, columns = _get_console_columns(data)
140+
data = utils.get_dict_properties(data, columns)
127141

128-
data = server.get_console_url(parsed_args.url_type)
129-
if not data:
130-
return ({}, {})
131-
132-
info = {}
133-
# NOTE(Rui Chen): Return 'remote_console' in compute microversion API
134-
# 2.6 and later, return 'console' in compute
135-
# microversion API from 2.0 to 2.5, do compatibility
136-
# handle for different microversion API.
137-
console_data = data.get('remote_console', data.get('console'))
138-
info.update(console_data)
139-
return zip(*sorted(info.items()))
142+
return (display_columns, data)

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

Lines changed: 31 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,6 @@ def setUp(self):
3232
self.sdk_client.find_server = mock.Mock()
3333
self.sdk_client.get_server_console_output = mock.Mock()
3434

35-
self.servers_mock = self.app.client_manager.compute.servers
36-
self.servers_mock.reset_mock()
37-
3835

3936
class TestConsoleLog(TestConsole):
4037
_server = compute_fakes.FakeServer.create_one_server()
@@ -107,28 +104,26 @@ def test_show_lines(self):
107104

108105

109106
class TestConsoleUrlShow(TestConsole):
107+
_server = compute_fakes.FakeServer.create_one_server()
110108

111109
def setUp(self):
112110
super(TestConsoleUrlShow, self).setUp()
113-
fake_console_data = {'remote_console': {'url': 'http://localhost',
114-
'protocol': 'fake_protocol',
115-
'type': 'fake_type'}}
116-
methods = {
117-
'get_console_url': fake_console_data
118-
}
119-
self.fake_server = compute_fakes.FakeServer.create_one_server(
120-
methods=methods)
121-
self.servers_mock.get.return_value = self.fake_server
111+
self.sdk_client.find_server.return_value = self._server
112+
fake_console_data = {'url': 'http://localhost',
113+
'protocol': 'fake_protocol',
114+
'type': 'fake_type'}
115+
self.sdk_client.create_console = mock.Mock(
116+
return_value=fake_console_data)
122117

123118
self.columns = (
124119
'protocol',
125120
'type',
126121
'url',
127122
)
128123
self.data = (
129-
fake_console_data['remote_console']['protocol'],
130-
fake_console_data['remote_console']['type'],
131-
fake_console_data['remote_console']['url']
124+
fake_console_data['protocol'],
125+
fake_console_data['type'],
126+
fake_console_data['url']
132127
)
133128

134129
self.cmd = console.ShowConsoleURL(self.app, None)
@@ -143,7 +138,9 @@ def test_console_url_show_by_default(self):
143138
]
144139
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
145140
columns, data = self.cmd.take_action(parsed_args)
146-
self.fake_server.get_console_url.assert_called_once_with('novnc')
141+
self.sdk_client.create_console.assert_called_once_with(
142+
self._server.id,
143+
console_type='novnc')
147144
self.assertEqual(self.columns, columns)
148145
self.assertEqual(self.data, data)
149146

@@ -158,7 +155,9 @@ def test_console_url_show_with_novnc(self):
158155
]
159156
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
160157
columns, data = self.cmd.take_action(parsed_args)
161-
self.fake_server.get_console_url.assert_called_once_with('novnc')
158+
self.sdk_client.create_console.assert_called_once_with(
159+
self._server.id,
160+
console_type='novnc')
162161
self.assertEqual(self.columns, columns)
163162
self.assertEqual(self.data, data)
164163

@@ -173,7 +172,9 @@ def test_console_url_show_with_xvpvnc(self):
173172
]
174173
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
175174
columns, data = self.cmd.take_action(parsed_args)
176-
self.fake_server.get_console_url.assert_called_once_with('xvpvnc')
175+
self.sdk_client.create_console.assert_called_once_with(
176+
self._server.id,
177+
console_type='xvpvnc')
177178
self.assertEqual(self.columns, columns)
178179
self.assertEqual(self.data, data)
179180

@@ -188,41 +189,12 @@ def test_console_url_show_with_spice(self):
188189
]
189190
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
190191
columns, data = self.cmd.take_action(parsed_args)
191-
self.fake_server.get_console_url.assert_called_once_with(
192-
'spice-html5')
192+
self.sdk_client.create_console.assert_called_once_with(
193+
self._server.id,
194+
console_type='spice-html5')
193195
self.assertEqual(self.columns, columns)
194196
self.assertEqual(self.data, data)
195197

196-
def test_console_url_show_compatible(self):
197-
methods = {
198-
'get_console_url': {'console': {'url': 'http://localhost',
199-
'type': 'fake_type'}},
200-
}
201-
old_fake_server = compute_fakes.FakeServer.create_one_server(
202-
methods=methods)
203-
old_columns = (
204-
'type',
205-
'url',
206-
)
207-
old_data = (
208-
methods['get_console_url']['console']['type'],
209-
methods['get_console_url']['console']['url']
210-
)
211-
arglist = [
212-
'foo_vm',
213-
]
214-
verifylist = [
215-
('url_type', 'novnc'),
216-
('server', 'foo_vm'),
217-
]
218-
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
219-
with mock.patch.object(self.servers_mock, 'get',
220-
return_value=old_fake_server):
221-
columns, data = self.cmd.take_action(parsed_args)
222-
old_fake_server.get_console_url.assert_called_once_with('novnc')
223-
self.assertEqual(old_columns, columns)
224-
self.assertEqual(old_data, data)
225-
226198
def test_console_url_show_with_rdp(self):
227199
arglist = [
228200
'--rdp',
@@ -234,8 +206,9 @@ def test_console_url_show_with_rdp(self):
234206
]
235207
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
236208
columns, data = self.cmd.take_action(parsed_args)
237-
self.fake_server.get_console_url.assert_called_once_with(
238-
'rdp-html5')
209+
self.sdk_client.create_console.assert_called_once_with(
210+
self._server.id,
211+
console_type='rdp-html5')
239212
self.assertEqual(self.columns, columns)
240213
self.assertEqual(self.data, data)
241214

@@ -250,8 +223,9 @@ def test_console_url_show_with_serial(self):
250223
]
251224
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
252225
columns, data = self.cmd.take_action(parsed_args)
253-
self.fake_server.get_console_url.assert_called_once_with(
254-
'serial')
226+
self.sdk_client.create_console.assert_called_once_with(
227+
self._server.id,
228+
console_type='serial')
255229
self.assertEqual(self.columns, columns)
256230
self.assertEqual(self.data, data)
257231

@@ -266,6 +240,8 @@ def test_console_url_show_with_mks(self):
266240
]
267241
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
268242
columns, data = self.cmd.take_action(parsed_args)
269-
self.fake_server.get_console_url.assert_called_once_with('webmks')
243+
self.sdk_client.create_console.assert_called_once_with(
244+
self._server.id,
245+
console_type='webmks')
270246
self.assertEqual(self.columns, columns)
271247
self.assertEqual(self.data, data)

requirements.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
# process, which may cause wedges in the gate later.
44
pbr!=2.1.0,>=2.0.0 # Apache-2.0
55

6-
cliff!=2.9.0,>=2.8.0 # Apache-2.0
6+
cliff>=3.4.0 # Apache-2.0
77
iso8601>=0.1.11 # MIT
88
openstacksdk>=0.48.0 # Apache-2.0
9-
osc-lib>=2.0.0 # Apache-2.0
9+
osc-lib>=2.2.0 # Apache-2.0
1010
oslo.i18n>=3.15.3 # Apache-2.0
1111
python-keystoneclient>=3.22.0 # Apache-2.0
1212
python-novaclient>=15.1.0 # Apache-2.0

0 commit comments

Comments
 (0)