1
0
Fork 0
mirror of https://github.com/containers/ansible-podman-collections.git synced 2026-03-22 02:29:08 +00:00

Delete systemd files when container/pod is deleted (#508)

Fix #489

Signed-off-by: Sagi Shnaidman <sshnaidm@redhat.com>

Signed-off-by: Sagi Shnaidman <sshnaidm@redhat.com>
This commit is contained in:
Sergey 2022-11-10 10:13:45 -05:00 committed by GitHub
parent 4a1608e700
commit 5198b726fb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 97 additions and 3 deletions

View file

@ -34,12 +34,11 @@ def run_podman_command(module, executable='podman', args=None, expected_rc=0, ig
return rc, out, err
def generate_systemd(module, module_params, name, version):
def run_generate_systemd_command(module, module_params, name, version):
"""Generate systemd unit file."""
command = [module_params['executable'], 'generate', 'systemd',
name, '--format', 'json']
sysconf = module_params['generate_systemd']
empty = {}
gt4ver = LooseVersion(version) >= LooseVersion('4.0.0')
if sysconf.get('restart_policy'):
if sysconf.get('restart_policy') not in [
@ -95,6 +94,13 @@ def generate_systemd(module, module_params, name, version):
module.log("PODMAN-CONTAINER-DEBUG: systemd command: %s" %
" ".join(command))
rc, systemd, err = module.run_command(command)
return rc, systemd, err
def generate_systemd(module, module_params, name, version):
empty = {}
sysconf = module_params['generate_systemd']
rc, systemd, err = run_generate_systemd_command(module, module_params, name, version)
if rc != 0:
module.log(
"PODMAN-CONTAINER-DEBUG: Error generating systemd: %s" % err)
@ -120,6 +126,31 @@ def generate_systemd(module, module_params, name, version):
return empty
def delete_systemd(module, module_params, name, version):
sysconf = module_params['generate_systemd']
if not sysconf.get('path'):
# We don't know where systemd files are located, nothing to delete
module.log(
"PODMAN-CONTAINER-DEBUG: Not deleting systemd file - no path!")
return
rc, systemd, err = run_generate_systemd_command(module, module_params, name, version)
if rc != 0:
module.log(
"PODMAN-CONTAINER-DEBUG: Error generating systemd: %s" % err)
return
else:
try:
data = json.loads(systemd)
for file_name in data.keys():
file_name += ".service"
os.unlink(os.path.join(sysconf['path'], file_name))
return
except Exception as e:
module.log(
"PODMAN-CONTAINER-DEBUG: Error deleting systemd: %s" % e)
return
def lower_keys(x):
if isinstance(x, list):
return [lower_keys(v) for v in x]

View file

@ -7,6 +7,7 @@ from ansible.module_utils._text import to_bytes, to_native # noqa: F402
from ansible_collections.containers.podman.plugins.module_utils.podman.common import LooseVersion
from ansible_collections.containers.podman.plugins.module_utils.podman.common import lower_keys
from ansible_collections.containers.podman.plugins.module_utils.podman.common import generate_systemd
from ansible_collections.containers.podman.plugins.module_utils.podman.common import delete_systemd
from ansible_collections.containers.podman.plugins.module_utils.podman.common import normalize_signal
__metaclass__ = type
@ -1659,6 +1660,10 @@ class PodmanManager:
if not self.container.exists:
self.results.update({'changed': False})
elif self.container.exists:
delete_systemd(self.module,
self.module_params,
self.name,
self.container.version)
self.container.delete()
self.results['actions'].append('deleted %s' % self.container.name)
self.results.update({'changed': True})

View file

@ -5,6 +5,8 @@ from ansible.module_utils._text import to_bytes, to_native
from ansible_collections.containers.podman.plugins.module_utils.podman.common import LooseVersion
from ansible_collections.containers.podman.plugins.module_utils.podman.common import lower_keys
from ansible_collections.containers.podman.plugins.module_utils.podman.common import generate_systemd
from ansible_collections.containers.podman.plugins.module_utils.podman.common import delete_systemd
__metaclass__ = type
@ -852,6 +854,10 @@ class PodmanPodManager:
if not self.pod.exists:
self.results.update({'changed': False})
elif self.pod.exists:
delete_systemd(self.module,
self.module_params,
self.name,
self.pod.version)
self.pod.delete()
self.results['actions'].append('deleted %s' % self.pod.name)
self.results.update({'changed': True})