From 0afc2a0461647196486102a9a732a67b04ca31c5 Mon Sep 17 00:00:00 2001 From: Jose Date: Fri, 26 Dec 2025 10:36:19 +0100 Subject: [PATCH] =?UTF-8?q?feat=20=E2=9C=A8:=20Add=20new=20handler=20to=20?= =?UTF-8?q?reload=20systemd=20and=20restart=20WOL.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit introduces a new handler that allows reloading the systemd configuration and restarting the Wake-on-LAN (WOL) service, ensuring persistent wake-up functionality. --- handlers/main.yml | 5 ++++ tasks/main.yml | 70 ++++++++++++++++++++++------------------------- 2 files changed, 38 insertions(+), 37 deletions(-) diff --git a/handlers/main.yml b/handlers/main.yml index e7515de..863dbaf 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -1,4 +1,8 @@ --- +- name: Reload systemd + ansible.builtin.systemd: + daemon_reload: yes + - name: Reload systemd and restart WOL ansible.builtin.systemd: name: wol @@ -13,3 +17,4 @@ - name: Trigger_udev_net ansible.builtin.command: udevadm trigger --subsystem-match=net changed_when: false + diff --git a/tasks/main.yml b/tasks/main.yml index 8d2116e..603e03f 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -74,46 +74,42 @@ - wol_mode == 'd' - wol_mode not in item.1.stdout +# ------------------------- +# 4. Create systemd service for persistence +# ------------------------- +- name: Create systemd service to persist WoL + ansible.builtin.copy: + dest: /etc/systemd/system/wol-interfaces.service + content: | + [Unit] + Description=Set Wake-on-LAN on network interfaces + After=network.target + Wants=network.target -# # ============================================================ -# # Enable WOL immediately (only if needed) -# # ============================================================ -# - name: Enable Wake-on-LAN immediately on NICs -# ansible.builtin.command: "ethtool -s {{ item }} wol {{ wol_mode }}" -# register: wol_enable_result -# changed_when: true -# loop: "{{ wol_needs_enable }}" -# loop_control: -# label: "{{ item }}" -# when: wol_needs_enable | length > 0 + [Service] + Type=oneshot + ExecStart=/bin/bash -c ' + {% for intf, enabled, supported in en_interfaces | zip(wol_enabled.results, wol_supported.results) %} + {% if wol_mode in supported.stdout %} + {% if wol_mode not in enabled.stdout %} + /sbin/ethtool -s {{ intf }} wol {{ wol_mode }}; + {% endif %} + {% endif %} + {% endfor %} + ' + RemainAfterExit=yes -# # ============================================================ -# # Persist WOL via udev rules (safe and idempotent) -# # ============================================================ -# - name: Create udev rule content -# ansible.builtin.set_fact: -# wol_udev_rules: >- -# {{ -# wol_final_interfaces -# | map('regex_replace', '^(.+)$', 'ACTION=="add", SUBSYSTEM=="net", KERNEL=="\1", RUN+="/sbin/ethtool -s \1 wol {{ wol_mode }}"') -# | list -# }} + [Install] + WantedBy=multi-user.target + notify: + - Reload systemd + +- name: Enable and start WoL service + ansible.builtin.systemd: + name: wol-interfaces.service + enabled: yes + state: started -# - name: Create/Update udev rules file -# ansible.builtin.copy: -# dest: /etc/udev/rules.d/90-wol.rules -# owner: root -# group: root -# mode: "0644" -# content: | -# # Wake-on-LAN udev rules - Auto-generated by Ansible -# # Applies to: {{ wol_final_interfaces | join(', ') }} -# {% for rule in wol_udev_rules %} -# {{ rule }} -# {% endfor %} -# notify: -# - Reload_udev_rules -# - Trigger_udev_net # # ============================================================ # # Verification & Reporting