From 11f9eded6a26aa049f75bb6ddb80dcbe8fc6b51b Mon Sep 17 00:00:00 2001 From: Sergey <6213510+sshnaidm@users.noreply.github.com> Date: Sat, 12 Aug 2023 14:25:09 +0300 Subject: [PATCH] Fix idempoency issue with PID of container (#622) Fix #573 Signed-off-by: Sagi Shnaidman --- .../podman/podman_container_lib.py | 11 ++++ .../tasks/idem_all.yml | 57 +++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/plugins/module_utils/podman/podman_container_lib.py b/plugins/module_utils/podman/podman_container_lib.py index 741ca40..962ce7c 100644 --- a/plugins/module_utils/podman/podman_container_lib.py +++ b/plugins/module_utils/podman/podman_container_lib.py @@ -1136,8 +1136,19 @@ class PodmanContainerDiff: return self._diff_update_and_compare('privileged', before, after) def diffparam_pid(self): + def get_container_id_by_name(name): + rc, podman_inspect_info, err = self.module.run_command( + [self.module.params["executable"], "inspect", name, "-f", "{{.Id}}"]) + if rc != 0: + return None + return podman_inspect_info.strip() + before = self.info['hostconfig']['pidmode'] after = self.params['pid'] + if after is not None and "container:" in after and "container:" in before: + if after.split(":")[1] == before.split(":")[1]: + return self._diff_update_and_compare('pid', before, after) + after = "container:" + get_container_id_by_name(after.split(":")[1]) return self._diff_update_and_compare('pid', before, after) # TODO(sshnaidm) Need to add port ranges support diff --git a/tests/integration/targets/podman_container_idempotency/tasks/idem_all.yml b/tests/integration/targets/podman_container_idempotency/tasks/idem_all.yml index 48247d7..091cd4c 100644 --- a/tests/integration/targets/podman_container_idempotency/tasks/idem_all.yml +++ b/tests/integration/targets/podman_container_idempotency/tasks/idem_all.yml @@ -332,6 +332,63 @@ assert: that: test25 is changed +- name: Run container for linking with PID + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + image: "{{ idem_image }}" + name: idempotency + state: present + register: test26 + +- name: Check info with PID + assert: + that: test26 is not changed + +- name: Run second container for linking with PID + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + image: "{{ idem_image }}" + name: idempotency2 + state: present + pid: "container:idempotency" + register: test27 + +- name: Check info of second container with PID + assert: + that: test27 is changed + +- name: Run second container for linking with PID + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + image: "{{ idem_image }}" + name: idempotency2 + state: present + pid: "container:idempotency" + register: test28 + +- name: Check info of second container with PID again + assert: + that: test28 is not changed + +- name: Run second container for linking with PID with container ID + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + image: "{{ idem_image }}" + name: idempotency2 + state: present + pid: "container:{{ test26.container.Id }}" + register: test29 + +- name: Check info of second container with PID of container ID again + assert: + that: test29 is not changed + +- name: Remove dependant test container + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + name: idempotency2 + state: absent + - name: Remove test container containers.podman.podman_container: executable: "{{ test_executable | default('podman') }}"