This commit removes the debug facts task from the main.yml file to clean up unnecessary logging and streamline the execution process.
161 lines
4.8 KiB
YAML
161 lines
4.8 KiB
YAML
---
|
|
- name: Install required packages
|
|
ansible.builtin.apt:
|
|
name: ethtool
|
|
state: present
|
|
update_cache: yes
|
|
|
|
- name: Gather network facts
|
|
ansible.builtin.setup:
|
|
gather_subset:
|
|
- network
|
|
|
|
- name: Detect default route interface
|
|
ansible.builtin.set_fact:
|
|
wol_detected_interface: "{{ ansible_default_ipv4.interface }}"
|
|
when: wol_interface | default('') | length == 0
|
|
|
|
- name: Debug facts interface
|
|
ansible.builtin.debug:
|
|
msg:
|
|
- "Detected bridge {{ wol_detected_interface }}"
|
|
|
|
# - name: Debug facts
|
|
# ansible.builtin.debug:
|
|
# msg:
|
|
# - "{{ hostvars[inventory_hostname]['ansible_' + wol_detected_interface][interfaces] }}"
|
|
|
|
# - name: Detect physical NIC enslaved to bridge
|
|
# ansible.builtin.set_fact:
|
|
# wol_detected_phy: "{{ item }}"
|
|
# loop: "{{ ansible_interfaces }}"
|
|
# when:
|
|
# - wol_interface | default('') | length == 0
|
|
# - item != 'lo'
|
|
# - item is not match('^v')
|
|
# - item is match('^e')
|
|
# - hostvars[inventory_hostname]['ansible_' + item] is defined
|
|
# - hostvars[inventory_hostname]['ansible_' + item].module is defined
|
|
# - hostvars[inventory_hostname]['ansible_' + item].pciid is defined
|
|
# - hostvars[inventory_hostname]['ansible_' + item].type is defined
|
|
# - hostvars[inventory_hostname]['ansible_' + item].type == 'ether'
|
|
|
|
|
|
|
|
# - name: Detect physical NIC behind bridge
|
|
# ansible.builtin.set_fact:
|
|
# wol_detected_phy: "{{ ansible_facts[wol_detected_bridge].interfaces[0] }}"
|
|
# when:
|
|
# - wol_interface | default('') | length == 0
|
|
# - ansible_facts[wol_detected_bridge] is defined
|
|
# - ansible_facts[wol_detected_bridge].interfaces is defined
|
|
# - ansible_facts[wol_detected_bridge].interfaces | length > 0
|
|
|
|
- name: Detect physical NICs in bridge
|
|
ansible.builtin.set_fact:
|
|
wol_bridge_phys: >-
|
|
{{
|
|
ansible_facts[wol_detected_bridge].interfaces
|
|
| select('match', '^(e|en)')
|
|
| list
|
|
}}
|
|
|
|
- name: Debug WoL interface selection
|
|
ansible.builtin.debug:
|
|
msg:
|
|
- "Detected interface: {{ wol_detected_interface }}"
|
|
- "Detected physical NICs: {{ wol_detected_phys }}"
|
|
|
|
- name: Select physical NIC if exactly one found
|
|
ansible.builtin.set_fact:
|
|
wol_detected_phy: "{{ wol_bridge_phys[0] }}"
|
|
when: wol_bridge_phys | length == 1
|
|
|
|
- name: Select final WoL interface
|
|
ansible.builtin.set_fact:
|
|
wol_final_interface: >-
|
|
{{
|
|
wol_interface
|
|
if wol_interface | default('') | length > 0
|
|
else wol_detected_phy
|
|
}}
|
|
|
|
- name: Fail if multiple NICs are attached to bridge
|
|
ansible.builtin.fail:
|
|
msg: >
|
|
Multiple physical NICs found in {{ wol_detected_bridge }}:
|
|
{{ wol_bridge_phys }}.
|
|
Please set wol_interface explicitly.
|
|
when: wol_bridge_phys | length > 1
|
|
|
|
- name: Fail if no physical NIC was detected
|
|
ansible.builtin.fail:
|
|
msg: >
|
|
Unable to detect a physical NIC for Wake-on-LAN.
|
|
Detected bridge: {{ wol_detected_bridge | default('none') }}.
|
|
Please set wol_interface explicitly.
|
|
when: wol_final_interface | default('') | length == 0
|
|
|
|
- name: Check WOL support on interface
|
|
ansible.builtin.command: ethtool {{ wol_final_interface }}
|
|
register: wol_capabilities
|
|
changed_when: false
|
|
|
|
- name: Fail if NIC does not support Wake-on-LAN
|
|
ansible.builtin.fail:
|
|
msg: "Interface {{ wol_final_interface }} does not support Wake-on-LAN."
|
|
when: "'Wake-on:' not in wol_capabilities.stdout"
|
|
|
|
- name: Create systemd service for Wake-on-LAN
|
|
ansible.builtin.template:
|
|
src: wol.service.j2
|
|
dest: /etc/systemd/system/wol.service
|
|
owner: root
|
|
group: root
|
|
mode: '0644'
|
|
notify:
|
|
- Reload systemd and restart WOL
|
|
|
|
- name: Enable WOL immediately (without reboot)
|
|
ansible.builtin.command: ethtool -s {{ wol_final_interface }} wol {{ wol_mode }}
|
|
changed_when: false
|
|
|
|
- name: Verify Wake-on-LAN status
|
|
ansible.builtin.command: ethtool {{ wol_final_interface }}
|
|
register: wol_status
|
|
changed_when: false
|
|
when: wol_verify
|
|
|
|
- name: Get MAC address of WOL interface
|
|
set_fact:
|
|
wol_mac_address: >-
|
|
{{
|
|
ansible_facts['ansible_' + wol_final_interface]['macaddress']
|
|
| default('')
|
|
}}
|
|
|
|
- name: Show WOL status
|
|
ansible.builtin.debug:
|
|
msg: "{{ wol_status.stdout_lines }}"
|
|
when: wol_verify
|
|
|
|
- name: Fail if MAC address could not be detected
|
|
fail:
|
|
msg: "Unable to determine MAC address for interface {{ wol_final_interface }}"
|
|
when:
|
|
- wol_report_mac
|
|
- wol_mac_address | length == 0
|
|
|
|
- name: Report Wake-on-LAN sender details
|
|
ansible.builtin.debug:
|
|
msg:
|
|
- "Wake-on-LAN enabled on interface: {{ wol_final_interface }}"
|
|
- "MAC address: {{ wol_mac_address }}"
|
|
- "Example WOL commands:"
|
|
- " wakeonlan {{ wol_mac_address }}"
|
|
- " etherwake {{ wol_mac_address }}"
|
|
- "Home Assistant:"
|
|
- " mac: {{ wol_mac_address }}"
|
|
when: wol_report_mac
|
|
|