Merge "Rework the ironic-inspector auto-discovery test"
diff --git a/ironic_tempest_plugin/config.py b/ironic_tempest_plugin/config.py
index 7f42598..dc99e03 100644
--- a/ironic_tempest_plugin/config.py
+++ b/ironic_tempest_plugin/config.py
@@ -180,4 +180,10 @@
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 8760dd2..2ec91f1 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 @@
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 @@
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 @@
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 @@
* 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 @@
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'])