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:
parent
76121bf896
commit
1a59850f0a
|
@ -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):
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue