Add OSC command for senlin node-check/recover
This change added two commands as OSC plugin: - openstack node check - openstack node recover Based on the existing senlin command: - senlin node-check - senlin node-recover Change-Id: I63261b8fa120c4f5a4c7b54178faec42ed967975
This commit is contained in:
parent
ed8c1320aa
commit
decbc7cef7
@ -332,3 +332,57 @@ class DeleteNode(command.Command):
|
||||
{'count': failure_count,
|
||||
'total': len(parsed_args.node)})
|
||||
print('Request accepted')
|
||||
|
||||
|
||||
class CheckNode(command.Command):
|
||||
"""Check the node(s)."""
|
||||
log = logging.getLogger(__name__ + ".CheckNode")
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(CheckNode, self).get_parser(prog_name)
|
||||
parser.add_argument(
|
||||
'node',
|
||||
metavar='<node>',
|
||||
nargs='+',
|
||||
help=_('ID or name of node(s) to check.')
|
||||
)
|
||||
return parser
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
self.log.debug("take_action(%s)", parsed_args)
|
||||
senlin_client = self.app.client_manager.clustering
|
||||
for nid in parsed_args.node:
|
||||
try:
|
||||
resp = senlin_client.check_node(nid)
|
||||
except sdk_exc.ResourceNotFound:
|
||||
raise exc.CommandError(_('Node not found: %s') % nid)
|
||||
print('Node check request on node %(nid)s is accepted by '
|
||||
'action %(action)s.'
|
||||
% {'nid': nid, 'action': resp['action']})
|
||||
|
||||
|
||||
class RecoverNode(command.Command):
|
||||
"""Recover the node(s)."""
|
||||
log = logging.getLogger(__name__ + ".RecoverNode")
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(RecoverNode, self).get_parser(prog_name)
|
||||
parser.add_argument(
|
||||
'node',
|
||||
metavar='<node>',
|
||||
nargs='+',
|
||||
help=_('ID or name of node(s) to recover.')
|
||||
)
|
||||
return parser
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
self.log.debug("take_action(%s)", parsed_args)
|
||||
senlin_client = self.app.client_manager.clustering
|
||||
for nid in parsed_args.node:
|
||||
try:
|
||||
resp = senlin_client.recover_node(nid)
|
||||
except sdk_exc.ResourceNotFound:
|
||||
raise exc.CommandError(_('Node not found: %s') % nid)
|
||||
print('Node recover request on node %(nid)s is accepted by '
|
||||
'action %(action)s.'
|
||||
% {'nid': nid, 'action': resp['action']})
|
||||
|
@ -402,3 +402,57 @@ class TestNodeDelete(TestNode):
|
||||
|
||||
mock_stdin.readline.assert_called_with()
|
||||
self.mock_client.delete_node.assert_not_called()
|
||||
|
||||
|
||||
class TestNodeCheck(TestNode):
|
||||
response = {"action": "8bb476c3-0f4c-44ee-9f64-c7b0260814de"}
|
||||
|
||||
def setUp(self):
|
||||
super(TestNodeCheck, self).setUp()
|
||||
self.cmd = osc_node.CheckNode(self.app, None)
|
||||
self.mock_client.check_node = mock.Mock(
|
||||
return_value=self.response)
|
||||
|
||||
def test_node_check(self):
|
||||
arglist = ['node1', 'node2', 'node3']
|
||||
parsed_args = self.check_parser(self.cmd, arglist, [])
|
||||
self.cmd.take_action(parsed_args)
|
||||
self.mock_client.check_node.assert_has_calls(
|
||||
[mock.call('node1'), mock.call('node2'),
|
||||
mock.call('node3')]
|
||||
)
|
||||
|
||||
def test_node_check_not_found(self):
|
||||
arglist = ['node1']
|
||||
self.mock_client.check_node.side_effect = sdk_exc.ResourceNotFound
|
||||
parsed_args = self.check_parser(self.cmd, arglist, [])
|
||||
error = self.assertRaises(exc.CommandError, self.cmd.take_action,
|
||||
parsed_args)
|
||||
self.assertIn('Node not found: node1', str(error))
|
||||
|
||||
|
||||
class TestNodeRecover(TestNode):
|
||||
response = {"action": "8bb476c3-0f4c-44ee-9f64-c7b0260814de"}
|
||||
|
||||
def setUp(self):
|
||||
super(TestNodeRecover, self).setUp()
|
||||
self.cmd = osc_node.RecoverNode(self.app, None)
|
||||
self.mock_client.recover_node = mock.Mock(
|
||||
return_value=self.response)
|
||||
|
||||
def test_node_recover(self):
|
||||
arglist = ['node1', 'node2', 'node3']
|
||||
parsed_args = self.check_parser(self.cmd, arglist, [])
|
||||
self.cmd.take_action(parsed_args)
|
||||
self.mock_client.recover_node.assert_has_calls(
|
||||
[mock.call('node1'), mock.call('node2'),
|
||||
mock.call('node3')]
|
||||
)
|
||||
|
||||
def test_node_recover_not_found(self):
|
||||
arglist = ['node1']
|
||||
self.mock_client.recover_node.side_effect = sdk_exc.ResourceNotFound
|
||||
parsed_args = self.check_parser(self.cmd, arglist, [])
|
||||
error = self.assertRaises(exc.CommandError, self.cmd.take_action,
|
||||
parsed_args)
|
||||
self.assertIn('Node not found: node1', str(error))
|
||||
|
@ -42,9 +42,11 @@ openstack.clustering.v1 =
|
||||
cluster_members_list = senlinclient.osc.v1.cluster:ClusterNodeList
|
||||
cluster_members_add = senlinclient.osc.v1.cluster:ClusterNodeAdd
|
||||
cluster_members_del = senlinclient.osc.v1.cluster:ClusterNodeDel
|
||||
cluster_node_check = senlinclient.osc.v1.node:CheckNode
|
||||
cluster_node_create = senlinclient.osc.v1.node:CreateNode
|
||||
cluster_node_delete = senlinclient.osc.v1.node:DeleteNode
|
||||
cluster_node_list = senlinclient.osc.v1.node:ListNode
|
||||
cluster_node_recover = senlinclient.osc.v1.node:RecoverNode
|
||||
cluster_node_show = senlinclient.osc.v1.node:ShowNode
|
||||
cluster_node_update = senlinclient.osc.v1.node:UpdateNode
|
||||
cluster_policy_attach = senlinclient.osc.v1.cluster:ClusterPolicyAttach
|
||||
|
Loading…
x
Reference in New Issue
Block a user