1
0
Fork 0
mirror of https://github.com/containers/ansible-podman-collections.git synced 2026-02-04 07:11:49 +00:00

Fix pod for Podman v5

Signed-off-by: Sagi Shnaidman <sshnaidm@redhat.com>
This commit is contained in:
Sagi Shnaidman 2024-04-08 01:05:01 +03:00 committed by Sergey
parent 75c4834273
commit cb74414e50
3 changed files with 165 additions and 59 deletions

View file

@ -1247,7 +1247,6 @@ class PodmanContainerDiff:
[str(h["hostport"]), p.replace('/tcp', '')]
).strip(":")
if h['hostip'] == '0.0.0.0' and LooseVersion(self.version) >= LooseVersion('5.0.0'):
self.module.log("PODMAN NNNNET %s" % s)
return s
if h['hostip']:
return ":".join([h['hostip'], s])

View file

@ -267,7 +267,7 @@ class PodmanPodModuleParams:
return c
def addparam_no_hosts(self, c):
return c + ["=".join('--no-hosts', self.params['no_hosts'])]
return c + ["=".join(['--no-hosts', self.params['no_hosts']])]
def addparam_pid(self, c):
return c + ['--pid', self.params['pid']]
@ -465,6 +465,7 @@ class PodmanPodDiff:
if before == ['podman']:
before = []
after = self.params['network'] or []
after = [i.lower() for i in after]
# 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']
@ -472,16 +473,24 @@ class PodmanPodDiff:
cr_net = cr_com[cr_com.index('--network') + 1].lower()
if 'slirp4netns:' in cr_net:
before = [cr_net]
if net_mode_before == 'pasta' 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 'pasta:' in cr_net:
before = [cr_net]
# Currently supported only 'host' and 'none' network modes idempotency
if after in [['bridge'], ['host'], ['slirp4netns']]:
if after in [['bridge'], ['host'], ['slirp4netns'], ['pasta']]:
net_mode_after = after[0]
if net_mode_after and not before:
# Remove differences between v1 and v2
net_mode_after = net_mode_after.replace('bridge', 'default')
net_mode_after = net_mode_after.replace('slirp4netns', 'default')
net_mode_after = net_mode_after.replace('pasta', 'default')
net_mode_before = net_mode_before.replace('bridge', 'default')
net_mode_before = net_mode_before.replace('slirp4netns', 'default')
net_mode_before = net_mode_before.replace('pasta', 'default')
return self._diff_update_and_compare('network', net_mode_before, net_mode_after)
# For 4.4.0+ podman versions with no network specified
if not net_mode_after and net_mode_before == 'slirp4netns' and not after:
@ -492,6 +501,11 @@ class PodmanPodDiff:
net_mode_after = 'bridge'
if before == ['bridge']:
after = ['bridge']
# For pasta networking for Podman v5
if not net_mode_after and net_mode_before == 'pasta' and not after:
net_mode_after = 'pasta'
if before == ['pasta']:
after = ['pasta']
before, after = sorted(list(set(before))), sorted(list(set(after)))
return self._diff_update_and_compare('network', before, after)
@ -507,6 +521,8 @@ class PodmanPodDiff:
s = ":".join(
[str(h["hostport"]), p.replace('/tcp', '')]
).strip(":")
if h['hostip'] == '0.0.0.0' and LooseVersion(self.version) >= LooseVersion('5.0.0'):
return s
if h['hostip']:
return ":".join([h['hostip'], s])
return s

View file

@ -15,6 +15,21 @@
podman_version: 2
when: podman_v.stdout is version('2.0.0', '>=')
- name: Set podman version to 3
set_fact:
podman_version: 3
when: podman_v.stdout is version('3.0.0', '>=')
- name: Set podman version to 4
set_fact:
podman_version: 4
when: podman_v.stdout is version('4.0.0', '>=')
- name: Set podman version to 5
set_fact:
podman_version: 5
when: podman_v.stdout is version('5.0.0', '>=')
- name: Discover cgroups version
shell: podman info | grep cgroupVersion | awk {'print $2'}
register: cgroups
@ -153,6 +168,7 @@
pod6_info.pod['State']['status'] == 'Exited') or
(pod6_info.pod['State']['status'] is not defined and
pod6_info.pod['State'] == 'Exited')
when: podman_version < 5
- name: Start pod
containers.podman.podman_pod:
@ -826,69 +842,144 @@
that:
- not podsys2_stat.stat.exists|bool
- name: Run pod2 with network slirp4netns
containers.podman.podman_pod:
executable: "{{ test_executable | default('podman') }}"
name: pod2
state: started
network: slirp4netns:outbound_addr=10.10.10.46
- name: Run slirp4netns tests for podman < 5
when: podman_version < 5
block:
- name: Run container1 in pod
containers.podman.podman_container:
executable: "{{ test_executable | default('podman') }}"
name: container1
image: alpine
command: top
pod: pod2
state: started
- name: Run pod2 with network slirp4netns
containers.podman.podman_pod:
executable: "{{ test_executable | default('podman') }}"
name: pod2
state: started
network: slirp4netns:outbound_addr=10.10.10.46
- name: Run pod2 with network slirp4netns - again
containers.podman.podman_pod:
executable: "{{ test_executable | default('podman') }}"
name: pod2
state: started
network: slirp4netns:outbound_addr=10.10.10.46
register: slip4net_pod
- name: Run container1 in pod
containers.podman.podman_container:
executable: "{{ test_executable | default('podman') }}"
name: container1
image: alpine
command: top
pod: pod2
state: started
- name: Run container1 in pod slirp4netns
containers.podman.podman_container:
executable: "{{ test_executable | default('podman') }}"
name: container1
image: alpine
command: top
pod: pod2
state: started
register: slip4net_cont
- name: Run pod2 with network slirp4netns - again
containers.podman.podman_pod:
executable: "{{ test_executable | default('podman') }}"
name: pod2
state: started
network: slirp4netns:outbound_addr=10.10.10.46
register: slip4net_pod
- name: Check that slirp4netns is idempotent
assert:
that:
- slip4net_pod is not changed
- slip4net_cont is not changed
- name: Run container1 in pod slirp4netns
containers.podman.podman_container:
executable: "{{ test_executable | default('podman') }}"
name: container1
image: alpine
command: top
pod: pod2
state: started
register: slip4net_cont
- name: Run pod2 with different network slirp4netns
containers.podman.podman_pod:
executable: "{{ test_executable | default('podman') }}"
name: pod2
state: started
network: slirp4netns:outbound_addr=10.10.10.47
register: slip4net_pod2
- name: Check that slirp4netns is idempotent
assert:
that:
- slip4net_pod is not changed
- slip4net_cont is not changed
- name: Run container1 in different pod slirp4netns
containers.podman.podman_container:
executable: "{{ test_executable | default('podman') }}"
name: container1
image: alpine
command: top
pod: pod2
state: started
register: slip4net_cont2
- name: Run pod2 with different network slirp4netns
containers.podman.podman_pod:
executable: "{{ test_executable | default('podman') }}"
name: pod2
state: started
network: slirp4netns:outbound_addr=10.10.10.47
register: slip4net_pod2
- name: Check that slirp4netns is idempotent and changed
assert:
that:
- slip4net_pod2 is changed
- slip4net_cont2 is changed
- name: Run container1 in different pod slirp4netns
containers.podman.podman_container:
executable: "{{ test_executable | default('podman') }}"
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
- name: Run pasta tests for podman >= 5
when: podman_version >= 5
block:
- name: Run pod2 with network pasta
containers.podman.podman_pod:
executable: "{{ test_executable | default('podman') }}"
name: pod2
state: started
network:
- "pasta:-4,-t,8007,-u,4443,-T,3000"
- name: Run container1 in pod
containers.podman.podman_container:
executable: "{{ test_executable | default('podman') }}"
name: container1
image: alpine
command: top
pod: pod2
state: started
- name: Run pod2 with network pasta - again
containers.podman.podman_pod:
executable: "{{ test_executable | default('podman') }}"
name: pod2
state: started
network:
- "pasta:-4,-t,8007,-u,4443,-T,3000"
register: pasta_pod
- name: Run container1 in pod pasta
containers.podman.podman_container:
executable: "{{ test_executable | default('podman') }}"
name: container1
image: alpine
command: top
pod: pod2
state: started
register: pasta_cont
- name: Check that pasta is idempotent
assert:
that:
- pasta_pod is not changed
- pasta_cont is not changed
- name: Run pod2 with different network pasta
containers.podman.podman_pod:
executable: "{{ test_executable | default('podman') }}"
name: pod2
state: started
network:
- "pasta:-4,-t,8008,-u,4443,-T,3000"
register: pasta_pod2
- name: Run container1 in different pod slirp4netns
containers.podman.podman_container:
executable: "{{ test_executable | default('podman') }}"
name: container1
image: alpine
command: top
pod: pod2
state: started
register: pasta_cont2
- name: Check that slirp4netns is idempotent and changed
assert:
that:
- pasta_pod2 is changed
- pasta_cont2 is changed
always: