Skip to content

Commit 956eabe

Browse files
committed
compute: limit the service's force down command above 2.10
The force down action is added in Microversion 2.11, we should limit the command only can be executed when the microversion is above 2.10. Change-Id: I0a87e02e71ff025d30181fc17ebcd003a590f110
1 parent 9766eb2 commit 956eabe

2 files changed

Lines changed: 25 additions & 11 deletions

File tree

openstackclient/compute/v2/service.py

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

1818
import logging
1919

20+
from novaclient import api_versions
2021
from osc_lib.command import command
2122
from osc_lib import exceptions
2223
from osc_lib import utils
@@ -192,18 +193,23 @@ def take_action(self, parsed_args):
192193
result += 1
193194

194195
force_down = None
195-
try:
196-
if parsed_args.down:
197-
force_down = True
198-
if parsed_args.up:
199-
force_down = False
200-
if force_down is not None:
196+
if parsed_args.down:
197+
force_down = True
198+
if parsed_args.up:
199+
force_down = False
200+
if force_down is not None:
201+
if compute_client.api_version < api_versions.APIVersion(
202+
'2.11'):
203+
msg = _('--os-compute-api-version 2.11 or later is '
204+
'required')
205+
raise exceptions.CommandError(msg)
206+
try:
201207
cs.force_down(parsed_args.host, parsed_args.service,
202208
force_down=force_down)
203-
except Exception:
204-
state = "down" if force_down else "up"
205-
LOG.error("Failed to set service state to %s", state)
206-
result += 1
209+
except Exception:
210+
state = "down" if force_down else "up"
211+
LOG.error("Failed to set service state to %s", state)
212+
result += 1
207213

208214
if result > 0:
209215
msg = _("Compute service %(service)s of host %(host)s failed to "

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
import mock
1717
from mock import call
18-
18+
from novaclient import api_versions
1919
from osc_lib import exceptions
2020

2121
from openstackclient.compute.v2 import service
@@ -340,6 +340,8 @@ def test_service_set_state_up(self):
340340
('service', self.service.binary),
341341
]
342342
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
343+
self.app.client_manager.compute.api_version = api_versions.APIVersion(
344+
'2.11')
343345
result = self.cmd.take_action(parsed_args)
344346
self.service_mock.force_down.assert_called_once_with(
345347
self.service.host, self.service.binary, force_down=False)
@@ -359,6 +361,8 @@ def test_service_set_state_down(self):
359361
('service', self.service.binary),
360362
]
361363
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
364+
self.app.client_manager.compute.api_version = api_versions.APIVersion(
365+
'2.11')
362366
result = self.cmd.take_action(parsed_args)
363367
self.service_mock.force_down.assert_called_once_with(
364368
self.service.host, self.service.binary, force_down=True)
@@ -380,6 +384,8 @@ def test_service_set_enable_and_state_down(self):
380384
('service', self.service.binary),
381385
]
382386
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
387+
self.app.client_manager.compute.api_version = api_versions.APIVersion(
388+
'2.11')
383389
result = self.cmd.take_action(parsed_args)
384390
self.service_mock.enable.assert_called_once_with(
385391
self.service.host, self.service.binary)
@@ -402,6 +408,8 @@ def test_service_set_enable_and_state_down_with_exception(self):
402408
]
403409
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
404410

411+
self.app.client_manager.compute.api_version = api_versions.APIVersion(
412+
'2.11')
405413
with mock.patch.object(self.service_mock, 'enable',
406414
side_effect=Exception()):
407415
self.assertRaises(exceptions.CommandError,

0 commit comments

Comments
 (0)