summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/compute/v2/service.py38
-rw-r--r--openstackclient/tests/compute/v2/test_service.py57
2 files changed, 49 insertions, 46 deletions
diff --git a/openstackclient/compute/v2/service.py b/openstackclient/compute/v2/service.py
index 6093b8ce..e7966a8a 100644
--- a/openstackclient/compute/v2/service.py
+++ b/openstackclient/compute/v2/service.py
@@ -16,6 +16,7 @@
"""Service action implementations"""
from openstackclient.common import command
+from openstackclient.common import exceptions
from openstackclient.common import utils
from openstackclient.i18n import _
@@ -110,23 +111,20 @@ class SetService(command.Command):
enabled_group = parser.add_mutually_exclusive_group()
enabled_group.add_argument(
"--enable",
- dest="enabled",
- default=True,
action="store_true",
- help=_("Enable a service (default)")
+ help=_("Enable service")
)
enabled_group.add_argument(
"--disable",
- dest="enabled",
- action="store_false",
- help=_("Disable a service")
+ action="store_true",
+ help=_("Disable service")
)
parser.add_argument(
"--disable-reason",
default=None,
metavar="<reason>",
- help=_("Reason for disabling the service (in quotas). Note that "
- "when the service is enabled, this option is ignored.")
+ help=_("Reason for disabling the service (in quotas). "
+ "Should be used with --disable option.")
)
return parser
@@ -134,16 +132,26 @@ class SetService(command.Command):
compute_client = self.app.client_manager.compute
cs = compute_client.services
- if not parsed_args.enabled:
+ if (parsed_args.enable or not parsed_args.disable) and \
+ parsed_args.disable_reason:
+ msg = _("Cannot specify option --disable-reason without "
+ "--disable specified.")
+ raise exceptions.CommandError(msg)
+
+ enabled = None
+ if parsed_args.enable:
+ enabled = True
+ if parsed_args.disable:
+ enabled = False
+
+ if enabled is None:
+ return
+ elif enabled:
+ cs.enable(parsed_args.host, parsed_args.service)
+ else:
if parsed_args.disable_reason:
cs.disable_log_reason(parsed_args.host,
parsed_args.service,
parsed_args.disable_reason)
else:
cs.disable(parsed_args.host, parsed_args.service)
- else:
- if parsed_args.disable_reason:
- msg = _("argument --disable-reason has been ignored")
- self.log.info(msg)
-
- cs.enable(parsed_args.host, parsed_args.service)
diff --git a/openstackclient/tests/compute/v2/test_service.py b/openstackclient/tests/compute/v2/test_service.py
index 7a5a840f..cf534978 100644
--- a/openstackclient/tests/compute/v2/test_service.py
+++ b/openstackclient/tests/compute/v2/test_service.py
@@ -13,8 +13,7 @@
# under the License.
#
-import mock
-
+from openstackclient.common import exceptions
from openstackclient.compute.v2 import service
from openstackclient.tests.compute.v2 import fakes as compute_fakes
@@ -128,6 +127,23 @@ class TestServiceSet(TestService):
self.cmd = service.SetService(self.app, None)
+ def test_set_nothing(self):
+ arglist = [
+ self.service.host,
+ self.service.binary,
+ ]
+ verifylist = [
+ ('host', self.service.host),
+ ('service', self.service.binary),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ result = self.cmd.take_action(parsed_args)
+
+ self.service_mock.enable.assert_not_called()
+ self.service_mock.disable.assert_not_called()
+ self.service_mock.disable_log_reason.assert_not_called()
+ self.assertIsNone(result)
+
def test_service_set_enable(self):
arglist = [
'--enable',
@@ -135,7 +151,7 @@ class TestServiceSet(TestService):
self.service.binary,
]
verifylist = [
- ('enabled', True),
+ ('enable', True),
('host', self.service.host),
('service', self.service.binary),
]
@@ -156,7 +172,7 @@ class TestServiceSet(TestService):
self.service.binary,
]
verifylist = [
- ('enabled', False),
+ ('disable', True),
('host', self.service.host),
('service', self.service.binary),
]
@@ -179,7 +195,7 @@ class TestServiceSet(TestService):
self.service.binary,
]
verifylist = [
- ('enabled', False),
+ ('disable', True),
('disable_reason', reason),
('host', self.service.host),
('service', self.service.binary),
@@ -203,24 +219,13 @@ class TestServiceSet(TestService):
self.service.binary,
]
verifylist = [
- ('enabled', True),
('disable_reason', reason),
('host', self.service.host),
('service', self.service.binary),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
-
- with mock.patch.object(self.cmd.log, 'info') as mock_log:
- result = self.cmd.take_action(parsed_args)
-
- msg = "argument --disable-reason has been ignored"
- mock_log.assert_called_once_with(msg)
-
- self.service_mock.enable.assert_called_with(
- self.service.host,
- self.service.binary
- )
- self.assertIsNone(result)
+ self.assertRaises(exceptions.CommandError, self.cmd.take_action,
+ parsed_args)
def test_service_set_enable_with_disable_reason(self):
reason = 'earthquake'
@@ -231,21 +236,11 @@ class TestServiceSet(TestService):
self.service.binary,
]
verifylist = [
- ('enabled', True),
+ ('enable', True),
('disable_reason', reason),
('host', self.service.host),
('service', self.service.binary),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
-
- with mock.patch.object(self.cmd.log, 'info') as mock_log:
- result = self.cmd.take_action(parsed_args)
-
- msg = "argument --disable-reason has been ignored"
- mock_log.assert_called_once_with(msg)
-
- self.service_mock.enable.assert_called_with(
- self.service.host,
- self.service.binary
- )
- self.assertIsNone(result)
+ self.assertRaises(exceptions.CommandError, self.cmd.take_action,
+ parsed_args)