From f4d73c404cebbde741877525a76286060835ae0b Mon Sep 17 00:00:00 2001 From: Nolan Brubaker Date: Tue, 13 Dec 2016 12:21:21 -0500 Subject: [PATCH] Don't delete container_cidr key when overriding Commit f426eb98d1e4dc0b8b65f9191b038edcea849755 added a global_override deletion mechanism, but did not account for the automatically-created container_cidr key. This change ensures the key is skipped in deletion, and adds further tests for the _parse_gloabl_variables function. Change-Id: I5c48adea5920c1524be75939a75af6bed3a9743a Closes-Bug: #1649632 --- lib/generate.py | 5 +++- ...er_cidr_key_restored-4d232fff46ec00b9.yaml | 8 ++++++ tests/test_inventory.py | 27 +++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 releasenotes/notes/container_cidr_key_restored-4d232fff46ec00b9.yaml diff --git a/lib/generate.py b/lib/generate.py index 3ead52307d..ba2e31f05f 100755 --- a/lib/generate.py +++ b/lib/generate.py @@ -793,9 +793,12 @@ def _parse_global_variables(user_cidr, inventory, user_defined_config): ) logger.debug("Applied global_overrides") + kept_vars = user_defined_config['global_overrides'].keys() + kept_vars.append('container_cidr') + # Remove global overrides that were deleted from inventory, too for key in inventory['all']['vars'].keys(): - if key not in user_defined_config['global_overrides']: + if key not in kept_vars: logger.debug("Deleting key %s from inventory", key) del inventory['all']['vars'][key] diff --git a/releasenotes/notes/container_cidr_key_restored-4d232fff46ec00b9.yaml b/releasenotes/notes/container_cidr_key_restored-4d232fff46ec00b9.yaml new file mode 100644 index 0000000000..ce4a521495 --- /dev/null +++ b/releasenotes/notes/container_cidr_key_restored-4d232fff46ec00b9.yaml @@ -0,0 +1,8 @@ +--- +fixes: + - The 'container_cidr' key has been restored back to openstack_inventory.json + + The fix to remove deleted global override keys mistakenly deleted the + 'container_cidr' key, as well. This was used by downstream consumers, + and cannot be reconstructed with other information inside the inventory + file. Regression tests were also added. diff --git a/tests/test_inventory.py b/tests/test_inventory.py index 80f780e794..a38b3eeefb 100644 --- a/tests/test_inventory.py +++ b/tests/test_inventory.py @@ -832,6 +832,33 @@ class TestGlobalOverridesConfigDeletion(TestConfigCheckBase): self.assertEqual('bar', self.inventory['all']['vars']['foo']) + def test_container_cidr_key_retained(self): + user_cidr = self.user_defined_config['cidr_networks']['container'] + di._parse_global_variables(user_cidr, self.inventory, + self.user_defined_config) + self.assertIn('container_cidr', self.inventory['all']['vars']) + self.assertEqual(self.inventory['all']['vars']['container_cidr'], + user_cidr) + + def test_only_old_vars_deleted(self): + self.inventory['all']['vars']['foo'] = 'bar' + + di._parse_global_variables('', self.inventory, + self.user_defined_config) + + self.assertNotIn('foo', self.inventory['all']['vars']) + + def test_empty_vars(self): + del self.inventory['all'] + + di._parse_global_variables('', self.inventory, + self.user_defined_config) + + self.assertIn('container_cidr', self.inventory['all']['vars']) + + for key in self.user_defined_config['global_overrides']: + self.assertIn(key, self.inventory['all']['vars']) + class TestEnsureInventoryUptoDate(unittest.TestCase): def setUp(self):