diff --git a/releasenotes/notes/resource-class-6fffaaf3b39b36c5.yaml b/releasenotes/notes/resource-class-6fffaaf3b39b36c5.yaml new file mode 100644 index 000000000..f48d91333 --- /dev/null +++ b/releasenotes/notes/resource-class-6fffaaf3b39b36c5.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + Set the ``resource_class`` field of newly created nodes to ``baremetal`` + to adapt to the recent scheduling changes. See `bug 1708653 + `_ for details. diff --git a/tripleo_common/tests/utils/test_nodes.py b/tripleo_common/tests/utils/test_nodes.py index 52543ce7b..6dfff1da6 100644 --- a/tripleo_common/tests/utils/test_nodes.py +++ b/tripleo_common/tests/utils/test_nodes.py @@ -249,6 +249,7 @@ class NodesTest(base.TestCase): pxe_node = mock.call(driver="ipmi", name='node1', driver_info=pxe_node_driver_info, + resource_class='baremetal', properties=node_properties) port_call = mock.call(node_uuid=ironic.node.create.return_value.uuid, address='aaa') @@ -270,6 +271,7 @@ class NodesTest(base.TestCase): pxe_node = mock.call(driver="ipmi", name='node1', driver_info=pxe_node_driver_info, + resource_class='baremetal', properties=node_properties) port_call = mock.call(node_uuid=ironic.node.create.return_value.uuid, address='aaa') @@ -299,6 +301,7 @@ class NodesTest(base.TestCase): pxe_node = mock.call(driver="ipmi", name='node1', driver_info=pxe_node_driver_info, + resource_class='baremetal', properties=node_properties) port_call = mock.call(node_uuid=ironic.node.create.return_value.uuid, address='aaa') @@ -322,6 +325,7 @@ class NodesTest(base.TestCase): name='node1', driver_info=pxe_node_driver_info, properties=node_properties, + resource_class='baremetal', uuid="abcdef") port_call = mock.call(node_uuid=ironic.node.create.return_value.uuid, address='aaa') @@ -346,6 +350,7 @@ class NodesTest(base.TestCase): pxe_node = mock.call(driver="ipmi", name='node1', driver_info=pxe_node_driver_info, + resource_class='baremetal', properties=node_properties) port_call = mock.call(node_uuid=ironic.node.create.return_value.uuid, address='aaa') @@ -380,6 +385,7 @@ class NodesTest(base.TestCase): name='node1', driver_info=pxe_node_driver_info, properties=node_properties, + resource_class='baremetal', **interfaces) port_call = mock.call(node_uuid=ironic.node.create.return_value.uuid, address='aaa') @@ -592,6 +598,7 @@ class NodesTest(base.TestCase): client.node.create.assert_called_once_with(driver=mock.ANY, name='node1', properties=node_properties, + resource_class='baremetal', driver_info=mock.ANY) def test_register_ironic_node_fake_pxe(self): @@ -609,6 +616,7 @@ class NodesTest(base.TestCase): client.node.create.assert_called_once_with(driver='fake_pxe', name='node1', properties=node_properties, + resource_class='baremetal', driver_info={}) def test_register_ironic_node_pxe_ucs(self): @@ -623,6 +631,7 @@ class NodesTest(base.TestCase): nodes.register_ironic_node(node, client=client) client.node.create.assert_called_once_with( driver='pxe_ucs', name='node1', properties=node_properties, + resource_class='baremetal', driver_info={'ucs_password': 'random', 'ucs_address': 'foo.bar', 'ucs_username': 'test'}) @@ -639,6 +648,7 @@ class NodesTest(base.TestCase): nodes.register_ironic_node(node, client=client) client.node.create.assert_called_once_with( driver='ipmi', name='node1', properties=node_properties, + resource_class='baremetal', driver_info={'ipmi_password': 'random', 'ipmi_address': 'foo.bar', 'ipmi_username': 'test', 'ipmi_port': '6230'}) @@ -655,6 +665,7 @@ class NodesTest(base.TestCase): nodes.register_ironic_node(node, client=client) client.node.create.assert_called_once_with( driver='pxe_ipmitool', name='node1', properties=node_properties, + resource_class='baremetal', driver_info={'ipmi_password': 'random', 'ipmi_address': 'foo.bar', 'ipmi_username': 'test', 'ipmi_port': '6230'}) @@ -671,6 +682,7 @@ class NodesTest(base.TestCase): nodes.register_ironic_node(node, client=client) client.node.create.assert_called_once_with( driver='pxe_drac', name='node1', properties=node_properties, + resource_class='baremetal', driver_info={'drac_password': 'random', 'drac_address': 'foo.bar', 'drac_username': 'test', 'drac_port': '6230'}) @@ -687,6 +699,7 @@ class NodesTest(base.TestCase): nodes.register_ironic_node(node, client=client) client.node.create.assert_called_once_with( driver='redfish', name='node1', properties=node_properties, + resource_class='baremetal', driver_info={'redfish_password': 'random', 'redfish_address': 'foo.bar', 'redfish_username': 'test', diff --git a/tripleo_common/utils/nodes.py b/tripleo_common/utils/nodes.py index ed0687358..d160a00ee 100644 --- a/tripleo_common/utils/nodes.py +++ b/tripleo_common/utils/nodes.py @@ -299,6 +299,12 @@ def register_ironic_node(node, client): interface_fields = {field: node.pop(field) for field in _KNOWN_INTERFACE_FIELDS if field in node} + resource_class = node.pop('resource_class', 'baremetal') + if resource_class != 'baremetal': + LOG.warning('Resource class for a new node will be set to %s, which ' + 'is different from the default "baremetal". A custom ' + 'flavor will be required to deploy on such node', + resource_class) driver_info.update(handler.convert(node)) @@ -318,7 +324,8 @@ def register_ironic_node(node, client): create_map = {"driver": node["pm_type"], "properties": properties, - "driver_info": driver_info} + "driver_info": driver_info, + "resource_class": resource_class} create_map.update(interface_fields) for field in ('name', 'uuid'): @@ -390,6 +397,7 @@ _NON_DRIVER_FIELDS = {'cpu': '/properties/cpus', 'disk': '/properties/local_gb', 'arch': '/properties/cpu_arch', 'name': '/name', + 'resource_class': '/resource_class', 'kernel_id': '/driver_info/deploy_kernel', 'ramdisk_id': '/driver_info/deploy_ramdisk', 'capabilities': '/properties/capabilities'}