From d6b98f25103c68efc4a59643d8b2e5e6bc44f453 Mon Sep 17 00:00:00 2001 From: Rabi Mishra Date: Fri, 11 Dec 2020 08:04:41 +0530 Subject: [PATCH] [stable] Raise proper error for None network config When using custom network configs, if the 'outputs' section is not correct in the template, there won't be any error in stack create/update. HostnameNetworkConfigMap would have configs as null i.e {HOSTNAME: null,} and we'll look for None software configs using heat api resulting in a traceback not easy to understand. Let's add a check to notify the user with a proper error. This is not required in master and victoria branches, as we've moved away from using heat software configs for network config. Closes-Bug: #1907746 Change-Id: If79f7051fec4b4f648c4acf9d62474028e0831bd (cherry picked from commit 0dc90c97d2d7959e59184be501c739694412a55b) --- tripleo_common/tests/utils/test_config.py | 8 +++++--- tripleo_common/utils/config.py | 7 +++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/tripleo_common/tests/utils/test_config.py b/tripleo_common/tests/utils/test_config.py index 8cc8a674d..dcd6b5e96 100644 --- a/tripleo_common/tests/utils/test_config.py +++ b/tripleo_common/tests/utils/test_config.py @@ -880,7 +880,8 @@ class TestConfig(base.TestCase): self.config = ooo_config.Config(heat) stack = mock.Mock() server_roles = dict(Controller='controller') - mock_get_network_config_data.return_value = dict(Controller='config') + mock_get_network_config_data.return_value = dict( + Controller='56f27b7a-7bb8-40bc-bfdb-a46f7f806b88') config_dir = '/tmp/tht' self.config.render_network_config(stack, config_dir, server_roles) @@ -898,8 +899,9 @@ class TestConfig(base.TestCase): self.config = ooo_config.Config(heat) stack = mock.Mock() server_roles = dict(node1='Controller') - mock_get_network_config_data.return_value = dict(node1='config', - node2='config') + mock_get_network_config_data.return_value = dict( + node1='56f27b7a-7bb8-40bc-bfdb-a46f7f806b88', + node2='56f27b7a-7bb8-40bc-bfdb-a46f7f806b88') config_dir = '/tmp/tht' self.config.render_network_config(stack, config_dir, server_roles) self.assertEqual(2, mock_open.call_count) diff --git a/tripleo_common/utils/config.py b/tripleo_common/utils/config.py index e081cab77..c9f619c1d 100644 --- a/tripleo_common/utils/config.py +++ b/tripleo_common/utils/config.py @@ -23,6 +23,7 @@ import warnings import yaml import jinja2 +from oslo_utils import uuidutils from tripleo_common import constants from tripleo_common.utils.safe_import import git @@ -221,6 +222,12 @@ class Config(object): network_config = self.get_network_config_data(stack) for server, config in network_config.items(): if server in server_roles: + if config is None or not uuidutils.is_uuid_like(config): + # config should be a valid heat resource id + err_msg = ('Invalid network config for role %s. Please ' + 'check the network config templates used.' % + server_roles[server]) + raise ValueError(err_msg) server_deployment_dir = os.path.join( config_dir, server_roles[server], server) self._mkdir(server_deployment_dir)