Merge "Improve idempotency for podman_container"
This commit is contained in:
commit
2d4f3b6951
|
@ -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:
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue