Skip to content

Commit a7e091c

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Update 'host list' and 'host show' command to use sdk"
2 parents 14dff07 + ecc6aee commit a7e091c

File tree

3 files changed

+111
-58
lines changed

3 files changed

+111
-58
lines changed

openstackclient/compute/v2/host.py

Lines changed: 44 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@
2222

2323

2424
class ListHost(command.Lister):
25-
_description = _("List hosts")
25+
_description = _("DEPRECATED: List hosts")
2626

2727
def get_parser(self, prog_name):
28-
parser = super(ListHost, self).get_parser(prog_name)
28+
parser = super().get_parser(prog_name)
2929
parser.add_argument(
3030
"--zone",
3131
metavar="<zone>",
@@ -34,17 +34,33 @@ def get_parser(self, prog_name):
3434
return parser
3535

3636
def take_action(self, parsed_args):
37-
compute_client = self.app.client_manager.compute
37+
compute_client = self.app.client_manager.sdk_connection.compute
3838
columns = (
3939
"Host Name",
4040
"Service",
4141
"Zone"
4242
)
43-
data = compute_client.api.host_list(parsed_args.zone)
44-
return (columns,
45-
(utils.get_dict_properties(
46-
s, columns,
47-
) for s in data))
43+
44+
self.log.warning(
45+
"API has been deprecated. "
46+
"Please consider using 'hypervisor list' instead."
47+
)
48+
49+
# doing this since openstacksdk has decided not to support this
50+
# deprecated command
51+
hosts = compute_client.get(
52+
'/os-hosts', microversion='2.1'
53+
).json().get('hosts')
54+
55+
if parsed_args.zone is not None:
56+
filtered_hosts = []
57+
for host in hosts:
58+
if host['zone'] == parsed_args.zone:
59+
filtered_hosts.append(host)
60+
61+
hosts = filtered_hosts
62+
63+
return columns, (utils.get_dict_properties(s, columns) for s in hosts)
4864

4965

5066
class SetHost(command.Command):
@@ -102,10 +118,10 @@ def take_action(self, parsed_args):
102118

103119

104120
class ShowHost(command.Lister):
105-
_description = _("Display host details")
121+
_description = _("DEPRECATED: Display host details")
106122

107123
def get_parser(self, prog_name):
108-
parser = super(ShowHost, self).get_parser(prog_name)
124+
parser = super().get_parser(prog_name)
109125
parser.add_argument(
110126
"host",
111127
metavar="<host>",
@@ -114,7 +130,7 @@ def get_parser(self, prog_name):
114130
return parser
115131

116132
def take_action(self, parsed_args):
117-
compute_client = self.app.client_manager.compute
133+
compute_client = self.app.client_manager.sdk_connection.compute
118134
columns = (
119135
"Host",
120136
"Project",
@@ -123,9 +139,21 @@ def take_action(self, parsed_args):
123139
"Disk GB"
124140
)
125141

126-
data = compute_client.api.host_show(parsed_args.host)
142+
self.log.warning(
143+
"API has been deprecated. "
144+
"Please consider using 'hypervisor show' instead."
145+
)
146+
147+
# doing this since openstacksdk has decided not to support this
148+
# deprecated command
149+
resources = compute_client.get(
150+
'/os-hosts/' + parsed_args.host,
151+
microversion='2.1'
152+
).json().get('host')
153+
154+
data = []
155+
if resources is not None:
156+
for resource in resources:
157+
data.append(resource['resource'])
127158

128-
return (columns,
129-
(utils.get_dict_properties(
130-
s, columns,
131-
) for s in data))
159+
return columns, (utils.get_dict_properties(s, columns) for s in data)

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

Lines changed: 63 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
from openstackclient.compute.v2 import host
1919
from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes
20+
from openstackclient.tests.unit import fakes
2021
from openstackclient.tests.unit import utils as tests_utils
2122

2223

@@ -26,60 +27,65 @@ def setUp(self):
2627
super(TestHost, self).setUp()
2728

2829
# Get a shortcut to the compute client
29-
self.compute = self.app.client_manager.compute
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
33+
self.sdk_client.get = mock.Mock()
3034

3135

3236
@mock.patch(
3337
'openstackclient.api.compute_v2.APIv2.host_list'
3438
)
3539
class TestHostList(TestHost):
3640

37-
host = compute_fakes.FakeHost.create_one_host()
38-
39-
columns = (
40-
'Host Name',
41-
'Service',
42-
'Zone',
43-
)
44-
45-
data = [(
46-
host['host_name'],
47-
host['service'],
48-
host['zone'],
49-
)]
41+
_host = compute_fakes.FakeHost.create_one_host()
5042

5143
def setUp(self):
5244
super(TestHostList, self).setUp()
5345

46+
self.sdk_client.get.return_value = fakes.FakeResponse(
47+
data={'hosts': [self._host]}
48+
)
49+
50+
self.columns = (
51+
'Host Name', 'Service', 'Zone'
52+
)
53+
54+
self.data = [(
55+
self._host['host_name'],
56+
self._host['service'],
57+
self._host['zone'],
58+
)]
59+
5460
self.cmd = host.ListHost(self.app, None)
5561

5662
def test_host_list_no_option(self, h_mock):
57-
h_mock.return_value = [self.host]
63+
h_mock.return_value = [self._host]
5864
arglist = []
5965
verifylist = []
6066

6167
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
6268

6369
columns, data = self.cmd.take_action(parsed_args)
6470

65-
h_mock.assert_called_with(None)
71+
self.sdk_client.get.assert_called_with('/os-hosts', microversion='2.1')
6672
self.assertEqual(self.columns, columns)
6773
self.assertEqual(self.data, list(data))
6874

6975
def test_host_list_with_option(self, h_mock):
70-
h_mock.return_value = [self.host]
76+
h_mock.return_value = [self._host]
7177
arglist = [
72-
'--zone', self.host['zone'],
78+
'--zone', self._host['zone'],
7379
]
7480
verifylist = [
75-
('zone', self.host['zone']),
81+
('zone', self._host['zone']),
7682
]
7783

7884
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
7985

8086
columns, data = self.cmd.take_action(parsed_args)
8187

82-
h_mock.assert_called_with(self.host['zone'])
88+
self.sdk_client.get.assert_called_with('/os-hosts', microversion='2.1')
8389
self.assertEqual(self.columns, columns)
8490
self.assertEqual(self.data, list(data))
8591

@@ -141,31 +147,43 @@ def test_host_set(self, h_mock):
141147
)
142148
class TestHostShow(TestHost):
143149

144-
host = compute_fakes.FakeHost.create_one_host()
145-
146-
columns = (
147-
'Host',
148-
'Project',
149-
'CPU',
150-
'Memory MB',
151-
'Disk GB',
152-
)
153-
154-
data = [(
155-
host['host'],
156-
host['project'],
157-
host['cpu'],
158-
host['memory_mb'],
159-
host['disk_gb'],
160-
)]
150+
_host = compute_fakes.FakeHost.create_one_host()
161151

162152
def setUp(self):
163153
super(TestHostShow, self).setUp()
164154

155+
output_data = {"resource": {
156+
"host": self._host['host'],
157+
"project": self._host['project'],
158+
"cpu": self._host['cpu'],
159+
"memory_mb": self._host['memory_mb'],
160+
"disk_gb": self._host['disk_gb']
161+
}}
162+
163+
self.sdk_client.get.return_value = fakes.FakeResponse(
164+
data={'host': [output_data]}
165+
)
166+
167+
self.columns = (
168+
'Host',
169+
'Project',
170+
'CPU',
171+
'Memory MB',
172+
'Disk GB',
173+
)
174+
175+
self.data = [(
176+
self._host['host'],
177+
self._host['project'],
178+
self._host['cpu'],
179+
self._host['memory_mb'],
180+
self._host['disk_gb'],
181+
)]
182+
165183
self.cmd = host.ShowHost(self.app, None)
166184

167185
def test_host_show_no_option(self, h_mock):
168-
h_mock.host_show.return_value = [self.host]
186+
h_mock.host_show.return_value = [self._host]
169187
arglist = []
170188
verifylist = []
171189

@@ -174,18 +192,21 @@ def test_host_show_no_option(self, h_mock):
174192
self.cmd, arglist, verifylist)
175193

176194
def test_host_show_with_option(self, h_mock):
177-
h_mock.return_value = [self.host]
195+
h_mock.return_value = [self._host]
178196
arglist = [
179-
self.host['host_name'],
197+
self._host['host_name'],
180198
]
181199
verifylist = [
182-
('host', self.host['host_name']),
200+
('host', self._host['host_name']),
183201
]
184202

185203
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
186204

187205
columns, data = self.cmd.take_action(parsed_args)
188206

189-
h_mock.assert_called_with(self.host['host_name'])
207+
self.sdk_client.get.assert_called_with(
208+
'/os-hosts/' + self._host['host_name'],
209+
microversion='2.1'
210+
)
190211
self.assertEqual(self.columns, columns)
191212
self.assertEqual(self.data, list(data))
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
features:
3+
- |
4+
The ``host list`` and ``host show`` commands have been migrated to SDK.

0 commit comments

Comments
 (0)