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:
parent
4a1608e700
commit
5198b726fb
5 changed files with 97 additions and 3 deletions
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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})
|
||||
|
|
|
|||
|
|
@ -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})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue