Merge "Improve idempotency for podman_container"

This commit is contained in:
Zuul 2020-05-13 05:19:19 +00:00 committed by Gerrit Code Review
commit 2d4f3b6951
2 changed files with 71 additions and 11 deletions

View File

@ -1265,7 +1265,6 @@ class PodmanDefaults:
self.defaults = { self.defaults = {
"blkio_weight": 0, "blkio_weight": 0,
"cgroups": "default", "cgroups": "default",
"cgroup_parent": "",
"cidfile": "", "cidfile": "",
"cpus": 0.0, "cpus": 0.0,
"cpu_shares": 0, "cpu_shares": 0,
@ -1280,7 +1279,6 @@ class PodmanDefaults:
"env_host": False, "env_host": False,
"etc_hosts": {}, "etc_hosts": {},
"group_add": [], "group_add": [],
"healthcheck": "",
"ipc": "", "ipc": "",
"kernelmemory": "0", "kernelmemory": "0",
"log_driver": "k8s-file", "log_driver": "k8s-file",
@ -1296,16 +1294,16 @@ class PodmanDefaults:
"privileged": False, "privileged": False,
"rm": False, "rm": False,
"security_opt": [], "security_opt": [],
"stop_signal": 15,
"tty": False, "tty": False,
"user": "",
"uts": "", "uts": "",
"volume": [],
"workdir": "/",
} }
def default_dict(self): def default_dict(self):
# make here any changes to self.defaults related to podman version # make here any changes to self.defaults related to podman version
# https://github.com/containers/libpod/pull/5669
if (LooseVersion(self.version) >= LooseVersion('1.8.0')
and LooseVersion(self.version) < LooseVersion('1.9.0')):
self.defaults['cpu_shares'] = 1024
return self.defaults return self.defaults
@ -1390,6 +1388,8 @@ class PodmanContainerDiff:
def diffparam_cgroup_parent(self): def diffparam_cgroup_parent(self):
before = self.info['hostconfig']['cgroupparent'] before = self.info['hostconfig']['cgroupparent']
after = self.params['cgroup_parent'] after = self.params['cgroup_parent']
if after is None:
after = before
return self._diff_update_and_compare('cgroup_parent', before, after) return self._diff_update_and_compare('cgroup_parent', before, after)
def diffparam_cgroups(self): def diffparam_cgroups(self):
@ -1554,6 +1554,8 @@ class PodmanContainerDiff:
def diffparam_ipc(self): def diffparam_ipc(self):
before = self.info['hostconfig']['ipcmode'] before = self.info['hostconfig']['ipcmode']
after = self.params['ipc'] after = self.params['ipc']
if self.params['pod'] and not after:
after = before
return self._diff_update_and_compare('ipc', before, after) return self._diff_update_and_compare('ipc', before, after)
def diffparam_label(self): def diffparam_label(self):
@ -1603,6 +1605,8 @@ class PodmanContainerDiff:
def diffparam_network(self): def diffparam_network(self):
before = [self.info['hostconfig']['networkmode']] before = [self.info['hostconfig']['networkmode']]
after = self.params['network'] after = self.params['network']
if self.params['pod'] and not self.module.params['network']:
after = before
return self._diff_update_and_compare('network', before, after) return self._diff_update_and_compare('network', before, after)
def diffparam_no_hosts(self): def diffparam_no_hosts(self):
@ -1641,6 +1645,8 @@ class PodmanContainerDiff:
def diffparam_stop_signal(self): def diffparam_stop_signal(self):
before = self.info['config']['stopsignal'] before = self.info['config']['stopsignal']
after = self.params['stop_signal'] after = self.params['stop_signal']
if after is None:
after = before
return self._diff_update_and_compare('stop_signal', before, after) return self._diff_update_and_compare('stop_signal', before, after)
def diffparam_tty(self): def diffparam_tty(self):
@ -1650,15 +1656,16 @@ class PodmanContainerDiff:
def diffparam_user(self): def diffparam_user(self):
before = self.info['config']['user'] before = self.info['config']['user']
if self.module.params['user'] is None and before: after = self.params['user']
if after is None:
after = before after = before
else:
after = self.params['user']
return self._diff_update_and_compare('user', before, after) return self._diff_update_and_compare('user', before, after)
def diffparam_uts(self): def diffparam_uts(self):
before = self.info['hostconfig']['utsmode'] before = self.info['hostconfig']['utsmode']
after = self.params['uts'] after = self.params['uts']
if self.params['pod'] and not after:
after = before
return self._diff_update_and_compare('uts', before, after) return self._diff_update_and_compare('uts', before, after)
def diffparam_volume(self): def diffparam_volume(self):
@ -1672,18 +1679,24 @@ class PodmanContainerDiff:
volumes.append([m['source'], m['destination']]) volumes.append([m['source'], m['destination']])
before = [":".join(v) for v in volumes] before = [":".join(v) for v in volumes]
# Ignore volumes option for idempotency # Ignore volumes option for idempotency
after = [":".join(v.split(":")[:2]) for v in self.params['volume']] if self.params['volume'] is not None:
after = [":".join(v.split(":")[:2]) for v in self.params['volume']]
else:
after = before
before, after = sorted(list(set(before))), sorted(list(set(after))) before, after = sorted(list(set(before))), sorted(list(set(after)))
return self._diff_update_and_compare('volume', before, after) return self._diff_update_and_compare('volume', before, after)
def diffparam_volumes_from(self): def diffparam_volumes_from(self):
before = self.info['hostconfig']['volumesfrom'] or [] # Possibly volumesfrom is not in config
before = self.info['hostconfig'].get('volumesfrom', []) or []
after = self.params['volumes_from'] or [] after = self.params['volumes_from'] or []
return self._diff_update_and_compare('volumes_from', before, after) return self._diff_update_and_compare('volumes_from', before, after)
def diffparam_workdir(self): def diffparam_workdir(self):
before = self.info['config']['workingdir'] before = self.info['config']['workingdir']
after = self.params['workdir'] after = self.params['workdir']
if after is None:
after = before
return self._diff_update_and_compare('workdir', before, after) return self._diff_update_and_compare('workdir', before, after)
def is_different(self): def is_different(self):
@ -1786,11 +1799,13 @@ class PodmanContainer:
def get_info(self): def get_info(self):
"""Inspect container and gather info about it.""" """Inspect container and gather info about it."""
# pylint: disable=unused-variable
rc, out, err = self.module.run_command( rc, out, err = self.module.run_command(
[self.module.params['executable'], b'container', b'inspect', self.name]) [self.module.params['executable'], b'container', b'inspect', self.name])
return json.loads(out)[0] if rc == 0 else {} return json.loads(out)[0] if rc == 0 else {}
def _get_podman_version(self): def _get_podman_version(self):
# pylint: disable=unused-variable
rc, out, err = self.module.run_command( rc, out, err = self.module.run_command(
[self.module.params['executable'], b'--version']) [self.module.params['executable'], b'--version'])
if rc != 0 or not out or "version" not in out: if rc != 0 or not out or "version" not in out:

View File

@ -382,6 +382,48 @@
that: that:
- "'podman rm -f testidem' in remove.podman_actions" - "'podman rm -f testidem' in remove.podman_actions"
- name: Check basic idempotency of pod container
podman_container:
name: testidem-pod
image: docker.io/alpine
state: present
command: sleep 20m
pod: "new:testidempod"
- name: Check basic idempotency of pod container - run it again
podman_container:
name: testidem-pod
image: alpine:latest
state: present
command: sleep 20m
pod: testidempod
register: idem
- name: Check that nothing was changed in pod containers
assert:
that:
- not idem.changed
- name: Run changed pod container (with tty enabled)
podman_container:
name: testidem-pod
image: alpine
state: present
command: sleep 20m
tty: true
pod: testidempod
register: idem1
- name: Check that container is recreated when changed
assert:
that:
- idem1 is changed
- name: Remove container
podman_container:
name: testidem-pod
state: absent
always: always:
- name: Delete all container leftovers from tests - name: Delete all container leftovers from tests
podman_container: podman_container:
@ -391,3 +433,6 @@
- "alpine:3.7" - "alpine:3.7"
- "container" - "container"
- "container2" - "container2"
- name: Remove pod
shell: podman pod rm -f testidempod