feat(deploy): left4me-cake.service oneshot wrapping apply-cake helper
The CAKE egress shaper now has a systemd unit that wraps the left4me-apply-cake helper in apply and clear modes. The unit is a oneshot that starts after network-online and survives service restarts, allowing the shaper to persist across reboots and be managed by systemd. The environment file is marked non-fatal (EnvironmentFile=-) to handle missing or incomplete configurations gracefully. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
878639147a
commit
a9ca90537b
2 changed files with 34 additions and 0 deletions
|
|
@ -0,0 +1,14 @@
|
|||
[Unit]
|
||||
Description=left4me CAKE egress shaper
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
EnvironmentFile=-/etc/left4me/cake.env
|
||||
ExecStart=/usr/local/libexec/left4me/left4me-apply-cake apply
|
||||
ExecStop=/usr/local/libexec/left4me/left4me-apply-cake clear
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
|
@ -15,6 +15,7 @@ SYSCTL_CONF = DEPLOY / "files/etc/sysctl.d/99-left4me.conf"
|
|||
GLOBAL_REFRESH_SERVICE = DEPLOY / "files/usr/local/lib/systemd/system/left4me-refresh-global-overlays.service"
|
||||
GLOBAL_REFRESH_TIMER = DEPLOY / "files/usr/local/lib/systemd/system/left4me-refresh-global-overlays.timer"
|
||||
NFT_MARK_UNIT = DEPLOY / "files/usr/local/lib/systemd/system/left4me-nft-mark.service"
|
||||
CAKE_UNIT = DEPLOY / "files/usr/local/lib/systemd/system/left4me-cake.service"
|
||||
SANDBOX_UNIT_DIR = DEPLOY / "files/usr/local/lib/systemd/system"
|
||||
SYSTEMCTL_HELPER = DEPLOY / "files/usr/local/libexec/left4me/left4me-systemctl"
|
||||
JOURNALCTL_HELPER = DEPLOY / "files/usr/local/libexec/left4me/left4me-journalctl"
|
||||
|
|
@ -803,3 +804,22 @@ def test_apply_cake_helper_supports_apply_and_clear_modes():
|
|||
|
||||
def test_apply_cake_helper_passes_shell_syntax_check():
|
||||
subprocess.run(["sh", "-n", str(APPLY_CAKE_HELPER)], check=True)
|
||||
|
||||
|
||||
def test_cake_unit_runs_helper_in_apply_and_clear_modes():
|
||||
assert CAKE_UNIT.is_file()
|
||||
text = CAKE_UNIT.read_text()
|
||||
|
||||
assert "After=network-online.target" in text
|
||||
assert "Wants=network-online.target" in text
|
||||
assert "Type=oneshot" in text
|
||||
assert "RemainAfterExit=yes" in text
|
||||
# `-` prefix: missing env file is non-fatal (deploy ships one, but be safe).
|
||||
assert "EnvironmentFile=-/etc/left4me/cake.env" in text
|
||||
assert (
|
||||
"ExecStart=/usr/local/libexec/left4me/left4me-apply-cake apply" in text
|
||||
)
|
||||
assert (
|
||||
"ExecStop=/usr/local/libexec/left4me/left4me-apply-cake clear" in text
|
||||
)
|
||||
assert "WantedBy=multi-user.target" in text
|
||||
|
|
|
|||
Loading…
Reference in a new issue