From 98ba428bb7c8ce2fc4bcc18fa262a29fe3bdfd04 Mon Sep 17 00:00:00 2001 From: mwiegand Date: Sat, 12 Feb 2022 16:58:44 +0100 Subject: [PATCH] wol-sleeper --- bundles/wol-sleeper/README.md | 28 ++++++++++++++++++++ bundles/wol-sleeper/metadata.py | 45 +++++++++++++++++++++++++++++++++ groups/machine/hardware.py | 1 + nodes/home.backups.py | 1 + 4 files changed, 75 insertions(+) create mode 100644 bundles/wol-sleeper/README.md create mode 100644 bundles/wol-sleeper/metadata.py diff --git a/bundles/wol-sleeper/README.md b/bundles/wol-sleeper/README.md new file mode 100644 index 0000000..2027e8e --- /dev/null +++ b/bundles/wol-sleeper/README.md @@ -0,0 +1,28 @@ +# wake on lan + +## woken + +wol by magic packet + +``` +ethtool -s enp1s0 wol g +``` + +p Wake on phy activity +u Wake on unicast messages +m Wake on multicast messages +b Wake on broadcast messages +a Wake on ARP +g Wake on MagicPacket(tm) +s Enable SecureOn(tm) password for MagicPacket(tm) +d Disable (wake on nothing). This option clears all previous options. + +``` +systemctl suspend +``` + +## waker + +``` +wakeonlan d8:cb:8a:e7:be:c6 +``` diff --git a/bundles/wol-sleeper/metadata.py b/bundles/wol-sleeper/metadata.py new file mode 100644 index 0000000..bcd9954 --- /dev/null +++ b/bundles/wol-sleeper/metadata.py @@ -0,0 +1,45 @@ +@metadata_reactor.provides( + 'apt/packages/ethtool', + 'systemd/units/enable-wol', + 'systemd/services/enable-wol.service', +) +def systemd(metadata): + interfaces = set( + conf['interface'] + for conf in metadata.get('network').values() + if conf.get('wol', False) + ) + + if not interfaces: + return {} + + return { + 'apt': { + 'packages': { + 'ethtool': {}, + }, + }, + 'systemd': { + 'units': { + 'enable-wol.service': { + 'Unit': { + 'After': 'network.target', + }, + 'Service': { + 'Type': 'oneshot', + 'RemainAfterExit': 'yes', + 'ExecStart': set( + f"ethtool -s {conf['interface']} wol g" + for itnerface in interfaces + ), + }, + 'Install': { + 'WantedBy': 'multi-user.target', + }, + }, + }, + 'services': { + 'enable-wol.service': {}, + }, + }, + } diff --git a/groups/machine/hardware.py b/groups/machine/hardware.py index fa8ac47..37b139e 100644 --- a/groups/machine/hardware.py +++ b/groups/machine/hardware.py @@ -1,5 +1,6 @@ { 'bundles': { 'hardware', + 'wol-sleeper', }, } diff --git a/nodes/home.backups.py b/nodes/home.backups.py index 406582a..d859922 100644 --- a/nodes/home.backups.py +++ b/nodes/home.backups.py @@ -18,6 +18,7 @@ 'interface': 'enp1s0', 'ipv4': '10.0.0.5/24', 'gateway4': '10.0.0.1', + 'wol': True, }, }, 'backup-server': {