Add support for storage_interface to node and driver CLI

Add support for storage_interface to the commands below:

 * ironic node-create
 * ironic node-show
 * ironic node-update
 * ironic driver-list
 * ironic driver-show
 * 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: Ia0437529bcb1a3e8dd20bde55eb57e0443290028
Partial-Bug: #1526231
Depends-On: I2c74f386291e588a25612f73de08e8367795acff
This commit is contained in:
Dao Cong Tien 2017-05-19 12:25:26 +07:00 committed by John L. Villalovos
parent 15dc9cf958
commit 525f60912c
11 changed files with 98 additions and 12 deletions

View File

@ -26,7 +26,7 @@ LOG = logging.getLogger(__name__)
API_VERSION_OPTION = 'os_baremetal_api_version' API_VERSION_OPTION = 'os_baremetal_api_version'
API_NAME = 'baremetal' API_NAME = 'baremetal'
LAST_KNOWN_API_VERSION = 32 LAST_KNOWN_API_VERSION = 33
API_VERSIONS = { API_VERSIONS = {
'1.%d' % i: 'ironicclient.v1.client.Client' '1.%d' % i: 'ironicclient.v1.client.Client'
for i in range(1, LAST_KNOWN_API_VERSION + 1) for i in range(1, LAST_KNOWN_API_VERSION + 1)

View File

@ -389,6 +389,10 @@ class CreateBaremetalNode(command.ShowOne):
help=_('RAID interface used by the node\'s driver. This is ' help=_('RAID interface used by the node\'s driver. This is '
'only applicable when the specified --driver is a ' 'only applicable when the specified --driver is a '
'hardware type.')) 'hardware type.'))
parser.add_argument(
'--storage-interface',
metavar='<storage_interface>',
help=_('Storage interface used by the node\'s driver.'))
parser.add_argument( parser.add_argument(
'--vendor-interface', '--vendor-interface',
metavar='<vendor_interface>', metavar='<vendor_interface>',
@ -413,7 +417,8 @@ class CreateBaremetalNode(command.ShowOne):
'deploy_interface', 'inspect_interface', 'deploy_interface', 'inspect_interface',
'management_interface', 'network_interface', 'management_interface', 'network_interface',
'power_interface', 'raid_interface', 'power_interface', 'raid_interface',
'vendor_interface', 'resource_class'] 'storage_interface', 'vendor_interface',
'resource_class']
fields = dict((k, v) for (k, v) in vars(parsed_args).items() fields = dict((k, v) for (k, v) in vars(parsed_args).items()
if k in field_list and not (v is None)) if k in field_list and not (v is None))
fields = utils.args_array_to_dict(fields, 'driver_info') fields = utils.args_array_to_dict(fields, 'driver_info')
@ -991,6 +996,11 @@ class SetBaremetalNode(command.Command):
metavar='<raid_interface>', metavar='<raid_interface>',
help=_('Set the RAID interface for the node'), help=_('Set the RAID interface for the node'),
) )
parser.add_argument(
'--storage-interface',
metavar='<storage_interface>',
help=_('Set the storage interface for the node'),
)
parser.add_argument( parser.add_argument(
'--vendor-interface', '--vendor-interface',
metavar='<vendor_interface>', metavar='<vendor_interface>',
@ -1113,6 +1123,11 @@ class SetBaremetalNode(command.Command):
"raid_interface=%s" % parsed_args.raid_interface] "raid_interface=%s" % parsed_args.raid_interface]
properties.extend(utils.args_array_to_patch( properties.extend(utils.args_array_to_patch(
'add', raid_interface)) 'add', raid_interface))
if parsed_args.storage_interface:
storage_interface = [
"storage_interface=%s" % parsed_args.storage_interface]
properties.extend(utils.args_array_to_patch(
'add', storage_interface))
if parsed_args.vendor_interface: if parsed_args.vendor_interface:
vendor_interface = [ vendor_interface = [
"vendor_interface=%s" % parsed_args.vendor_interface] "vendor_interface=%s" % parsed_args.vendor_interface]
@ -1343,6 +1358,12 @@ class UnsetBaremetalNode(command.Command):
action='store_true', action='store_true',
help=_('Unset RAID interface on this baremetal node'), help=_('Unset RAID interface on this baremetal node'),
) )
parser.add_argument(
"--storage-interface",
dest='storage_interface',
action='store_true',
help=_('Unset storage interface on this baremetal node'),
)
parser.add_argument( parser.add_argument(
"--vendor-interface", "--vendor-interface",
dest='vendor_interface', dest='vendor_interface',
@ -1415,6 +1436,9 @@ class UnsetBaremetalNode(command.Command):
if parsed_args.raid_interface: if parsed_args.raid_interface:
properties.extend(utils.args_array_to_patch('remove', properties.extend(utils.args_array_to_patch('remove',
['raid_interface'])) ['raid_interface']))
if parsed_args.storage_interface:
properties.extend(utils.args_array_to_patch('remove',
['storage_interface']))
if parsed_args.vendor_interface: if parsed_args.vendor_interface:
properties.extend(utils.args_array_to_patch('remove', properties.extend(utils.args_array_to_patch('remove',
['vendor_interface'])) ['vendor_interface']))

View File

@ -71,6 +71,7 @@ baremetal_driver_default_management_if = 'management'
baremetal_driver_default_network_if = 'network' baremetal_driver_default_network_if = 'network'
baremetal_driver_default_power_if = 'power' baremetal_driver_default_power_if = 'power'
baremetal_driver_default_raid_if = 'raid' baremetal_driver_default_raid_if = 'raid'
baremetal_driver_default_storage_if = 'storage'
baremetal_driver_default_vendor_if = 'vendor' baremetal_driver_default_vendor_if = 'vendor'
baremetal_driver_enabled_boot_ifs = ['boot', 'boot2'] baremetal_driver_enabled_boot_ifs = ['boot', 'boot2']
baremetal_driver_enabled_console_ifs = ['console', 'console2'] baremetal_driver_enabled_console_ifs = ['console', 'console2']
@ -80,6 +81,7 @@ baremetal_driver_enabled_management_ifs = ['management', 'management2']
baremetal_driver_enabled_network_ifs = ['network', 'network2'] baremetal_driver_enabled_network_ifs = ['network', 'network2']
baremetal_driver_enabled_power_ifs = ['power', 'power2'] baremetal_driver_enabled_power_ifs = ['power', 'power2']
baremetal_driver_enabled_raid_ifs = ['raid', 'raid2'] baremetal_driver_enabled_raid_ifs = ['raid', 'raid2']
baremetal_driver_enabled_storage_ifs = ['storage', 'storage2']
baremetal_driver_enabled_vendor_ifs = ['vendor', 'vendor2'] baremetal_driver_enabled_vendor_ifs = ['vendor', 'vendor2']
BAREMETAL_DRIVER = { BAREMETAL_DRIVER = {
@ -94,6 +96,7 @@ BAREMETAL_DRIVER = {
'default_network_interface': baremetal_driver_default_network_if, 'default_network_interface': baremetal_driver_default_network_if,
'default_power_interface': baremetal_driver_default_power_if, 'default_power_interface': baremetal_driver_default_power_if,
'default_raid_interface': baremetal_driver_default_raid_if, 'default_raid_interface': baremetal_driver_default_raid_if,
'default_storage_interface': baremetal_driver_default_storage_if,
'default_vendor_interface': baremetal_driver_default_vendor_if, 'default_vendor_interface': baremetal_driver_default_vendor_if,
'enabled_boot_interfaces': baremetal_driver_enabled_boot_ifs, 'enabled_boot_interfaces': baremetal_driver_enabled_boot_ifs,
'enabled_console_interfaces': baremetal_driver_enabled_console_ifs, 'enabled_console_interfaces': baremetal_driver_enabled_console_ifs,
@ -103,6 +106,7 @@ BAREMETAL_DRIVER = {
'enabled_network_interfaces': baremetal_driver_enabled_network_ifs, 'enabled_network_interfaces': baremetal_driver_enabled_network_ifs,
'enabled_power_interfaces': baremetal_driver_enabled_power_ifs, 'enabled_power_interfaces': baremetal_driver_enabled_power_ifs,
'enabled_raid_interfaces': baremetal_driver_enabled_raid_ifs, 'enabled_raid_interfaces': baremetal_driver_enabled_raid_ifs,
'enabled_storage_interfaces': baremetal_driver_enabled_storage_ifs,
'enabled_vendor_interfaces': baremetal_driver_enabled_vendor_ifs, 'enabled_vendor_interfaces': baremetal_driver_enabled_vendor_ifs,
} }

View File

@ -96,6 +96,7 @@ class TestListBaremetalDriver(TestBaremetalDriver):
'Default Network Interface', 'Default Network Interface',
'Default Power Interface', 'Default Power Interface',
'Default RAID Interface', 'Default RAID Interface',
'Default Storage Interface',
'Default Vendor Interface', 'Default Vendor Interface',
'Enabled Boot Interfaces', 'Enabled Boot Interfaces',
'Enabled Console Interfaces', 'Enabled Console Interfaces',
@ -105,6 +106,7 @@ class TestListBaremetalDriver(TestBaremetalDriver):
'Enabled Network Interfaces', 'Enabled Network Interfaces',
'Enabled Power Interfaces', 'Enabled Power Interfaces',
'Enabled RAID Interfaces', 'Enabled RAID Interfaces',
'Enabled Storage Interfaces',
'Enabled Vendor Interfaces' 'Enabled Vendor Interfaces'
) )
self.assertEqual(collist, tuple(columns)) self.assertEqual(collist, tuple(columns))
@ -121,6 +123,7 @@ class TestListBaremetalDriver(TestBaremetalDriver):
baremetal_fakes.baremetal_driver_default_network_if, baremetal_fakes.baremetal_driver_default_network_if,
baremetal_fakes.baremetal_driver_default_power_if, baremetal_fakes.baremetal_driver_default_power_if,
baremetal_fakes.baremetal_driver_default_raid_if, baremetal_fakes.baremetal_driver_default_raid_if,
baremetal_fakes.baremetal_driver_default_storage_if,
baremetal_fakes.baremetal_driver_default_vendor_if, baremetal_fakes.baremetal_driver_default_vendor_if,
', '.join(baremetal_fakes.baremetal_driver_enabled_boot_ifs), ', '.join(baremetal_fakes.baremetal_driver_enabled_boot_ifs),
', '.join(baremetal_fakes.baremetal_driver_enabled_console_ifs), ', '.join(baremetal_fakes.baremetal_driver_enabled_console_ifs),
@ -130,6 +133,7 @@ class TestListBaremetalDriver(TestBaremetalDriver):
', '.join(baremetal_fakes.baremetal_driver_enabled_network_ifs), ', '.join(baremetal_fakes.baremetal_driver_enabled_network_ifs),
', '.join(baremetal_fakes.baremetal_driver_enabled_power_ifs), ', '.join(baremetal_fakes.baremetal_driver_enabled_power_ifs),
', '.join(baremetal_fakes.baremetal_driver_enabled_raid_ifs), ', '.join(baremetal_fakes.baremetal_driver_enabled_raid_ifs),
', '.join(baremetal_fakes.baremetal_driver_enabled_storage_ifs),
', '.join(baremetal_fakes.baremetal_driver_enabled_vendor_ifs), ', '.join(baremetal_fakes.baremetal_driver_enabled_vendor_ifs),
),) ),)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
@ -357,13 +361,13 @@ class TestShowBaremetalDriver(TestBaremetalDriver):
'default_deploy_interface', 'default_inspect_interface', 'default_deploy_interface', 'default_inspect_interface',
'default_management_interface', 'default_network_interface', 'default_management_interface', 'default_network_interface',
'default_power_interface', 'default_raid_interface', 'default_power_interface', 'default_raid_interface',
'default_vendor_interface', 'enabled_boot_interfaces', 'default_storage_interface', 'default_vendor_interface',
'enabled_console_interfaces', 'enabled_deploy_interfaces', 'enabled_boot_interfaces', 'enabled_console_interfaces',
'enabled_inspect_interfaces', 'enabled_deploy_interfaces', 'enabled_inspect_interfaces',
'enabled_management_interfaces', 'enabled_management_interfaces',
'enabled_network_interfaces', 'enabled_power_interfaces', 'enabled_network_interfaces', 'enabled_power_interfaces',
'enabled_raid_interfaces', 'enabled_vendor_interfaces', 'enabled_raid_interfaces', 'enabled_storage_interfaces',
'hosts', 'name', 'type') 'enabled_vendor_interfaces', 'hosts', 'name', 'type')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
@ -375,6 +379,7 @@ class TestShowBaremetalDriver(TestBaremetalDriver):
baremetal_fakes.baremetal_driver_default_network_if, baremetal_fakes.baremetal_driver_default_network_if,
baremetal_fakes.baremetal_driver_default_power_if, baremetal_fakes.baremetal_driver_default_power_if,
baremetal_fakes.baremetal_driver_default_raid_if, baremetal_fakes.baremetal_driver_default_raid_if,
baremetal_fakes.baremetal_driver_default_storage_if,
baremetal_fakes.baremetal_driver_default_vendor_if, baremetal_fakes.baremetal_driver_default_vendor_if,
', '.join(baremetal_fakes.baremetal_driver_enabled_boot_ifs), ', '.join(baremetal_fakes.baremetal_driver_enabled_boot_ifs),
', '.join(baremetal_fakes.baremetal_driver_enabled_console_ifs), ', '.join(baremetal_fakes.baremetal_driver_enabled_console_ifs),
@ -384,6 +389,7 @@ class TestShowBaremetalDriver(TestBaremetalDriver):
', '.join(baremetal_fakes.baremetal_driver_enabled_network_ifs), ', '.join(baremetal_fakes.baremetal_driver_enabled_network_ifs),
', '.join(baremetal_fakes.baremetal_driver_enabled_power_ifs), ', '.join(baremetal_fakes.baremetal_driver_enabled_power_ifs),
', '.join(baremetal_fakes.baremetal_driver_enabled_raid_ifs), ', '.join(baremetal_fakes.baremetal_driver_enabled_raid_ifs),
', '.join(baremetal_fakes.baremetal_driver_enabled_storage_ifs),
', '.join(baremetal_fakes.baremetal_driver_enabled_vendor_ifs), ', '.join(baremetal_fakes.baremetal_driver_enabled_vendor_ifs),
', '.join(baremetal_fakes.baremetal_driver_hosts), ', '.join(baremetal_fakes.baremetal_driver_hosts),
baremetal_fakes.baremetal_driver_name, baremetal_fakes.baremetal_driver_name,

View File

@ -424,6 +424,11 @@ class TestBaremetalCreate(TestBaremetal):
[('raid_interface', 'raid')], [('raid_interface', 'raid')],
{'raid_interface': 'raid'}) {'raid_interface': 'raid'})
def test_baremetal_create_with_storage_interface(self):
self.check_with_options(['--storage-interface', 'storage'],
[('storage_interface', 'storage')],
{'storage_interface': 'storage'})
def test_baremetal_create_with_vendor_interface(self): def test_baremetal_create_with_vendor_interface(self):
self.check_with_options(['--vendor-interface', 'vendor'], self.check_with_options(['--vendor-interface', 'vendor'],
[('vendor_interface', 'vendor')], [('vendor_interface', 'vendor')],
@ -593,7 +598,7 @@ class TestBaremetalList(TestBaremetal):
'Deploy Interface', 'Inspect Interface', 'Deploy Interface', 'Inspect Interface',
'Management Interface', 'Network Interface', 'Management Interface', 'Network Interface',
'Power Interface', 'RAID Interface', 'Power Interface', 'RAID Interface',
'Vendor Interface') 'Storage Interface', 'Vendor Interface')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = ((
'', '',
@ -633,6 +638,7 @@ class TestBaremetalList(TestBaremetal):
'', '',
'', '',
'', '',
'',
), ) ), )
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
@ -1857,6 +1863,9 @@ class TestBaremetalSet(TestBaremetal):
def test_baremetal_set_raid_interface(self): def test_baremetal_set_raid_interface(self):
self._test_baremetal_set_hardware_interface('raid') self._test_baremetal_set_hardware_interface('raid')
def test_baremetal_set_storage_interface(self):
self._test_baremetal_set_hardware_interface('storage')
def test_baremetal_set_vendor_interface(self): def test_baremetal_set_vendor_interface(self):
self._test_baremetal_set_hardware_interface('vendor') self._test_baremetal_set_hardware_interface('vendor')
@ -2460,6 +2469,9 @@ class TestBaremetalUnset(TestBaremetal):
def test_baremetal_unset_raid_interface(self): def test_baremetal_unset_raid_interface(self):
self._test_baremetal_unset_hw_interface('raid') self._test_baremetal_unset_hw_interface('raid')
def test_baremetal_unset_storage_interface(self):
self._test_baremetal_unset_hw_interface('storage')
def test_baremetal_unset_vendor_interface(self): def test_baremetal_unset_vendor_interface(self):
self._test_baremetal_unset_hw_interface('vendor') self._test_baremetal_unset_hw_interface('vendor')

View File

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

View File

@ -55,6 +55,7 @@ class NodeShellTest(utils.BaseTestCase):
'network_interface', 'network_interface',
'power_interface', 'power_interface',
'raid_interface', 'raid_interface',
'storage_interface',
'vendor_interface', 'vendor_interface',
'power_state', 'power_state',
'properties', 'properties',
@ -286,6 +287,16 @@ class NodeShellTest(utils.BaseTestCase):
client_mock.node.create.assert_called_once_with( client_mock.node.create.assert_called_once_with(
raid_interface='raid') raid_interface='raid')
def test_do_node_create_with_storage_interface(self):
client_mock = mock.MagicMock()
args = mock.MagicMock()
args.storage_interface = 'storage'
args.json = False
n_shell.do_node_create(client_mock, args)
client_mock.node.create.assert_called_once_with(
storage_interface='storage')
def test_do_node_create_with_vendor_interface(self): def test_do_node_create_with_vendor_interface(self):
client_mock = mock.MagicMock() client_mock = mock.MagicMock()
args = mock.MagicMock() args = mock.MagicMock()

View File

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

View File

@ -259,6 +259,10 @@ def do_node_list(cc, args):
help='RAID interface used by the node\'s driver. This is ' help='RAID interface used by the node\'s driver. This is '
'only applicable when the specified --driver is a ' 'only applicable when the specified --driver is a '
'hardware type.') 'hardware type.')
@cliutils.arg(
'--storage-interface',
metavar='<storage-interface>',
help='Storage interface used by the node\'s driver.')
@cliutils.arg( @cliutils.arg(
'--vendor-interface', '--vendor-interface',
metavar='<vendor-interface>', metavar='<vendor-interface>',
@ -278,7 +282,8 @@ def do_node_create(cc, args):
'deploy_interface', 'inspect_interface', 'deploy_interface', 'inspect_interface',
'management_interface', 'network_interface', 'management_interface', 'network_interface',
'power_interface', 'raid_interface', 'power_interface', 'raid_interface',
'vendor_interface', 'resource_class'] 'storage_interface', 'vendor_interface',
'resource_class']
fields = dict((k, v) for (k, v) in vars(args).items() fields = dict((k, v) for (k, v) in vars(args).items()
if k in field_list and not (v is None)) if k in field_list and not (v is None))
fields = utils.args_array_to_dict(fields, 'driver_info') fields = utils.args_array_to_dict(fields, 'driver_info')

View File

@ -47,6 +47,7 @@ class Resource(object):
'default_network_interface': 'Default Network Interface', 'default_network_interface': 'Default Network Interface',
'default_power_interface': 'Default Power Interface', 'default_power_interface': 'Default Power Interface',
'default_raid_interface': 'Default RAID Interface', 'default_raid_interface': 'Default RAID Interface',
'default_storage_interface': 'Default Storage Interface',
'default_vendor_interface': 'Default Vendor Interface', 'default_vendor_interface': 'Default Vendor Interface',
'description': 'Description', 'description': 'Description',
'driver': 'Driver', 'driver': 'Driver',
@ -60,6 +61,7 @@ class Resource(object):
'enabled_network_interfaces': 'Enabled Network Interfaces', 'enabled_network_interfaces': 'Enabled Network Interfaces',
'enabled_power_interfaces': 'Enabled Power Interfaces', 'enabled_power_interfaces': 'Enabled Power Interfaces',
'enabled_raid_interfaces': 'Enabled RAID Interfaces', 'enabled_raid_interfaces': 'Enabled RAID Interfaces',
'enabled_storage_interfaces': 'Enabled Storage Interfaces',
'enabled_vendor_interfaces': 'Enabled Vendor Interfaces', 'enabled_vendor_interfaces': 'Enabled Vendor Interfaces',
'extra': 'Extra', 'extra': 'Extra',
'hosts': 'Active host(s)', 'hosts': 'Active host(s)',
@ -101,6 +103,7 @@ class Resource(object):
'network_interface': 'Network Interface', 'network_interface': 'Network Interface',
'power_interface': 'Power Interface', 'power_interface': 'Power Interface',
'raid_interface': 'RAID Interface', 'raid_interface': 'RAID Interface',
'storage_interface': 'Storage Interface',
'vendor_interface': 'Vendor Interface', 'vendor_interface': 'Vendor Interface',
'standalone_ports_supported': 'Standalone Ports Supported', 'standalone_ports_supported': 'Standalone Ports Supported',
'id': 'ID', 'id': 'ID',
@ -219,6 +222,7 @@ NODE_DETAILED_RESOURCE = Resource(
'network_interface', 'network_interface',
'power_interface', 'power_interface',
'raid_interface', 'raid_interface',
'storage_interface',
'vendor_interface', 'vendor_interface',
], ],
sort_excluded=[ sort_excluded=[
@ -326,6 +330,7 @@ DRIVER_DETAILED_RESOURCE = Resource(
'default_network_interface', 'default_network_interface',
'default_power_interface', 'default_power_interface',
'default_raid_interface', 'default_raid_interface',
'default_storage_interface',
'default_vendor_interface', 'default_vendor_interface',
'enabled_boot_interfaces', 'enabled_boot_interfaces',
'enabled_console_interfaces', 'enabled_console_interfaces',
@ -335,6 +340,7 @@ DRIVER_DETAILED_RESOURCE = Resource(
'enabled_network_interfaces', 'enabled_network_interfaces',
'enabled_power_interfaces', 'enabled_power_interfaces',
'enabled_raid_interfaces', 'enabled_raid_interfaces',
'enabled_storage_interfaces',
'enabled_vendor_interfaces' 'enabled_vendor_interfaces'
], ],
override_labels={'name': 'Supported driver(s)'} override_labels={'name': 'Supported driver(s)'}

View File

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