Get NetworkConfig from RoleNetworkConfigMap

When we have NetworkConfig as role level resources, this change
ensure that the role level NetworkConfig is prefered if present.

A follow up patch will remove the code that pulls NetworkConfig's
from the node level.

Change-Id: Ib19b57d6f5abdac4cd142d9e64c1cd1f7279b4ee
This commit is contained in:
Harald Jensås 2020-09-24 05:25:31 +02:00
parent 76121bf896
commit 1a59850f0a
2 changed files with 69 additions and 8 deletions

View File

@ -915,6 +915,48 @@ class TestConfig(base.TestCase):
self.assertEqual('/tmp/tht/Controller/NetworkConfig',
mock_open.call_args_list[0][0][0])
@patch('tripleo_common.utils.config.Config.get_network_config_data')
@patch('tripleo_common.utils.config.Config.get_role_network_config_data')
def test_render_role_network_config_empty_dict(
self, mock_get_role_network_config_data,
mock_get_network_config_data):
heat = mock.MagicMock()
heat.stacks.get.return_value = fakes.create_tht_stack()
config_mock = mock.MagicMock()
config_mock.config = {}
heat.software_configs.get.return_value = config_mock
self.config = ooo_config.Config(heat)
stack = mock.Mock()
mock_get_role_network_config_data.return_value = dict(
Controller='config')
config_dir = '/tmp/tht'
self.config.render_network_config(stack, config_dir, mock.ANY)
mock_get_network_config_data.assert_not_called()
@patch.object(ooo_config.Config, '_open_file')
@patch('tripleo_common.utils.config.Config.get_network_config_data')
@patch('tripleo_common.utils.config.Config.get_role_network_config_data')
def test_render_role_network_config(self,
mock_get_role_network_config_data,
mock_get_network_config_data,
mock_open):
heat = mock.MagicMock()
heat.stacks.get.return_value = fakes.create_tht_stack()
config_mock = mock.MagicMock()
config_mock.config = 'some config'
heat.software_configs.get.return_value = config_mock
self.config = ooo_config.Config(heat)
stack = mock.Mock()
mock_get_role_network_config_data.return_value = dict(
Controller='config')
config_dir = '/tmp/tht'
self.config.render_network_config(stack, config_dir, mock.ANY)
self.assertEqual(1, mock_open.call_count)
self.assertEqual('/tmp/tht/Controller/NetworkConfig',
mock_open.call_args_list[0][0][0])
mock_get_network_config_data.assert_not_called()
class OvercloudConfigTest(base.TestCase):

View File

@ -63,6 +63,9 @@ class Config(object):
def get_network_config_data(self, stack):
return self.stack_outputs.get("HostnameNetworkConfigMap")
def get_role_network_config_data(self, stack):
return self.stack_outputs.get("RoleNetworkConfigMap")
def get_deployment_data(self, stack,
nested_depth=constants.NESTED_DEPTH):
deployments = self.client.resources.list(
@ -224,13 +227,11 @@ class Config(object):
raise e
def render_network_config(self, stack, config_dir, server_roles):
network_config = self.get_network_config_data(stack)
roles_rendered = []
for server, config in network_config.items():
if (server in server_roles
and server_roles[server] not in roles_rendered):
network_config_role_path = os.path.join(
config_dir, server_roles[server], "NetworkConfig")
role_network_config = self.get_role_network_config_data(stack)
if role_network_config is not None:
for role, config in role_network_config.items():
network_config_role_path = os.path.join(config_dir, role,
"NetworkConfig")
# check if it's actual config or heat config_id
# this will be dropped once we stop using SoftwareConfig
if isinstance(config, dict):
@ -241,7 +242,25 @@ class Config(object):
if str_config:
with self._open_file(network_config_role_path) as f:
f.write(str_config)
roles_rendered.append(server_roles[server])
else:
network_config = self.get_network_config_data(stack)
roles_rendered = []
for server, config in network_config.items():
if (server in server_roles
and server_roles[server] not in roles_rendered):
network_config_role_path = os.path.join(
config_dir, server_roles[server], "NetworkConfig")
# check if it's actual config or heat config_id
# this will be dropped once we stop using SoftwareConfig
if isinstance(config, dict):
str_config = json.dumps(config)
else:
str_config = self.client.software_configs.get(
config).config
if str_config:
with self._open_file(network_config_role_path) as f:
f.write(str_config)
roles_rendered.append(server_roles[server])
def write_config(self, stack, name, config_dir, config_type=None):
# Get role data: