diff --git a/ironic_tempest_plugin/config.py b/ironic_tempest_plugin/config.py index 7f425980..dc99e03f 100644 --- a/ironic_tempest_plugin/config.py +++ b/ironic_tempest_plugin/config.py @@ -180,4 +180,10 @@ BaremetalIntrospectionGroup = [ help="Is the auto-discovery feature enabled. Enroll hook " "should be specified in node_not_found_hook - processing " "section of inspector.conf"), + cfg.StrOpt('auto_discovery_default_driver', + # TODO(dtantsur): change to fake-hardware when Queens is no + # longer supported. + default='fake', + help="The driver expected to be set on newly discovered nodes. " + "Only has effect with auto_discovery_feature is True."), ] diff --git a/ironic_tempest_plugin/tests/scenario/test_introspection_discovery.py b/ironic_tempest_plugin/tests/scenario/test_introspection_discovery.py index 8760dd25..2ec91f1d 100644 --- a/ironic_tempest_plugin/tests/scenario/test_introspection_discovery.py +++ b/ironic_tempest_plugin/tests/scenario/test_introspection_discovery.py @@ -10,8 +10,6 @@ # License for the specific language governing permissions and limitations # under the License. -import six - from tempest import config from tempest.lib import decorators from tempest import test # noqa @@ -40,7 +38,26 @@ class InspectorDiscoveryTest(introspection_manager.InspectorScenarioTest): discovered_node = self._get_discovery_node() self.node_info = self._get_node_info(discovered_node) - rule = self._generate_discovery_rule(self.node_info) + rule = { + "description": "Auto-discovery rule", + "actions": [ + # Set an attribute in case we cannot access the introspection + # data to check the auto_discovered flag directly. + {"action": "set-attribute", + "path": "/extra/discovered", + "value": "yes"}, + # Re-assign the name to use it later in the test. + {"action": "set-attribute", + "path": "/name", + "value": self.node_info['name']}, + ], + # This flag must be automatically set by the auto-discovery process + "conditions": [ + {"op": "eq", + "field": "data://auto_discovered", + "value": True} + ] + } self.rule_import_from_dict(rule) self.addCleanup(self.rule_purge) @@ -65,27 +82,9 @@ class InspectorDiscoveryTest(introspection_manager.InspectorScenarioTest): self.assertIsNotNone(discovered_node) return discovered_node - def _generate_discovery_rule(self, node): - rule = dict() - rule["description"] = "Node %s discovery rule" % node['name'] - rule["actions"] = [ - {"action": "set-attribute", "path": "/name", - "value": "%s" % node['name']}, - {"action": "set-attribute", "path": "/driver", - "value": "%s" % node['driver']}, - ] - - for key, value in node['driver_info'].items(): - rule["actions"].append( - {"action": "set-attribute", "path": "/driver_info/%s" % key, - "value": "%s" % value}) - rule["conditions"] = [ - {"op": "eq", "field": "data://auto_discovered", "value": True} - ] - return rule - def verify_node_introspection_data(self, node): data = self.introspection_data(node['uuid']) + self.assertTrue(data['auto_discovered']) self.assertEqual(data['cpu_arch'], self.flavor['properties']['cpu_arch']) self.assertEqual(int(data['memory_mb']), @@ -109,11 +108,6 @@ class InspectorDiscoveryTest(introspection_manager.InspectorScenarioTest): self.assertEqual(expected_cpu_arch, node['properties']['cpu_arch']) - def verify_node_driver_info(self, node_info, inspected_node): - for key in node_info['driver_info']: - self.assertEqual(six.text_type(node_info['driver_info'][key]), - inspected_node['driver_info'].get(key)) - @decorators.idempotent_id('dd3abe5e-0d23-488d-bb4e-344cdeff7dcb') def test_bearmetal_auto_discovery(self): """This test case follows this set of operations: @@ -121,9 +115,9 @@ class InspectorDiscoveryTest(introspection_manager.InspectorScenarioTest): * Choose appropriate node, based on provision state; * Get node info; * Generate discovery rule; - * Delete discovered node from ironic; - * Start baremetal vm via virsh; - * Wating for node introspection; + * Start introspection via ironic-inspector API; + * Delete the node from ironic; + * Wating for node discovery; * Verify introspected node. """ # NOTE(aarefiev): workaround for infra, 'tempest' user doesn't @@ -145,6 +139,9 @@ class InspectorDiscoveryTest(introspection_manager.InspectorScenarioTest): self.verify_node_flavor(inspected_node) if CONF.service_available.swift: self.verify_node_introspection_data(inspected_node) - self.verify_node_driver_info(self.node_info, inspected_node) self.assertEqual(ProvisionStates.ENROLL, inspected_node['provision_state']) + self.assertEqual( + CONF.baremetal_introspection.auto_discovery_default_driver, + inspected_node['driver']) + self.assertEqual('yes', inspected_node['extra']['discovered'])