Add node validate OSC command

Adds 'openstack baremetal node validate' command to the OpenStackClient
plugin.

Change-Id: I53c0f949f2c0f2c353c40b3333669ed64c1062c4
Partial-Bug: #1526479
This commit is contained in:
Ruby Loo 2016-08-23 12:15:18 -04:00
parent 9088df2518
commit d8cd1ce54b
4 changed files with 81 additions and 0 deletions

View File

@ -1103,3 +1103,36 @@ class UnsetBaremetal(UnsetBaremetalNode):
self.log.warning("This command is deprecated. Instead, use "
"'openstack baremetal node unset'.")
super(UnsetBaremetal, self).take_action(parsed_args)
class ValidateBaremetalNode(command.Lister):
"""Validate a node's driver interfaces"""
log = logging.getLogger(__name__ + ".ValidateBaremetalNode")
def get_parser(self, prog_name):
parser = super(ValidateBaremetalNode, self).get_parser(prog_name)
parser.add_argument(
'node',
metavar='<node>',
help="Name or UUID of the node")
return parser
def take_action(self, parsed_args):
self.log.debug("take_action(%s)", parsed_args)
baremetal_client = self.app.client_manager.baremetal
interfaces = baremetal_client.node.validate(parsed_args.node)._info
data = []
for key, value in interfaces.items():
interface = {'interface': key}
interface.update(value)
data.append(interface)
field_labels = ['Interface', 'Result', 'Reason']
fields = ['interface', 'result', 'reason']
data = oscutils.sort_items(data, 'interface')
return (field_labels,
(oscutils.get_dict_properties(s, fields) for s in data))

View File

@ -1619,3 +1619,44 @@ class TestBaremetalUnset(TestBaremetal):
'node_uuid',
[{'path': '/name', 'op': 'remove'}]
)
class TestValidate(TestBaremetal):
def setUp(self):
super(TestValidate, self).setUp()
# Get the command object to test
self.cmd = baremetal_node.ValidateBaremetalNode(self.app, None)
self.baremetal_mock.node.validate.return_value = (
baremetal_fakes.FakeBaremetalResource(
None,
{'management': {'result': True},
'console': {'reason': "Missing 'ipmi_terminal_port'",
'result': False},
'network': {'result': True},
'power': {'result': True},
'deploy': {'result': True},
'inspect': {'reason': "not supported", 'result': None},
'boot': {'result': True},
'raid': {'result': True}},
loaded=True,
))
def test_baremetal_validate_no_arg(self):
arglist = []
verifylist = []
self.assertRaises(oscutils.ParserException,
self.check_parser,
self.cmd, arglist, verifylist)
def test_baremetal_validate(self):
arglist = ['node_uuid']
verifylist = [('node', 'node_uuid')]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.cmd.take_action(parsed_args)
self.baremetal_mock.node.validate.assert_called_once_with('node_uuid')

View File

@ -0,0 +1,6 @@
---
features:
- |
Extends the OpenStackClient plug-in with the new command:
* openstack baremetal node validate

View File

@ -64,6 +64,7 @@ openstack.baremetal.v1 =
baremetal_node_show = ironicclient.osc.v1.baremetal_node:ShowBaremetalNode
baremetal_node_undeploy = ironicclient.osc.v1.baremetal_node:UndeployBaremetalNode
baremetal_node_unset = ironicclient.osc.v1.baremetal_node:UnsetBaremetalNode
baremetal_node_validate = ironicclient.osc.v1.baremetal_node:ValidateBaremetalNode
baremetal_port_create = ironicclient.osc.v1.baremetal_port:CreateBaremetalPort
baremetal_port_delete = ironicclient.osc.v1.baremetal_port:DeleteBaremetalPort
baremetal_port_list = ironicclient.osc.v1.baremetal_port:ListBaremetalPort