From bf67c7e0788758be4cac090c02be2eec01de3afe Mon Sep 17 00:00:00 2001 From: Sergey <6213510+sshnaidm@users.noreply.github.com> Date: Wed, 28 Sep 2022 12:39:15 +0300 Subject: [PATCH] Improve idempotency for devices mount of rootless podman (#487) Signed-off-by: Sagi Shnaidman --- .../podman/podman_container_lib.py | 9 +++ .../tasks/idem_all.yml | 62 +++++++++++++++++++ 2 files changed, 71 insertions(+) diff --git a/plugins/module_utils/podman/podman_container_lib.py b/plugins/module_utils/podman/podman_container_lib.py index ce0f95e4..b9a85e7f 100644 --- a/plugins/module_utils/podman/podman_container_lib.py +++ b/plugins/module_utils/podman/podman_container_lib.py @@ -855,7 +855,16 @@ def diffparam_cpuset_mems(self): def diffparam_device(self): before = [":".join([i['pathonhost'], i['pathincontainer']]) for i in self.info['hostconfig']['devices']] + if not before and 'createcommand' in self.info['config']: + cr_com = self.info['config']['createcommand'] + if '--device' in cr_com: + before = [cr_com[k + 1].lower() + for k, i in enumerate(cr_com) if i == '--device'] + before = [":".join((i, i)) + if len(i.split(":")) == 1 else i for i in before] after = [":".join(i.split(":")[:2]) for i in self.params['device']] + after = [":".join((i, i)) + if len(i.split(":")) == 1 else i for i in after] before, after = sorted(list(set(before))), sorted(list(set(after))) return self._diff_update_and_compare('devices', before, after) 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 30103fff..5b3dc729 100644 --- a/tests/integration/targets/podman_container_idempotency/tasks/idem_all.yml +++ b/tests/integration/targets/podman_container_idempotency/tasks/idem_all.yml @@ -180,6 +180,68 @@ tag: sometag command: 1h +- name: Run container with mounted /dev/fuse + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + image: "{{ idem_image }}" + name: idempotency + state: started + command: 1h + device: + - /dev/fuse + register: test15 + +- name: Run container with mounted /dev/fuse again + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + image: "{{ idem_image }}" + name: idempotency + state: started + command: 1h + device: + - /dev/fuse + register: test16 + +- name: Run container with mounted /dev/fuse:/dev/fuse + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + image: "{{ idem_image }}" + name: idempotency + state: started + command: 1h + device: + - /dev/fuse:/dev/fuse + register: test17 + +- name: Run container with mounted /dev/fuse third time + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + image: "{{ idem_image }}" + name: idempotency + state: started + command: 1h + device: + - /dev/fuse + register: test18 + +- name: Run container without mounted device + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + image: "{{ idem_image }}" + name: idempotency + state: started + command: 1h + register: test19 + +- name: Check info with mounted devices + assert: + that: + - test15 is changed + - test16 is not changed + - test17 is not changed + - test18 is not changed + - test19 is changed + - name: Remove test container containers.podman.podman_container: executable: "{{ test_executable | default('podman') }}"