Add support for enrolling nodes with "ipmi" hardware type
This is a future replacement for pxe_ipmitool driver and is functionally equivalent to it by default. Part of blueprint ironic-driver-composition Change-Id: I83f6eada13839cf204c0e522ae9e48930c8e6a69
This commit is contained in:
parent
a2a8b26f6c
commit
8aef178eb1
@ -0,0 +1,4 @@
|
||||
---
|
||||
features:
|
||||
- |
|
||||
Add support for enrolling nodes with ``ipmi`` hardware type.
|
@ -275,7 +275,8 @@ class GenerateFencingParametersAction(base.TripleOAction):
|
||||
"bm_name": hostmap[mac_addr]["baremetal_name"]})
|
||||
if self.delay:
|
||||
params["delay"] = self.delay
|
||||
elif node["pm_type"].split('_')[1] in ("ipmitool", "ilo", "drac"):
|
||||
elif (node['pm_type'] == 'ipmi' or node["pm_type"].split('_')[1] in
|
||||
("ipmitool", "ilo", "drac")):
|
||||
# IPMI fencing driver
|
||||
node_data["agent"] = "fence_ipmilan"
|
||||
if self.fence_action:
|
||||
|
@ -167,6 +167,7 @@ class FindNodeHandlerTest(base.TestCase):
|
||||
('fake_pxe', 'fake'),
|
||||
('pxe_ssh', 'ssh'),
|
||||
('pxe_ipmitool', 'ipmi'),
|
||||
('ipmi', 'ipmi'),
|
||||
('pxe_ilo', 'ilo'),
|
||||
('agent_irmc', 'irmc')]
|
||||
for driver, prefix in test:
|
||||
@ -390,6 +391,9 @@ class NodesTest(base.TestCase):
|
||||
ironic.node.update.assert_called_once_with(
|
||||
ironic.node.get.return_value.uuid, mock.ANY)
|
||||
|
||||
def test_update_node_ironic_ipmi(self):
|
||||
self._update_by_type('ipmi')
|
||||
|
||||
def test_update_node_ironic_pxe_ipmitool(self):
|
||||
self._update_by_type('pxe_ipmitool')
|
||||
|
||||
@ -509,6 +513,22 @@ class NodesTest(base.TestCase):
|
||||
driver_info={'ucs_password': 'random', 'ucs_address': 'foo.bar',
|
||||
'ucs_username': 'test'})
|
||||
|
||||
def test_register_ironic_node_ipmi(self):
|
||||
node_properties = {"cpus": "1",
|
||||
"memory_mb": "2048",
|
||||
"local_gb": "30",
|
||||
"cpu_arch": "amd64",
|
||||
"capabilities": "num_nics:6"}
|
||||
node = self._get_node()
|
||||
node['pm_type'] = 'ipmi'
|
||||
node['pm_port'] = '6230'
|
||||
client = mock.MagicMock()
|
||||
nodes.register_ironic_node(node, client=client)
|
||||
client.node.create.assert_called_once_with(
|
||||
driver='ipmi', name='node1', properties=node_properties,
|
||||
driver_info={'ipmi_password': 'random', 'ipmi_address': 'foo.bar',
|
||||
'ipmi_username': 'test', 'ipmi_port': '6230'})
|
||||
|
||||
def test_register_ironic_node_pxe_ipmitool(self):
|
||||
node_properties = {"cpus": "1",
|
||||
"memory_mb": "2048",
|
||||
@ -612,12 +632,12 @@ class TestPopulateNodeMapping(base.TestCase):
|
||||
node1 = ironic_node('abcdef', 'pxe_ssh', None)
|
||||
node2 = ironic_node('fedcba', 'pxe_ipmitool',
|
||||
{'ipmi_address': '10.0.1.2'})
|
||||
client.node.list_ports.side_effect = ([ironic_port('aaa')],
|
||||
[])
|
||||
client.node.list.return_value = [node1, node2]
|
||||
node3 = ironic_node('xyz', 'ipmi', {'ipmi_address': '10.0.1.3'})
|
||||
client.node.list_ports.side_effect = ([ironic_port('aaa')], [], [])
|
||||
client.node.list.return_value = [node1, node2, node3]
|
||||
expected = {'mac': {'aaa': 'abcdef'},
|
||||
'pm_addr': {'10.0.1.2': 'fedcba'},
|
||||
'uuids': {'abcdef', 'fedcba'}}
|
||||
'pm_addr': {'10.0.1.2': 'fedcba', '10.0.1.3': 'xyz'},
|
||||
'uuids': {'abcdef', 'fedcba', 'xyz'}}
|
||||
self.assertEqual(expected, nodes._populate_node_mapping(client))
|
||||
|
||||
def test_populate_node_mapping_ironic_fake_pxe(self):
|
||||
@ -645,6 +665,10 @@ VALID_NODE_JSON = [
|
||||
'pm_addr': '192.168.0.1',
|
||||
'pm_user': 'root',
|
||||
'pm_password': 'p@$$w0rd'},
|
||||
{'pm_type': 'ipmi',
|
||||
'pm_addr': '192.168.1.1',
|
||||
'pm_user': 'root',
|
||||
'pm_password': 'p@$$w0rd'},
|
||||
{'pm_type': 'pxe_ipmitool',
|
||||
'pm_addr': '192.168.0.1',
|
||||
'pm_user': 'root',
|
||||
@ -657,6 +681,18 @@ VALID_NODE_JSON = [
|
||||
'capabilities': {'foo': 'bar'},
|
||||
'kernel_id': 'kernel1',
|
||||
'ramdisk_id': 'ramdisk1'},
|
||||
{'pm_type': 'ipmi',
|
||||
'pm_addr': '192.168.1.1',
|
||||
'pm_user': 'root',
|
||||
'pm_password': 'p@$$w0rd',
|
||||
'pm_port': 1234,
|
||||
'ipmi_priv_level': 'USER',
|
||||
'mac': ['dd:ee:ff:aa:bb:cc',
|
||||
'44:55:66:11:22:33'],
|
||||
'name': 'foobar2',
|
||||
'capabilities': {'foo': 'bar'},
|
||||
'kernel_id': 'kernel1',
|
||||
'ramdisk_id': 'ramdisk1'},
|
||||
{'pm_type': 'pxe_ssh',
|
||||
'pm_addr': '1.2.3.4',
|
||||
'pm_user': 'root',
|
||||
@ -696,7 +732,7 @@ class TestValidateNodes(base.TestCase):
|
||||
'pm_addr': '1.1.1.1',
|
||||
'pm_user': 'root',
|
||||
'pm_password': 'p@$$w0rd'},
|
||||
{'pm_type': 'pxe_ipmitool',
|
||||
{'pm_type': 'ipmi',
|
||||
'pm_addr': '1.1.1.1',
|
||||
'pm_user': 'user',
|
||||
'pm_password': 'p@$$w0rd'},
|
||||
@ -724,7 +760,7 @@ class TestValidateNodes(base.TestCase):
|
||||
'pm_user': 'root',
|
||||
'pm_password': 'p@$$w0rd',
|
||||
'mac': ['11:22:33:44:55:66']},
|
||||
{'pm_type': 'pxe_ipmitool',
|
||||
{'pm_type': 'ipmi',
|
||||
'pm_addr': '1.2.1.1',
|
||||
'pm_user': 'user',
|
||||
'pm_password': 'p@$$w0rd',
|
||||
|
@ -189,7 +189,7 @@ class iBootDriverInfo(PrefixedDriverInfo):
|
||||
|
||||
DRIVER_INFO = {
|
||||
# production drivers
|
||||
'.*_ipmi(tool|native)': PrefixedDriverInfo('ipmi', has_port=True),
|
||||
'(ipmi|.*_ipmitool)': PrefixedDriverInfo('ipmi', has_port=True),
|
||||
'.*_drac': PrefixedDriverInfo('drac', address_field='host',
|
||||
has_port=True),
|
||||
'.*_ilo': PrefixedDriverInfo('ilo'),
|
||||
|
Loading…
x
Reference in New Issue
Block a user