From 14e055a5e05f113c07c2be733df2c0e8b26ce764 Mon Sep 17 00:00:00 2001 From: CroneKorkN Date: Sat, 16 May 2026 01:00:30 +0200 Subject: [PATCH] wol: share the wakeonlan command via wol-sleeper/waker_command Sleeper now exposes the full `/usr/bin/wakeonlan -i ` invocation as wol-sleeper/waker_command; waker reads that instead of rebuilding the command line itself. Adds the `-i ` flag so magic packets reach sleepers on a different L2 segment than the waker. Co-Authored-By: Claude Opus 4.7 (1M context) --- bundles/wol-sleeper/metadata.py | 7 +++++-- bundles/wol-waker/metadata.py | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/bundles/wol-sleeper/metadata.py b/bundles/wol-sleeper/metadata.py index 520df53..5febaf8 100644 --- a/bundles/wol-sleeper/metadata.py +++ b/bundles/wol-sleeper/metadata.py @@ -45,17 +45,20 @@ defaults = { @metadata_reactor.provides( 'wol-sleeper/mac', + 'wol-sleeper/waker_command', 'wol-sleeper/wake_command', ) def wake_command(metadata): waker_hostname = repo.get_node(metadata.get('wol-sleeper/waker')).hostname mac = metadata.get(f"network/{metadata.get('wol-sleeper/network')}/mac") - ip = ip_interface(metadata.get(f"network/{metadata.get('wol-sleeper/network')}/ipv4")).ip + network = ip_interface(metadata.get(f"network/{metadata.get('wol-sleeper/network')}/ipv4")) + waker_command = f"/usr/bin/wakeonlan -i {network.network.broadcast_address} {mac}" return { 'wol-sleeper': { 'mac': mac, - 'wake_command': f"ssh -o StrictHostKeyChecking=no wol@{waker_hostname} '/usr/bin/wakeonlan {mac}' && while ! ping {ip} -c1 -W3; do true; done", + 'waker_command': waker_command, + 'wake_command': f"ssh -o StrictHostKeyChecking=no wol@{waker_hostname} '{waker_command}' && while ! ping {network.ip} -c1 -W3; do true; done", }, } diff --git a/bundles/wol-waker/metadata.py b/bundles/wol-waker/metadata.py index 203b079..b968f01 100644 --- a/bundles/wol-waker/metadata.py +++ b/bundles/wol-waker/metadata.py @@ -17,7 +17,7 @@ def user(metadata): 'authorized_users': { f'root@{ssh_client.name}': { 'commands': { - '/usr/bin/wakeonlan ' + sleeper.metadata.get('wol-sleeper/mac') + sleeper.metadata.get('wol-sleeper/waker_command') for sleeper in repo.nodes if sleeper.has_bundle('wol-sleeper') and sleeper.metadata.get('wol-sleeper/waker') == node.name