Use {{role.name}}Services parameters
This would ensure that we don't build service chains for not enabled roles and cip would not try to pull images for services mapped to OS::Heat::None. Depends-On: https://review.opendev.org/c/openstack/tripleo-common/+/797173 Change-Id: I8f2f7700d0dd5a6c7459c8bc69d7937d72d23687
This commit is contained in:
parent
8df2e97d22
commit
e895c32635
|
@ -316,6 +316,8 @@ class TestDeployUndercloud(TestPluginV1):
|
||||||
mock.ANY,
|
mock.ANY,
|
||||||
default_flow_style=False)
|
default_flow_style=False)
|
||||||
|
|
||||||
|
@mock.patch('tripleoclient.utils.fetch_roles_file',
|
||||||
|
return_value={}, autospec=True)
|
||||||
@mock.patch('heatclient.common.template_utils.'
|
@mock.patch('heatclient.common.template_utils.'
|
||||||
'process_environment_and_files', return_value=({}, {}),
|
'process_environment_and_files', return_value=({}, {}),
|
||||||
autospec=True)
|
autospec=True)
|
||||||
|
@ -336,7 +338,8 @@ class TestDeployUndercloud(TestPluginV1):
|
||||||
mock_hc_templ_parse,
|
mock_hc_templ_parse,
|
||||||
mock_hc_env_parse,
|
mock_hc_env_parse,
|
||||||
mock_hc_get_templ_cont,
|
mock_hc_get_templ_cont,
|
||||||
mock_hc_process):
|
mock_hc_process,
|
||||||
|
mock_role_data):
|
||||||
|
|
||||||
with tempfile.NamedTemporaryFile(delete=False) as roles_file:
|
with tempfile.NamedTemporaryFile(delete=False) as roles_file:
|
||||||
self.addCleanup(os.unlink, roles_file.name)
|
self.addCleanup(os.unlink, roles_file.name)
|
||||||
|
@ -371,6 +374,8 @@ class TestDeployUndercloud(TestPluginV1):
|
||||||
mock.call(env_path='../outside.yaml',
|
mock.call(env_path='../outside.yaml',
|
||||||
include_env_in_files=False)])
|
include_env_in_files=False)])
|
||||||
|
|
||||||
|
@mock.patch('tripleoclient.utils.fetch_roles_file',
|
||||||
|
return_value={}, autospec=True)
|
||||||
@mock.patch('tripleoclient.utils.rel_or_abs_path')
|
@mock.patch('tripleoclient.utils.rel_or_abs_path')
|
||||||
@mock.patch('heatclient.common.template_utils.'
|
@mock.patch('heatclient.common.template_utils.'
|
||||||
'process_environment_and_files', return_value=({}, {}),
|
'process_environment_and_files', return_value=({}, {}),
|
||||||
|
@ -400,7 +405,8 @@ class TestDeployUndercloud(TestPluginV1):
|
||||||
mock_hc_env_parse,
|
mock_hc_env_parse,
|
||||||
mock_hc_get_templ_cont,
|
mock_hc_get_templ_cont,
|
||||||
mock_hc_process,
|
mock_hc_process,
|
||||||
mock_norm_path):
|
mock_norm_path,
|
||||||
|
mock_roles_data):
|
||||||
def hc_process(*args, **kwargs):
|
def hc_process(*args, **kwargs):
|
||||||
if 'abs.yaml' in kwargs['env_path']:
|
if 'abs.yaml' in kwargs['env_path']:
|
||||||
raise hc_exc.CommandError
|
raise hc_exc.CommandError
|
||||||
|
@ -444,92 +450,6 @@ class TestDeployUndercloud(TestPluginV1):
|
||||||
mock_yaml_dump.assert_has_calls([mock.call(rewritten_env,
|
mock_yaml_dump.assert_has_calls([mock.call(rewritten_env,
|
||||||
default_flow_style=False)])
|
default_flow_style=False)])
|
||||||
|
|
||||||
@mock.patch('tripleoclient.v1.tripleo_deploy.Deploy.'
|
|
||||||
'_populate_templates_dir')
|
|
||||||
@mock.patch('tripleoclient.utils.fetch_roles_file')
|
|
||||||
@mock.patch('tripleoclient.utils.rel_or_abs_path')
|
|
||||||
@mock.patch('heatclient.common.template_utils.'
|
|
||||||
'process_environment_and_files', return_value=({}, {}),
|
|
||||||
autospec=True)
|
|
||||||
@mock.patch('heatclient.common.template_utils.'
|
|
||||||
'get_template_contents', return_value=({}, {}),
|
|
||||||
autospec=True)
|
|
||||||
@mock.patch('heatclient.common.environment_format.'
|
|
||||||
'parse', autospec=True, return_value=dict())
|
|
||||||
@mock.patch('heatclient.common.template_format.'
|
|
||||||
'parse', autospec=True, return_value=dict())
|
|
||||||
@mock.patch('tripleoclient.v1.tripleo_deploy.Deploy.'
|
|
||||||
'_setup_heat_environments', autospec=True)
|
|
||||||
@mock.patch('yaml.safe_dump', autospec=True)
|
|
||||||
@mock.patch('yaml.safe_load', autospec=True)
|
|
||||||
@mock.patch('six.moves.builtins.open')
|
|
||||||
@mock.patch('tempfile.NamedTemporaryFile', autospec=True)
|
|
||||||
@mock.patch('tripleo_common.image.kolla_builder.'
|
|
||||||
'container_images_prepare_multi')
|
|
||||||
def test_deploy_tripleo_heat_templates_remove(self,
|
|
||||||
mock_cipm,
|
|
||||||
mock_temp, mock_open,
|
|
||||||
mock_yaml_load,
|
|
||||||
mock_yaml_dump,
|
|
||||||
mock_setup_heat_envs,
|
|
||||||
mock_hc_templ_parse,
|
|
||||||
mock_hc_env_parse,
|
|
||||||
mock_hc_get_templ_cont,
|
|
||||||
mock_hc_process,
|
|
||||||
mock_norm_path,
|
|
||||||
mock_fetch_roles,
|
|
||||||
mock_populate):
|
|
||||||
def hc_process(*args, **kwargs):
|
|
||||||
if 'myenv.yaml' in kwargs['env_path']:
|
|
||||||
env = {
|
|
||||||
'resource_registry': {
|
|
||||||
'OS::TripleO::Services::Foo': 'OS::Heat::None'}}
|
|
||||||
return ({}, env)
|
|
||||||
else:
|
|
||||||
return ({}, {})
|
|
||||||
|
|
||||||
mock_fetch_roles.return_value = [
|
|
||||||
{'name': 'Bar', 'ServicesDefault': [
|
|
||||||
'OS::TripleO::Services::Foo', 'OS::TripleO::Services::Bar']},
|
|
||||||
{'name': 'Foo', 'tags': ['primary']}
|
|
||||||
]
|
|
||||||
|
|
||||||
def set_tht(templates, stack_name):
|
|
||||||
self.cmd.tht_render = "tht_from"
|
|
||||||
|
|
||||||
mock_populate.side_effect = set_tht
|
|
||||||
|
|
||||||
mock_cipm.return_value = {}
|
|
||||||
|
|
||||||
mock_hc_process.side_effect = hc_process
|
|
||||||
|
|
||||||
parsed_args = self.check_parser(self.cmd,
|
|
||||||
['--templates', '/tmp/thtroot'], [])
|
|
||||||
|
|
||||||
rewritten_role = [
|
|
||||||
{'name': 'Bar', 'ServicesDefault': ['OS::TripleO::Services::Bar']},
|
|
||||||
{'name': 'Foo', 'tags': ['primary']}
|
|
||||||
]
|
|
||||||
myenv = {'resource_registry': {
|
|
||||||
'OS::Foo::Bar': '../outside.yaml',
|
|
||||||
'OS::Foo::Baz': './inside.yaml',
|
|
||||||
'OS::Foo::Qux': '/tmp/thtroot/abs.yaml',
|
|
||||||
'OS::Foo::Quux': '/tmp/thtroot42/notouch.yaml',
|
|
||||||
'OS::Foo::Corge': '/tmp/thtroot/puppet/foo.yaml'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mock_yaml_load.return_value = myenv
|
|
||||||
|
|
||||||
mock_setup_heat_envs.return_value = [
|
|
||||||
'./inside.yaml', '/tmp/thtroot/abs.yaml',
|
|
||||||
'/tmp/thtroot/puppet/foo.yaml',
|
|
||||||
'/tmp/thtroot/environments/myenv.yaml',
|
|
||||||
'../outside.yaml']
|
|
||||||
|
|
||||||
self.cmd._deploy_tripleo_heat_templates(self.orc, parsed_args)
|
|
||||||
|
|
||||||
mock_yaml_dump.assert_has_calls([mock.call(rewritten_role)])
|
|
||||||
|
|
||||||
@mock.patch('shutil.copy')
|
@mock.patch('shutil.copy')
|
||||||
@mock.patch('os.path.exists', return_value=False)
|
@mock.patch('os.path.exists', return_value=False)
|
||||||
def test_normalize_user_templates(self, mock_exists, mock_copy):
|
def test_normalize_user_templates(self, mock_exists, mock_copy):
|
||||||
|
|
|
@ -2750,11 +2750,9 @@ def get_undercloud_host_entry():
|
||||||
return cleanup_host_entry(out)
|
return cleanup_host_entry(out)
|
||||||
|
|
||||||
|
|
||||||
def build_image_params(env_files, parsed_args, new_tht_root, user_tht_root):
|
def build_enabled_sevices_image_params(env_files, parsed_args,
|
||||||
image_params = plan_utils.default_image_params()
|
new_tht_root, user_tht_root):
|
||||||
if parsed_args.disable_container_prepare:
|
params = {}
|
||||||
return image_params
|
|
||||||
|
|
||||||
if parsed_args.environment_directories:
|
if parsed_args.environment_directories:
|
||||||
env_files.extend(load_environment_directories(
|
env_files.extend(load_environment_directories(
|
||||||
parsed_args.environment_directories))
|
parsed_args.environment_directories))
|
||||||
|
@ -2765,13 +2763,21 @@ def build_image_params(env_files, parsed_args, new_tht_root, user_tht_root):
|
||||||
env_files, new_tht_root, user_tht_root,
|
env_files, new_tht_root, user_tht_root,
|
||||||
cleanup=(not parsed_args.no_cleanup))
|
cleanup=(not parsed_args.no_cleanup))
|
||||||
|
|
||||||
image_params.update(
|
roles_data = roles.get_roles_data(
|
||||||
|
parsed_args.roles_file, new_tht_root)
|
||||||
|
|
||||||
|
params.update(kolla_builder.get_enabled_services(env, roles_data))
|
||||||
|
params.update(plan_utils.default_image_params())
|
||||||
|
|
||||||
|
if parsed_args.disable_container_prepare:
|
||||||
|
return params
|
||||||
|
|
||||||
|
params.update(
|
||||||
kolla_builder.container_images_prepare_multi(
|
kolla_builder.container_images_prepare_multi(
|
||||||
env, roles.get_roles_data(parsed_args.roles_file, new_tht_root),
|
env, roles_data,
|
||||||
dry_run=True)
|
dry_run=True)
|
||||||
)
|
)
|
||||||
|
return params
|
||||||
return image_params
|
|
||||||
|
|
||||||
|
|
||||||
def copy_env_files(files_dict, tht_root):
|
def copy_env_files(files_dict, tht_root):
|
||||||
|
|
|
@ -248,7 +248,7 @@ class DeployOvercloud(command.Command):
|
||||||
created_env_files.append(
|
created_env_files.append(
|
||||||
os.path.join(new_tht_root, constants.DEFAULT_RESOURCE_REGISTRY))
|
os.path.join(new_tht_root, constants.DEFAULT_RESOURCE_REGISTRY))
|
||||||
|
|
||||||
parameters = utils.build_image_params(
|
parameters = utils.build_enabled_sevices_image_params(
|
||||||
created_env_files, parsed_args, new_tht_root, user_tht_root)
|
created_env_files, parsed_args, new_tht_root, user_tht_root)
|
||||||
|
|
||||||
self._update_parameters(
|
self._update_parameters(
|
||||||
|
|
|
@ -745,33 +745,12 @@ class Deploy(command.Command):
|
||||||
|
|
||||||
roles_data = utils.fetch_roles_file(
|
roles_data = utils.fetch_roles_file(
|
||||||
roles_file_path, parsed_args.templates)
|
roles_file_path, parsed_args.templates)
|
||||||
to_remove = set()
|
|
||||||
for key, value in env.get('resource_registry', {}).items():
|
parameter_defaults = env.get('parameter_defaults', {})
|
||||||
if (key.startswith('OS::TripleO::Services::') and
|
enabled_service_map = kolla_builder.get_enabled_services(
|
||||||
value == 'OS::Heat::None'):
|
env, roles_data)
|
||||||
to_remove.add(key)
|
if enabled_service_map:
|
||||||
if to_remove:
|
parameter_defaults.update(enabled_service_map)
|
||||||
for role in roles_data:
|
|
||||||
for service in to_remove:
|
|
||||||
try:
|
|
||||||
role.get('ServicesDefault', []).remove(service)
|
|
||||||
except ValueError:
|
|
||||||
pass
|
|
||||||
self.log.info('Removing unused services, updating roles')
|
|
||||||
# This will clean up the directory and set it up again
|
|
||||||
self.tht_render = None
|
|
||||||
self._populate_templates_dir(parsed_args.templates,
|
|
||||||
parsed_args.stack.lower())
|
|
||||||
roles_file_path = os.path.join(
|
|
||||||
self.tht_render, 'roles-data-override.yaml')
|
|
||||||
with open(roles_file_path, "w") as f:
|
|
||||||
f.write(yaml.safe_dump(roles_data))
|
|
||||||
# Redo the dance
|
|
||||||
environments = self._setup_heat_environments(
|
|
||||||
roles_file_path, networks_file_path, parsed_args)
|
|
||||||
env_files, env = utils.process_multiple_environments(
|
|
||||||
environments, self.tht_render, parsed_args.templates,
|
|
||||||
cleanup=parsed_args.cleanup)
|
|
||||||
|
|
||||||
if not parsed_args.disable_container_prepare:
|
if not parsed_args.disable_container_prepare:
|
||||||
self._prepare_container_images(env, roles_data)
|
self._prepare_container_images(env, roles_data)
|
||||||
|
|
Loading…
Reference in New Issue