Skip to content

Commit 81431d2

Browse files
author
Huanxuan Ao
committed
Add "volume service set" command
Add "volume service set" command in volume v1 and v2 (v1 is the same as v2) to disable or enable volume service. Change-Id: Ibb2db7e93b24cb2e0d2a7c28b6fd8bcc851b8d2f Closes-Bug: #1613597
1 parent fc7a69e commit 81431d2

7 files changed

Lines changed: 442 additions & 0 deletions

File tree

doc/source/command-objects/volume-service.rst

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,37 @@ List volume service
2929
.. option:: --long
3030

3131
List additional fields in output
32+
33+
volume service set
34+
------------------
35+
36+
Set volume service properties
37+
38+
.. program:: volume service set
39+
.. code:: bash
40+
41+
os volume service set
42+
[--enable | --disable]
43+
[--disable-reason <reason>]
44+
<host> <service>
45+
46+
.. option:: --enable
47+
48+
Enable volume service
49+
50+
.. option:: --disable
51+
52+
Disable volume service
53+
54+
.. option:: --disable-reason <reason>
55+
56+
Reason for disabling the service (should be used with --disable option)
57+
58+
.. _volume-service-set:
59+
.. describe:: <host>
60+
61+
Name of host
62+
63+
.. describe:: <service>
64+
65+
Name of service (Binary name)

openstackclient/tests/volume/v1/test_service.py

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
# under the License.
1313
#
1414

15+
from osc_lib import exceptions
1516

1617
from openstackclient.tests.volume.v1 import fakes as service_fakes
1718
from openstackclient.volume.v1 import service
@@ -139,3 +140,147 @@ def test_service_list_with_long_option(self):
139140
self.services.host,
140141
self.services.binary,
141142
)
143+
144+
145+
class TestServiceSet(TestService):
146+
147+
service = service_fakes.FakeService.create_one_service()
148+
149+
def setUp(self):
150+
super(TestServiceSet, self).setUp()
151+
152+
self.service_mock.enable.return_value = self.service
153+
self.service_mock.disable.return_value = self.service
154+
self.service_mock.disable_log_reason.return_value = self.service
155+
156+
self.cmd = service.SetService(self.app, None)
157+
158+
def test_service_set_nothing(self):
159+
arglist = [
160+
self.service.host,
161+
self.service.binary,
162+
]
163+
verifylist = [
164+
('host', self.service.host),
165+
('service', self.service.binary),
166+
]
167+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
168+
result = self.cmd.take_action(parsed_args)
169+
170+
self.service_mock.enable.assert_not_called()
171+
self.service_mock.disable.assert_not_called()
172+
self.service_mock.disable_log_reason.assert_not_called()
173+
self.assertIsNone(result)
174+
175+
def test_service_set_enable(self):
176+
arglist = [
177+
'--enable',
178+
self.service.host,
179+
self.service.binary,
180+
]
181+
verifylist = [
182+
('enable', True),
183+
('host', self.service.host),
184+
('service', self.service.binary),
185+
]
186+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
187+
188+
result = self.cmd.take_action(parsed_args)
189+
190+
self.service_mock.enable.assert_called_with(
191+
self.service.host,
192+
self.service.binary
193+
)
194+
self.service_mock.disable.assert_not_called()
195+
self.service_mock.disable_log_reason.assert_not_called()
196+
self.assertIsNone(result)
197+
198+
def test_service_set_disable(self):
199+
arglist = [
200+
'--disable',
201+
self.service.host,
202+
self.service.binary,
203+
]
204+
verifylist = [
205+
('disable', True),
206+
('host', self.service.host),
207+
('service', self.service.binary),
208+
]
209+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
210+
211+
result = self.cmd.take_action(parsed_args)
212+
213+
self.service_mock.disable.assert_called_with(
214+
self.service.host,
215+
self.service.binary
216+
)
217+
self.service_mock.enable.assert_not_called()
218+
self.service_mock.disable_log_reason.assert_not_called()
219+
self.assertIsNone(result)
220+
221+
def test_service_set_disable_with_reason(self):
222+
reason = 'earthquake'
223+
arglist = [
224+
'--disable',
225+
'--disable-reason', reason,
226+
self.service.host,
227+
self.service.binary,
228+
]
229+
verifylist = [
230+
('disable', True),
231+
('disable_reason', reason),
232+
('host', self.service.host),
233+
('service', self.service.binary),
234+
]
235+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
236+
237+
result = self.cmd.take_action(parsed_args)
238+
239+
self.service_mock.disable_log_reason.assert_called_with(
240+
self.service.host,
241+
self.service.binary,
242+
reason
243+
)
244+
self.assertIsNone(result)
245+
246+
def test_service_set_only_with_disable_reason(self):
247+
reason = 'earthquake'
248+
arglist = [
249+
'--disable-reason', reason,
250+
self.service.host,
251+
self.service.binary,
252+
]
253+
verifylist = [
254+
('disable_reason', reason),
255+
('host', self.service.host),
256+
('service', self.service.binary),
257+
]
258+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
259+
try:
260+
self.cmd.take_action(parsed_args)
261+
self.fail("CommandError should be raised.")
262+
except exceptions.CommandError as e:
263+
self.assertEqual("Cannot specify option --disable-reason without "
264+
"--disable specified.", str(e))
265+
266+
def test_service_set_enable_with_disable_reason(self):
267+
reason = 'earthquake'
268+
arglist = [
269+
'--enable',
270+
'--disable-reason', reason,
271+
self.service.host,
272+
self.service.binary,
273+
]
274+
verifylist = [
275+
('enable', True),
276+
('disable_reason', reason),
277+
('host', self.service.host),
278+
('service', self.service.binary),
279+
]
280+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
281+
try:
282+
self.cmd.take_action(parsed_args)
283+
self.fail("CommandError should be raised.")
284+
except exceptions.CommandError as e:
285+
self.assertEqual("Cannot specify option --disable-reason without "
286+
"--disable specified.", str(e))

openstackclient/tests/volume/v2/test_service.py

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
# under the License.
1313
#
1414

15+
from osc_lib import exceptions
1516

1617
from openstackclient.tests.volume.v2 import fakes as service_fakes
1718
from openstackclient.volume.v2 import service
@@ -139,3 +140,147 @@ def test_service_list_with_long_option(self):
139140
self.services.host,
140141
self.services.binary,
141142
)
143+
144+
145+
class TestServiceSet(TestService):
146+
147+
service = service_fakes.FakeService.create_one_service()
148+
149+
def setUp(self):
150+
super(TestServiceSet, self).setUp()
151+
152+
self.service_mock.enable.return_value = self.service
153+
self.service_mock.disable.return_value = self.service
154+
self.service_mock.disable_log_reason.return_value = self.service
155+
156+
self.cmd = service.SetService(self.app, None)
157+
158+
def test_service_set_nothing(self):
159+
arglist = [
160+
self.service.host,
161+
self.service.binary,
162+
]
163+
verifylist = [
164+
('host', self.service.host),
165+
('service', self.service.binary),
166+
]
167+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
168+
result = self.cmd.take_action(parsed_args)
169+
170+
self.service_mock.enable.assert_not_called()
171+
self.service_mock.disable.assert_not_called()
172+
self.service_mock.disable_log_reason.assert_not_called()
173+
self.assertIsNone(result)
174+
175+
def test_service_set_enable(self):
176+
arglist = [
177+
'--enable',
178+
self.service.host,
179+
self.service.binary,
180+
]
181+
verifylist = [
182+
('enable', True),
183+
('host', self.service.host),
184+
('service', self.service.binary),
185+
]
186+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
187+
188+
result = self.cmd.take_action(parsed_args)
189+
190+
self.service_mock.enable.assert_called_with(
191+
self.service.host,
192+
self.service.binary
193+
)
194+
self.service_mock.disable.assert_not_called()
195+
self.service_mock.disable_log_reason.assert_not_called()
196+
self.assertIsNone(result)
197+
198+
def test_service_set_disable(self):
199+
arglist = [
200+
'--disable',
201+
self.service.host,
202+
self.service.binary,
203+
]
204+
verifylist = [
205+
('disable', True),
206+
('host', self.service.host),
207+
('service', self.service.binary),
208+
]
209+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
210+
211+
result = self.cmd.take_action(parsed_args)
212+
213+
self.service_mock.disable.assert_called_with(
214+
self.service.host,
215+
self.service.binary
216+
)
217+
self.service_mock.enable.assert_not_called()
218+
self.service_mock.disable_log_reason.assert_not_called()
219+
self.assertIsNone(result)
220+
221+
def test_service_set_disable_with_reason(self):
222+
reason = 'earthquake'
223+
arglist = [
224+
'--disable',
225+
'--disable-reason', reason,
226+
self.service.host,
227+
self.service.binary,
228+
]
229+
verifylist = [
230+
('disable', True),
231+
('disable_reason', reason),
232+
('host', self.service.host),
233+
('service', self.service.binary),
234+
]
235+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
236+
237+
result = self.cmd.take_action(parsed_args)
238+
239+
self.service_mock.disable_log_reason.assert_called_with(
240+
self.service.host,
241+
self.service.binary,
242+
reason
243+
)
244+
self.assertIsNone(result)
245+
246+
def test_service_set_only_with_disable_reason(self):
247+
reason = 'earthquake'
248+
arglist = [
249+
'--disable-reason', reason,
250+
self.service.host,
251+
self.service.binary,
252+
]
253+
verifylist = [
254+
('disable_reason', reason),
255+
('host', self.service.host),
256+
('service', self.service.binary),
257+
]
258+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
259+
try:
260+
self.cmd.take_action(parsed_args)
261+
self.fail("CommandError should be raised.")
262+
except exceptions.CommandError as e:
263+
self.assertEqual("Cannot specify option --disable-reason without "
264+
"--disable specified.", str(e))
265+
266+
def test_service_set_enable_with_disable_reason(self):
267+
reason = 'earthquake'
268+
arglist = [
269+
'--enable',
270+
'--disable-reason', reason,
271+
self.service.host,
272+
self.service.binary,
273+
]
274+
verifylist = [
275+
('enable', True),
276+
('disable_reason', reason),
277+
('host', self.service.host),
278+
('service', self.service.binary),
279+
]
280+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
281+
try:
282+
self.cmd.take_action(parsed_args)
283+
self.fail("CommandError should be raised.")
284+
except exceptions.CommandError as e:
285+
self.assertEqual("Cannot specify option --disable-reason without "
286+
"--disable specified.", str(e))

0 commit comments

Comments
 (0)