Add rescue_interface to node and driver

Add support for rescue_interface to the commands below:

 * openstack baremetal node create
 * openstack baremetal node show
 * openstack baremetal node set
 * openstack baremetal node unset
 * openstack baremetal driver list
 * openstack baremetal driver show

Change-Id: Ib91d67a95092713add0d5025d8755f212c59f659
Partial-Bug: #1526449
This commit is contained in:
Dao Cong Tien 2017-11-02 20:25:59 +07:00 committed by Julia Kreger
parent fce885bf64
commit e0d8b16161
9 changed files with 81 additions and 10 deletions

View File

@ -397,6 +397,12 @@ class CreateBaremetalNode(command.ShowOne):
help=_('RAID interface used by the node\'s driver. This is '
'only applicable when the specified --driver is a '
'hardware type.'))
parser.add_argument(
'--rescue-interface',
metavar='<rescue_interface>',
help=_('Rescue interface used by the node\'s driver. This is '
'only applicable when the specified --driver is a '
'hardware type.'))
parser.add_argument(
'--storage-interface',
metavar='<storage_interface>',
@ -425,8 +431,8 @@ class CreateBaremetalNode(command.ShowOne):
'deploy_interface', 'inspect_interface',
'management_interface', 'network_interface',
'power_interface', 'raid_interface',
'storage_interface', 'vendor_interface',
'resource_class']
'rescue_interface', 'storage_interface',
'vendor_interface', 'resource_class']
fields = dict((k, v) for (k, v) in vars(parsed_args).items()
if k in field_list and not (v is None))
fields = utils.args_array_to_dict(fields, 'driver_info')
@ -1020,6 +1026,11 @@ class SetBaremetalNode(command.Command):
metavar='<raid_interface>',
help=_('Set the RAID interface for the node'),
)
parser.add_argument(
'--rescue-interface',
metavar='<rescue_interface>',
help=_('Set the rescue interface for the node'),
)
parser.add_argument(
'--storage-interface',
metavar='<storage_interface>',
@ -1147,6 +1158,11 @@ class SetBaremetalNode(command.Command):
"raid_interface=%s" % parsed_args.raid_interface]
properties.extend(utils.args_array_to_patch(
'add', raid_interface))
if parsed_args.rescue_interface:
rescue_interface = [
"rescue_interface=%s" % parsed_args.rescue_interface]
properties.extend(utils.args_array_to_patch(
'add', rescue_interface))
if parsed_args.storage_interface:
storage_interface = [
"storage_interface=%s" % parsed_args.storage_interface]
@ -1365,6 +1381,12 @@ class UnsetBaremetalNode(command.Command):
action='store_true',
help=_('Unset RAID interface on this baremetal node'),
)
parser.add_argument(
"--rescue-interface",
dest='rescue_interface',
action='store_true',
help=_('Unset rescue interface on this baremetal node'),
)
parser.add_argument(
"--storage-interface",
dest='storage_interface',
@ -1443,6 +1465,9 @@ class UnsetBaremetalNode(command.Command):
if parsed_args.raid_interface:
properties.extend(utils.args_array_to_patch('remove',
['raid_interface']))
if parsed_args.rescue_interface:
properties.extend(utils.args_array_to_patch('remove',
['rescue_interface']))
if parsed_args.storage_interface:
properties.extend(utils.args_array_to_patch('remove',
['storage_interface']))

View File

@ -72,6 +72,7 @@ baremetal_driver_default_management_if = 'management'
baremetal_driver_default_network_if = 'network'
baremetal_driver_default_power_if = 'power'
baremetal_driver_default_raid_if = 'raid'
baremetal_driver_default_rescue_if = 'rescue'
baremetal_driver_default_storage_if = 'storage'
baremetal_driver_default_vendor_if = 'vendor'
baremetal_driver_enabled_boot_ifs = ['boot', 'boot2']
@ -82,6 +83,7 @@ baremetal_driver_enabled_management_ifs = ['management', 'management2']
baremetal_driver_enabled_network_ifs = ['network', 'network2']
baremetal_driver_enabled_power_ifs = ['power', 'power2']
baremetal_driver_enabled_raid_ifs = ['raid', 'raid2']
baremetal_driver_enabled_rescue_ifs = ['rescue', 'rescue2']
baremetal_driver_enabled_storage_ifs = ['storage', 'storage2']
baremetal_driver_enabled_vendor_ifs = ['vendor', 'vendor2']
@ -97,6 +99,7 @@ BAREMETAL_DRIVER = {
'default_network_interface': baremetal_driver_default_network_if,
'default_power_interface': baremetal_driver_default_power_if,
'default_raid_interface': baremetal_driver_default_raid_if,
'default_rescue_interface': baremetal_driver_default_rescue_if,
'default_storage_interface': baremetal_driver_default_storage_if,
'default_vendor_interface': baremetal_driver_default_vendor_if,
'enabled_boot_interfaces': baremetal_driver_enabled_boot_ifs,
@ -107,6 +110,7 @@ BAREMETAL_DRIVER = {
'enabled_network_interfaces': baremetal_driver_enabled_network_ifs,
'enabled_power_interfaces': baremetal_driver_enabled_power_ifs,
'enabled_raid_interfaces': baremetal_driver_enabled_raid_ifs,
'enabled_rescue_interfaces': baremetal_driver_enabled_rescue_ifs,
'enabled_storage_interfaces': baremetal_driver_enabled_storage_ifs,
'enabled_vendor_interfaces': baremetal_driver_enabled_vendor_ifs,
}

View File

@ -96,6 +96,7 @@ class TestListBaremetalDriver(TestBaremetalDriver):
'Default Network Interface',
'Default Power Interface',
'Default RAID Interface',
'Default Rescue Interface',
'Default Storage Interface',
'Default Vendor Interface',
'Enabled Boot Interfaces',
@ -106,6 +107,7 @@ class TestListBaremetalDriver(TestBaremetalDriver):
'Enabled Network Interfaces',
'Enabled Power Interfaces',
'Enabled RAID Interfaces',
'Enabled Rescue Interfaces',
'Enabled Storage Interfaces',
'Enabled Vendor Interfaces'
)
@ -123,6 +125,7 @@ class TestListBaremetalDriver(TestBaremetalDriver):
baremetal_fakes.baremetal_driver_default_network_if,
baremetal_fakes.baremetal_driver_default_power_if,
baremetal_fakes.baremetal_driver_default_raid_if,
baremetal_fakes.baremetal_driver_default_rescue_if,
baremetal_fakes.baremetal_driver_default_storage_if,
baremetal_fakes.baremetal_driver_default_vendor_if,
', '.join(baremetal_fakes.baremetal_driver_enabled_boot_ifs),
@ -133,6 +136,7 @@ class TestListBaremetalDriver(TestBaremetalDriver):
', '.join(baremetal_fakes.baremetal_driver_enabled_network_ifs),
', '.join(baremetal_fakes.baremetal_driver_enabled_power_ifs),
', '.join(baremetal_fakes.baremetal_driver_enabled_raid_ifs),
', '.join(baremetal_fakes.baremetal_driver_enabled_rescue_ifs),
', '.join(baremetal_fakes.baremetal_driver_enabled_storage_ifs),
', '.join(baremetal_fakes.baremetal_driver_enabled_vendor_ifs),
),)
@ -361,13 +365,15 @@ class TestShowBaremetalDriver(TestBaremetalDriver):
'default_deploy_interface', 'default_inspect_interface',
'default_management_interface', 'default_network_interface',
'default_power_interface', 'default_raid_interface',
'default_storage_interface', 'default_vendor_interface',
'default_rescue_interface', 'default_storage_interface',
'default_vendor_interface',
'enabled_boot_interfaces', 'enabled_console_interfaces',
'enabled_deploy_interfaces', 'enabled_inspect_interfaces',
'enabled_management_interfaces',
'enabled_network_interfaces', 'enabled_power_interfaces',
'enabled_raid_interfaces', 'enabled_storage_interfaces',
'enabled_vendor_interfaces', 'hosts', 'name', 'type')
'enabled_raid_interfaces', 'enabled_rescue_interfaces',
'enabled_storage_interfaces', 'enabled_vendor_interfaces',
'hosts', 'name', 'type')
self.assertEqual(collist, columns)
datalist = (
@ -379,6 +385,7 @@ class TestShowBaremetalDriver(TestBaremetalDriver):
baremetal_fakes.baremetal_driver_default_network_if,
baremetal_fakes.baremetal_driver_default_power_if,
baremetal_fakes.baremetal_driver_default_raid_if,
baremetal_fakes.baremetal_driver_default_rescue_if,
baremetal_fakes.baremetal_driver_default_storage_if,
baremetal_fakes.baremetal_driver_default_vendor_if,
', '.join(baremetal_fakes.baremetal_driver_enabled_boot_ifs),
@ -389,6 +396,7 @@ class TestShowBaremetalDriver(TestBaremetalDriver):
', '.join(baremetal_fakes.baremetal_driver_enabled_network_ifs),
', '.join(baremetal_fakes.baremetal_driver_enabled_power_ifs),
', '.join(baremetal_fakes.baremetal_driver_enabled_raid_ifs),
', '.join(baremetal_fakes.baremetal_driver_enabled_rescue_ifs),
', '.join(baremetal_fakes.baremetal_driver_enabled_storage_ifs),
', '.join(baremetal_fakes.baremetal_driver_enabled_vendor_ifs),
', '.join(baremetal_fakes.baremetal_driver_hosts),

View File

@ -425,6 +425,11 @@ class TestBaremetalCreate(TestBaremetal):
[('raid_interface', 'raid')],
{'raid_interface': 'raid'})
def test_baremetal_create_with_rescue_interface(self):
self.check_with_options(['--rescue-interface', 'rescue'],
[('rescue_interface', 'rescue')],
{'rescue_interface': 'rescue'})
def test_baremetal_create_with_storage_interface(self):
self.check_with_options(['--storage-interface', 'storage'],
[('storage_interface', 'storage')],
@ -599,7 +604,8 @@ class TestBaremetalList(TestBaremetal):
'Deploy Interface', 'Inspect Interface',
'Management Interface', 'Network Interface',
'Power Interface', 'RAID Interface',
'Storage Interface', 'Vendor Interface')
'Rescue Interface', 'Storage Interface',
'Vendor Interface')
self.assertEqual(collist, columns)
datalist = ((
'',
@ -641,6 +647,7 @@ class TestBaremetalList(TestBaremetal):
'',
'',
'',
'',
), )
self.assertEqual(datalist, tuple(data))
@ -2031,6 +2038,9 @@ class TestBaremetalSet(TestBaremetal):
def test_baremetal_set_raid_interface(self):
self._test_baremetal_set_hardware_interface('raid')
def test_baremetal_set_rescue_interface(self):
self._test_baremetal_set_hardware_interface('rescue')
def test_baremetal_set_storage_interface(self):
self._test_baremetal_set_hardware_interface('storage')
@ -2649,6 +2659,9 @@ class TestBaremetalUnset(TestBaremetal):
def test_baremetal_unset_raid_interface(self):
self._test_baremetal_unset_hw_interface('raid')
def test_baremetal_unset_rescue_interface(self):
self._test_baremetal_unset_hw_interface('rescue')
def test_baremetal_unset_storage_interface(self):
self._test_baremetal_unset_hw_interface('storage')

View File

@ -39,12 +39,14 @@ class DriverShellTest(utils.BaseTestCase):
'default_deploy_interface', 'default_inspect_interface',
'default_management_interface', 'default_network_interface',
'default_power_interface', 'default_raid_interface',
'default_storage_interface', 'default_vendor_interface',
'default_rescue_interface', 'default_storage_interface',
'default_vendor_interface',
'enabled_boot_interfaces', 'enabled_console_interfaces',
'enabled_deploy_interfaces', 'enabled_inspect_interfaces',
'enabled_management_interfaces', 'enabled_network_interfaces',
'enabled_power_interfaces', 'enabled_raid_interfaces',
'enabled_storage_interfaces', 'enabled_vendor_interfaces']
'enabled_rescue_interfaces', 'enabled_storage_interfaces',
'enabled_vendor_interfaces']
act = actual.keys()
self.assertEqual(sorted(exp), sorted(act))

View File

@ -55,6 +55,7 @@ class NodeShellTest(utils.BaseTestCase):
'network_interface',
'power_interface',
'raid_interface',
'rescue_interface',
'storage_interface',
'vendor_interface',
'power_state',

View File

@ -51,8 +51,8 @@ class NodeManager(base.CreateManager):
'deploy_interface', 'inspect_interface',
'management_interface', 'network_interface',
'power_interface', 'raid_interface',
'storage_interface', 'vendor_interface',
'resource_class']
'rescue_interface', 'storage_interface',
'vendor_interface', 'resource_class']
_resource_name = 'nodes'
def list(self, associated=None, maintenance=None, marker=None, limit=None,

View File

@ -47,6 +47,7 @@ class Resource(object):
'default_network_interface': 'Default Network Interface',
'default_power_interface': 'Default Power Interface',
'default_raid_interface': 'Default RAID Interface',
'default_rescue_interface': 'Default Rescue Interface',
'default_storage_interface': 'Default Storage Interface',
'default_vendor_interface': 'Default Vendor Interface',
'description': 'Description',
@ -61,6 +62,7 @@ class Resource(object):
'enabled_network_interfaces': 'Enabled Network Interfaces',
'enabled_power_interfaces': 'Enabled Power Interfaces',
'enabled_raid_interfaces': 'Enabled RAID Interfaces',
'enabled_rescue_interfaces': 'Enabled Rescue Interfaces',
'enabled_storage_interfaces': 'Enabled Storage Interfaces',
'enabled_vendor_interfaces': 'Enabled Vendor Interfaces',
'extra': 'Extra',
@ -104,6 +106,7 @@ class Resource(object):
'network_interface': 'Network Interface',
'power_interface': 'Power Interface',
'raid_interface': 'RAID Interface',
'rescue_interface': 'Rescue Interface',
'storage_interface': 'Storage Interface',
'vendor_interface': 'Vendor Interface',
'standalone_ports_supported': 'Standalone Ports Supported',
@ -225,6 +228,7 @@ NODE_DETAILED_RESOURCE = Resource(
'network_interface',
'power_interface',
'raid_interface',
'rescue_interface',
'storage_interface',
'vendor_interface',
],
@ -339,6 +343,7 @@ DRIVER_DETAILED_RESOURCE = Resource(
'default_network_interface',
'default_power_interface',
'default_raid_interface',
'default_rescue_interface',
'default_storage_interface',
'default_vendor_interface',
'enabled_boot_interfaces',
@ -349,6 +354,7 @@ DRIVER_DETAILED_RESOURCE = Resource(
'enabled_network_interfaces',
'enabled_power_interfaces',
'enabled_raid_interfaces',
'enabled_rescue_interfaces',
'enabled_storage_interfaces',
'enabled_vendor_interfaces'
],

View File

@ -0,0 +1,12 @@
---
features:
- |
Adds support for rescue_interface for the commands below.
They are available starting with ironic API microversion 1.38.
* ``openstack baremetal node create``
* ``openstack baremetal node show``
* ``openstack baremetal node set``
* ``openstack baremetal node unset``
* ``openstack baremetal driver list``
* ``openstack baremetal driver show``