diff --git a/tripleo_ansible/ansible_plugins/filter/helpers.py b/tripleo_ansible/ansible_plugins/filter/helpers.py index 8c5ea6e43..a10130e7c 100644 --- a/tripleo_ansible/ansible_plugins/filter/helpers.py +++ b/tripleo_ansible/ansible_plugins/filter/helpers.py @@ -44,7 +44,8 @@ class FilterModule(object): 'get_domain_id': self.get_domain_id, 'get_changed_containers': self.get_changed_containers, 'get_failed_containers': self.get_failed_containers, - 'get_changed_async_task_names': self.get_changed_async_task_names + 'get_changed_async_task_names': self.get_changed_async_task_names, + 'dict_to_list': self.dict_to_list } def subsort(self, dict_to_sort, attribute, null_value=0): @@ -425,3 +426,15 @@ class FilterModule(object): if ('changed' in i and i['changed']) or k in extra: return_list.append(k) return return_list + + def dict_to_list(self, data): + """Return a list of dictionaries." + + This filter will take a dictionary which itself containers + multiple dictionaries; and will convert that to a list + of dictionaries. + """ + return_list = [] + for k, v in data.items(): + return_list.append({k: v}) + return return_list diff --git a/tripleo_ansible/roles/tripleo_container_manage/tasks/create.yml b/tripleo_ansible/roles/tripleo_container_manage/tasks/create.yml index 7116fd678..389d457d8 100644 --- a/tripleo_ansible/roles/tripleo_container_manage/tasks/create.yml +++ b/tripleo_ansible/roles/tripleo_container_manage/tasks/create.yml @@ -19,3 +19,8 @@ - tripleo_container_manage_cli == 'podman' include: podman/start_order.yml order="{{ item.key }}" data="{{ item.value }}" loop: "{{ all_containers_hash | subsort(attribute='start_order', null_value=0) | dict2items | list }}" + +- name: "Manage container systemd services and healthchecks for {{ tripleo_container_manage_config }}" + include_tasks: podman/systemd.yml + when: + - tripleo_container_manage_cli == 'podman' diff --git a/tripleo_ansible/roles/tripleo_container_manage/tasks/podman/start_order.yml b/tripleo_ansible/roles/tripleo_container_manage/tasks/podman/start_order.yml index 1c9a5add0..956e81d7d 100644 --- a/tripleo_ansible/roles/tripleo_container_manage/tasks/podman/start_order.yml +++ b/tripleo_ansible/roles/tripleo_container_manage/tasks/podman/start_order.yml @@ -26,6 +26,3 @@ loop: "{{ data | batch(tripleo_container_manage_concurrency) | list }}" loop_control: loop_var: batched_container_data - -- name: Manage container systemd services and healthchecks for start_order {{ order }}" - include_tasks: podman/systemd.yml diff --git a/tripleo_ansible/roles/tripleo_container_manage/tasks/podman/systemd.yml b/tripleo_ansible/roles/tripleo_container_manage/tasks/podman/systemd.yml index bcff2c333..9ccffe240 100644 --- a/tripleo_ansible/roles/tripleo_container_manage/tasks/podman/systemd.yml +++ b/tripleo_ansible/roles/tripleo_container_manage/tasks/podman/systemd.yml @@ -16,14 +16,14 @@ - name: Set container_config fact set_fact: - container_config: "{{ data | list | haskey(attribute='restart', value=['always','unless-stopped'], any=True) | default([]) }}" + container_config: "{{ all_containers_hash | dict_to_list | haskey(attribute='restart', value=['always','unless-stopped'], any=True) | default([]) }}" - name: Set container_config_healthcheck fact set_fact: # Using intersect to prevent a service which isn't controlled by systemd # but has healthcheck in its configuration (by mistake) # See https://bugs.launchpad.net/tripleo/+bug/1873249 - container_config_healthcheck: "{{ data | list | haskey(attribute='healthcheck') | intersect(container_config) | default([]) }}" + container_config_healthcheck: "{{ all_containers_hash | dict_to_list | haskey(attribute='healthcheck') | intersect(container_config) | default([]) }}" - name: "Manage systemd files" no_log: "{{ not tripleo_container_manage_debug }}" diff --git a/tripleo_ansible/tests/plugins/filter/test_helpers.py b/tripleo_ansible/tests/plugins/filter/test_helpers.py index e0a87a2db..c850c3d29 100644 --- a/tripleo_ansible/tests/plugins/filter/test_helpers.py +++ b/tripleo_ansible/tests/plugins/filter/test_helpers.py @@ -932,3 +932,23 @@ class TestHelperFilters(tests_base.TestCase): expected_list = ['mysql', 'haproxy', 'memcached'] result = self.filters.get_changed_async_task_names(data=data, extra=['mysql']) self.assertEqual(result, expected_list) + + def test_dict_to_list(self): + dict = { + 'keystone': { + 'image': 'quay.io/tripleo/keystone' + }, + 'haproxy': { + 'image': 'quay.io/tripleo/haproxy' + } + } + expected_list = [ + {'keystone': { + 'image': 'quay.io/tripleo/keystone', + }}, + {'haproxy': { + 'image': 'quay.io/tripleo/haproxy', + }} + ] + result = self.filters.dict_to_list(data=dict) + self.assertEqual(result, expected_list)