diff --git a/bundles/systemd-swap/items.py b/bundles/systemd-swap/items.py index e159f65..30201fd 100644 --- a/bundles/systemd-swap/items.py +++ b/bundles/systemd-swap/items.py @@ -1,58 +1,13 @@ -size = node.metadata.get('systemd-swap') - -actions = { - 'stop_swap': { - 'command': f'systemctl stop swapfile.swap', - 'unless': f'! systemctl is-active swapfile.swap', - 'triggered': True, - }, - 'remove_swapfile': { - 'command': f'rm /swapfile', - 'unless': f'! test -e /swapfile', - 'triggered': True, - 'needs': { - 'action:stop_swap', - }, - }, - 'create_swapfile': { - 'command': f'fallocate -l {size} /swapfile', - 'unless': f'stat -c %s /swapfile | grep ^{size}$', - 'preceded_by': { - 'action:stop_swap', - 'action:remove_swapfile', - }, - 'triggers': { - 'action:initialize_swapfile', - 'svc_systemd:swapfile.swap:restart', - }, - }, - 'swapfile_mode': { - 'command': f'chmod 600 /swapfile', - 'unless': f'stat -c "%a" /swapfile | grep -q "^600$"', - 'needs': { - 'action:create_swapfile', - }, - 'triggers': { - 'svc_systemd:swapfile.swap:restart', - }, - }, - 'initialize_swapfile': { - 'command': f'mkswap /swapfile', - 'triggered': True, - 'needs': { - 'action:swapfile_mode', - } - }, -} - svc_systemd = { + 'swapfile-prepare.service': { + 'enabled': True, + 'running': None, + }, 'swapfile.swap': { - 'preceded_by': { - 'action:initialize_swapfile', - }, - 'needs': { - 'action:initialize_swapfile', - 'action:systemd-reload', - }, + 'enabled': True, + 'running': True, + 'needs': [ + 'svc_systemd:swapfile-prepare.service', + ], }, } diff --git a/bundles/systemd-swap/metadata.py b/bundles/systemd-swap/metadata.py index ffd62bb..dd2dc09 100644 --- a/bundles/systemd-swap/metadata.py +++ b/bundles/systemd-swap/metadata.py @@ -10,3 +10,38 @@ defaults = { }, }, } + + +@metadata_reactor.provides( + 'systemd/units/swapfile.swap', +) +def unit(metadata): + size = metadata.get('systemd-swap') + + return { + 'systemd': { + 'units': { + 'swapfile-prepare.service': { + 'Unit': { + 'Before': { + 'swapfile.swap', + }, + }, + 'Service': { + 'Type': 'oneshot', + 'ExecStartPre': [ + '-/bin/rm /swapfile -f', + f'/bin/fallocate -l {size} /swapfile', + '/bin/chmod 600 /swapfile', + ], + 'ExecStart': '/usr/sbin/mkswap /swapfile', + }, + 'Install': { + 'RequiredBy': { + 'swapfile.swap', + }, + }, + }, + }, + }, + }