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:
parent
75c4834273
commit
cb74414e50
3 changed files with 165 additions and 59 deletions
|
|
@ -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])
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue