diff --git a/ironicclient/tests/v1/test_node.py b/ironicclient/tests/v1/test_node.py index ae8c73a12..f34017be2 100644 --- a/ironicclient/tests/v1/test_node.py +++ b/ironicclient/tests/v1/test_node.py @@ -48,6 +48,10 @@ PORT = {'id': 456, POWER_STATE = {'current': 'power off', 'target': 'power on'} +DRIVER_IFACES = {'power': True, 'deploy': True, + 'console': 'not supported', + 'rescue': 'not supported'} + CREATE_NODE = copy.deepcopy(NODE1) del CREATE_NODE['id'] del CREATE_NODE['uuid'] @@ -125,6 +129,13 @@ fake_responses = { POWER_STATE, ), }, + '/v1/nodes/%s/validate' % NODE1['uuid']: + { + 'GET': ( + {}, + DRIVER_IFACES, + ), + }, } @@ -224,3 +235,14 @@ class NodeManagerTest(testtools.TestCase): ] self.assertEqual(expect, self.api.calls) self.assertEqual('power on', power_state.target) + + def test_node_validate(self): + ifaces = self.mgr.validate(NODE1['uuid']) + expect = [ + ('GET', '/v1/nodes/%s/validate' % NODE1['uuid'], {}, None), + ] + self.assertEqual(expect, self.api.calls) + self.assertEqual(DRIVER_IFACES['power'], ifaces.power) + self.assertEqual(DRIVER_IFACES['deploy'], ifaces.deploy) + self.assertEqual(DRIVER_IFACES['rescue'], ifaces.rescue) + self.assertEqual(DRIVER_IFACES['console'], ifaces.console) diff --git a/ironicclient/v1/node.py b/ironicclient/v1/node.py index 04f1e5c23..a4e2311f6 100644 --- a/ironicclient/v1/node.py +++ b/ironicclient/v1/node.py @@ -81,3 +81,7 @@ class NodeManager(base.Manager): path = "%s/state/power" % node_id target = {'target': "power %s" % state} return self._update(self._path(path), target, method='PUT') + + def validate(self, node_uuid): + path = "%s/validate" % node_uuid + return self.get(path) diff --git a/ironicclient/v1/node_shell.py b/ironicclient/v1/node_shell.py index 55b1af9b1..74ef867c1 100644 --- a/ironicclient/v1/node_shell.py +++ b/ironicclient/v1/node_shell.py @@ -153,3 +153,14 @@ def do_node_set_power_state(cc, args): field_list = ['current', 'target'] data = dict([(f, getattr(state, f, '')) for f in field_list]) utils.print_dict(data, wrap=72) + + +@utils.arg('node', + metavar='', + help="UUID of node") +def do_node_validate(cc, args): + """Validate the node driver interfaces.""" + ifaces = cc.node.validate(args.node) + field_list = ['power', 'deploy', 'console', 'rescue'] + data = dict([(f, getattr(ifaces, f, '')) for f in field_list]) + utils.print_dict(data, wrap=72)