Add node-validate to cli

Add the node-validate command that triggers the validation of the 'core'
and 'standardized' driver interfaces of a given node. This will also be
used by the ironic driver on nova to validate the node driver interfaces
before deploying it.

Change-Id: I93811c9bfbfe4f7b8559fc4ce566c8d4e19a54ac
This commit is contained in:
Lucas Alvares Gomes 2013-11-27 14:59:49 +00:00
parent f91e1b5bb9
commit 9712331aaa
3 changed files with 37 additions and 0 deletions
ironicclient

@ -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)

@ -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)

@ -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='<node uuid>',
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)