Merge "Support check before do node-recover action"
This commit is contained in:
@@ -440,12 +440,13 @@ class TestNodeRecover(TestNode):
|
|||||||
self.mock_client.recover_node = mock.Mock(return_value=fake_res)
|
self.mock_client.recover_node = mock.Mock(return_value=fake_res)
|
||||||
|
|
||||||
def test_node_recover(self):
|
def test_node_recover(self):
|
||||||
arglist = ['node1', 'node2', 'node3']
|
arglist = ['node1', 'node2', 'node3', '--check', 'false']
|
||||||
|
kwargs = {'check': False}
|
||||||
parsed_args = self.check_parser(self.cmd, arglist, [])
|
parsed_args = self.check_parser(self.cmd, arglist, [])
|
||||||
self.cmd.take_action(parsed_args)
|
self.cmd.take_action(parsed_args)
|
||||||
self.mock_client.recover_node.assert_has_calls(
|
self.mock_client.recover_node.assert_has_calls(
|
||||||
[mock.call('node1'), mock.call('node2'),
|
[mock.call('node1', **kwargs), mock.call('node2', **kwargs),
|
||||||
mock.call('node3')]
|
mock.call('node3', **kwargs)]
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_node_recover_not_found(self):
|
def test_node_recover_not_found(self):
|
||||||
|
@@ -1534,19 +1534,30 @@ class ShellTest(testtools.TestCase):
|
|||||||
|
|
||||||
def test_do_node_recover(self):
|
def test_do_node_recover(self):
|
||||||
service = mock.Mock()
|
service = mock.Mock()
|
||||||
args = self._make_args({'id': ['node1']})
|
args = {
|
||||||
|
'id': ['node1'],
|
||||||
|
'check': 'false'
|
||||||
|
}
|
||||||
|
args = self._make_args(args)
|
||||||
|
attrs = {
|
||||||
|
'check': False
|
||||||
|
}
|
||||||
service.check_node = mock.Mock()
|
service.check_node = mock.Mock()
|
||||||
|
|
||||||
sh.do_node_recover(service, args)
|
sh.do_node_recover(service, args)
|
||||||
|
|
||||||
service.recover_node.assert_called_once_with('node1')
|
service.recover_node.assert_called_once_with('node1', **attrs)
|
||||||
|
|
||||||
def test_do_node_recover_not_found(self):
|
def test_do_node_recover_not_found(self):
|
||||||
service = mock.Mock()
|
service = mock.Mock()
|
||||||
ex = exc.HTTPNotFound
|
ex = exc.HTTPNotFound
|
||||||
service.recover_node.side_effect = ex
|
service.recover_node.side_effect = ex
|
||||||
|
args = {
|
||||||
|
'id': ['node1'],
|
||||||
|
'check': 'false'
|
||||||
|
}
|
||||||
|
args = self._make_args(args)
|
||||||
|
|
||||||
args = self._make_args({'id': ['node1']})
|
|
||||||
ex = self.assertRaises(exc.CommandError,
|
ex = self.assertRaises(exc.CommandError,
|
||||||
sh.do_node_recover, service, args)
|
sh.do_node_recover, service, args)
|
||||||
msg = _('Failed to recover some of the specified nodes.')
|
msg = _('Failed to recover some of the specified nodes.')
|
||||||
|
@@ -19,6 +19,7 @@ from openstack import exceptions as sdk_exc
|
|||||||
from osc_lib.command import command
|
from osc_lib.command import command
|
||||||
from osc_lib import exceptions as exc
|
from osc_lib import exceptions as exc
|
||||||
from osc_lib import utils
|
from osc_lib import utils
|
||||||
|
from oslo_utils import strutils
|
||||||
import six
|
import six
|
||||||
|
|
||||||
from senlinclient.common.i18n import _
|
from senlinclient.common.i18n import _
|
||||||
@@ -365,6 +366,13 @@ class RecoverNode(command.Command):
|
|||||||
|
|
||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
parser = super(RecoverNode, self).get_parser(prog_name)
|
parser = super(RecoverNode, self).get_parser(prog_name)
|
||||||
|
parser.add_argument(
|
||||||
|
'--check',
|
||||||
|
metavar='<boolean>',
|
||||||
|
default=False,
|
||||||
|
help=_('Whether the node(s) should check physical resource status '
|
||||||
|
'before doing node recover. Default is false')
|
||||||
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'node',
|
'node',
|
||||||
metavar='<node>',
|
metavar='<node>',
|
||||||
@@ -376,9 +384,14 @@ class RecoverNode(command.Command):
|
|||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
self.log.debug("take_action(%s)", parsed_args)
|
self.log.debug("take_action(%s)", parsed_args)
|
||||||
senlin_client = self.app.client_manager.clustering
|
senlin_client = self.app.client_manager.clustering
|
||||||
|
|
||||||
|
params = {
|
||||||
|
'check': strutils.bool_from_string(parsed_args.check, strict=True)
|
||||||
|
}
|
||||||
|
|
||||||
for nid in parsed_args.node:
|
for nid in parsed_args.node:
|
||||||
try:
|
try:
|
||||||
resp = senlin_client.recover_node(nid)
|
resp = senlin_client.recover_node(nid, **params)
|
||||||
except sdk_exc.ResourceNotFound:
|
except sdk_exc.ResourceNotFound:
|
||||||
raise exc.CommandError(_('Node not found: %s') % nid)
|
raise exc.CommandError(_('Node not found: %s') % nid)
|
||||||
print('Node recover request on node %(nid)s is accepted by '
|
print('Node recover request on node %(nid)s is accepted by '
|
||||||
|
@@ -1352,6 +1352,9 @@ def do_node_check(service, args):
|
|||||||
print('Request accepted')
|
print('Request accepted')
|
||||||
|
|
||||||
|
|
||||||
|
@utils.arg('-c', '--check', metavar='<BOOLEAN>', default=False,
|
||||||
|
help=_("Whether the node(s) should check physical resource status "
|
||||||
|
"before doing node recover.Default is false"))
|
||||||
@utils.arg('id', metavar='<NODE>', nargs='+',
|
@utils.arg('id', metavar='<NODE>', nargs='+',
|
||||||
help=_('ID or name of node(s) to recover.'))
|
help=_('ID or name of node(s) to recover.'))
|
||||||
def do_node_recover(service, args):
|
def do_node_recover(service, args):
|
||||||
@@ -1359,9 +1362,13 @@ def do_node_recover(service, args):
|
|||||||
show_deprecated('senlin node-recover', 'openstack cluster node recover')
|
show_deprecated('senlin node-recover', 'openstack cluster node recover')
|
||||||
failure_count = 0
|
failure_count = 0
|
||||||
|
|
||||||
|
params = {
|
||||||
|
'check': strutils.bool_from_string(args.check, strict=True)
|
||||||
|
}
|
||||||
|
|
||||||
for nid in args.id:
|
for nid in args.id:
|
||||||
try:
|
try:
|
||||||
service.recover_node(nid)
|
service.recover_node(nid, **params)
|
||||||
except exc.HTTPNotFound:
|
except exc.HTTPNotFound:
|
||||||
failure_count += 1
|
failure_count += 1
|
||||||
print('Node id "%s" not found' % nid)
|
print('Node id "%s" not found' % nid)
|
||||||
|
Reference in New Issue
Block a user