From 547abfea53687f02145e5672a60679889c951ce7 Mon Sep 17 00:00:00 2001 From: Sergey Date: Sun, 16 Jan 2022 23:44:08 +0200 Subject: [PATCH] Add slirp4netns idempotency for pods (#369) Fix #367 --- plugins/module_utils/podman/podman_pod_lib.py | 7 +++ .../targets/podman_pod/tasks/main.yml | 63 +++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/plugins/module_utils/podman/podman_pod_lib.py b/plugins/module_utils/podman/podman_pod_lib.py index e32c596..aff3c0c 100644 --- a/plugins/module_utils/podman/podman_pod_lib.py +++ b/plugins/module_utils/podman/podman_pod_lib.py @@ -415,6 +415,13 @@ class PodmanPodDiff: if before == ['podman']: before = [] after = self.params['network'] + # Special case for options for slirp4netns rootless networking from v2 + if net_mode_before == 'slirp4netns' and 'createcommand' in self.info: + cr_com = self.info['createcommand'] + if '--network' in cr_com: + cr_net = cr_com[cr_com.index('--network') + 1].lower() + if 'slirp4netns:' in cr_net: + before = [cr_net] # Currently supported only 'host' and 'none' network modes idempotency if after in ['bridge', 'host', 'slirp4netns']: net_mode_after = after diff --git a/tests/integration/targets/podman_pod/tasks/main.yml b/tests/integration/targets/podman_pod/tasks/main.yml index 1cb55bf..8a38990 100644 --- a/tests/integration/targets/podman_pod/tasks/main.yml +++ b/tests/integration/targets/podman_pod/tasks/main.yml @@ -683,6 +683,69 @@ - "'Restart=always' in system1.podman_systemd['poditto-pod2']" - "'autogenerated by Podman' not in system1.podman_systemd['poditto-pod2']" + - name: Remove pod2 + containers.podman.podman_pod: + name: pod2 + state: absent + + - name: Run pod2 with network slirp4netns + containers.podman.podman_pod: + name: pod2 + state: started + network: slirp4netns:outbound_addr=10.10.10.46 + + - name: Run container1 in pod + containers.podman.podman_container: + name: container1 + image: alpine + command: top + pod: pod2 + state: started + + - name: Run pod2 with network slirp4netns - again + containers.podman.podman_pod: + name: pod2 + state: started + network: slirp4netns:outbound_addr=10.10.10.46 + register: slip4net_pod + + - name: Run container1 in pod slirp4netns + containers.podman.podman_container: + name: container1 + image: alpine + command: top + pod: pod2 + state: started + register: slip4net_cont + + - name: Check that slirp4netns is idempotent + assert: + that: + - slip4net_pod is not changed + - slip4net_cont is not changed + + - name: Run pod2 with different network slirp4netns + containers.podman.podman_pod: + name: pod2 + state: started + network: slirp4netns:outbound_addr=10.10.10.47 + register: slip4net_pod2 + + - name: Run container1 in different pod slirp4netns + containers.podman.podman_container: + name: container1 + image: alpine + command: top + pod: pod2 + state: started + register: slip4net_cont2 + + - name: Check that slirp4netns is idempotent and changed + assert: + that: + - slip4net_pod2 is changed + - slip4net_cont2 is changed + always: - name: Delete all pods leftovers from tests