diff --git a/tripleo_ansible/ansible_plugins/filter/helpers.py b/tripleo_ansible/ansible_plugins/filter/helpers.py index f94350e3b..192fe5251 100644 --- a/tripleo_ansible/ansible_plugins/filter/helpers.py +++ b/tripleo_ansible/ansible_plugins/filter/helpers.py @@ -64,15 +64,21 @@ class FilterModule(object): ordered_dict[o] = v return ordered_dict - def singledict(self, list_to_convert): + def singledict(self, list_to_convert, merge_with={}): """Generate a single dictionary from a list of dictionaries. This filter will return a single dictionary from a list of dictionaries. + If merge_with is set, the return dict will be merged with it. """ return_dict = {} for i in list_to_convert: return_dict.update(i) + for k in merge_with.keys(): + if k in return_dict: + for mk, mv in merge_with[k].items(): + return_dict[k][mk] = mv + break return return_dict def needs_delete(self, container_infos, config, config_id): diff --git a/tripleo_ansible/roles/tripleo-container-manage/defaults/main.yml b/tripleo_ansible/roles/tripleo-container-manage/defaults/main.yml index 151be69ca..db53c7da6 100644 --- a/tripleo_ansible/roles/tripleo-container-manage/defaults/main.yml +++ b/tripleo_ansible/roles/tripleo-container-manage/defaults/main.yml @@ -22,6 +22,7 @@ tripleo_container_manage_cli: podman tripleo_container_manage_concurrency: 1 tripleo_container_manage_config: "/var/lib/tripleo-config/" tripleo_container_manage_config_id: tripleo +tripleo_container_manage_config_overrides: {} tripleo_container_manage_config_patterns: 'hashed-*.json' tripleo_container_manage_debug: false tripleo_container_manage_healthcheck_disabled: false diff --git a/tripleo_ansible/roles/tripleo-container-manage/tasks/main.yml b/tripleo_ansible/roles/tripleo-container-manage/tasks/main.yml index 2f9ab4606..e15b77b42 100644 --- a/tripleo_ansible/roles/tripleo-container-manage/tasks/main.yml +++ b/tripleo_ansible/roles/tripleo-container-manage/tasks/main.yml @@ -74,7 +74,9 @@ loop: "{{ container_hashes.results }}" - name: Finalise hashes for all containers set_fact: - all_containers_hash: "{{ container_hashes.results | map(attribute='ansible_facts.container_hash') | list | singledict() }}" + all_containers_hash: >- + {{ container_hashes.results | map(attribute='ansible_facts.container_hash') | + list | singledict(merge_with=tripleo_container_manage_config_overrides) }} - name: "Manage systemd shutdown files" become: true diff --git a/tripleo_ansible/tests/plugins/filter/test_helpers.py b/tripleo_ansible/tests/plugins/filter/test_helpers.py index 17fa05a35..2a40f1b8e 100644 --- a/tripleo_ansible/tests/plugins/filter/test_helpers.py +++ b/tripleo_ansible/tests/plugins/filter/test_helpers.py @@ -125,6 +125,39 @@ class TestHelperFilters(tests_base.TestCase): result = self.filters.singledict(list) self.assertEqual(result, expected_dict) + def test_singledict_with_merge(self): + list = [ + { + 'keystone': { + 'start_order': 1, + 'image': 'quay.io/tripleo/keystone' + }, + }, + { + 'mysql': { + 'start_order': 0, + 'image': 'quay.io/tripleo/mysql' + } + } + ] + expected_dict = { + 'keystone': { + 'start_order': 1, + 'image': 'quay.io/tripleo/keystone' + }, + 'mysql': { + 'start_order': 0, + 'image': 'quay.io/tripleo/mysql:hotfix' + } + } + override = { + 'mysql': { + 'image': 'quay.io/tripleo/mysql:hotfix' + } + } + result = self.filters.singledict(list, merge_with=override) + self.assertEqual(result, expected_dict) + def test_list_of_keys(self): keys = [ {