refactor ♻️: Refactor Wake-on-LAN config to use dynamic mode selection, remove unused bridge mapping.
Some checks failed
ansible-lint / Ansible Lint (push) Failing after 10s
Some checks failed
ansible-lint / Ansible Lint (push) Failing after 10s
This refactoring updates the Wake-on-LAN configuration to dynamically select modes based on system capabilities and removes unnecessary logic related to bridge mappings.
This commit is contained in:
@@ -57,102 +57,15 @@
|
|||||||
when: en_interfaces | length > 0
|
when: en_interfaces | length > 0
|
||||||
|
|
||||||
- name: Enable Wake-on-LAN (magic packet) when supported
|
- name: Enable Wake-on-LAN (magic packet) when supported
|
||||||
ansible.builtin.command: "ethtool -s {{ item.0 }} wol g"
|
ansible.builtin.command: "ethtool -s {{ item.0 }} wol {{ wol_mode }}"
|
||||||
loop: "{{ en_interfaces | zip(wol_enabled.results, wol_supported.results) | list }}"
|
loop: "{{ en_interfaces | zip(wol_enabled.results, wol_supported.results) | list }}"
|
||||||
loop_control:
|
loop_control:
|
||||||
label: "{{ item.0 }}"
|
label: "{{ item.0 }}"
|
||||||
when:
|
when:
|
||||||
- "'g' not in item.1.stdout"
|
- "{{ wol_mode }} not in item.1.stdout"
|
||||||
- "'g' in item.2.stdout"
|
- "{{ wol_mode }} in item.2.stdout"
|
||||||
|
|
||||||
|
|
||||||
# # ============================================================
|
|
||||||
# # Map bridges to physical NICs using Ansible facts
|
|
||||||
# # ============================================================
|
|
||||||
# - name: Get bridge link information
|
|
||||||
# ansible.builtin.command: "bridge link show"
|
|
||||||
# register: bridge_links
|
|
||||||
# changed_when: false
|
|
||||||
# check_mode: false
|
|
||||||
|
|
||||||
# - name: Initialize detected interfaces dictionary
|
|
||||||
# ansible.builtin.set_fact:
|
|
||||||
# wol_detected_interfaces: {}
|
|
||||||
|
|
||||||
# - name: Detect physical NIC for each bridge
|
|
||||||
# ansible.builtin.set_fact:
|
|
||||||
# wol_detected_interfaces: >-
|
|
||||||
# {{
|
|
||||||
# wol_detected_interfaces | combine({
|
|
||||||
# item: (
|
|
||||||
# bridge_links.stdout_lines
|
|
||||||
# | select('search', 'master ' ~ item)
|
|
||||||
# | map('regex_replace', '^\\d+: ([a-z0-9@.]+):.*$', '\\1')
|
|
||||||
# | reject('search', '^(veth|tap|fw)')
|
|
||||||
# | reject('search', '^\\d+:')
|
|
||||||
# | select('in', wol_supported_interfaces)
|
|
||||||
# | first | default('')
|
|
||||||
# )
|
|
||||||
# })
|
|
||||||
# }}
|
|
||||||
# loop: "{{ wol_bridges_list }}"
|
|
||||||
# loop_control:
|
|
||||||
# label: "{{ item }}"
|
|
||||||
|
|
||||||
# - name: Check for bond0 backing
|
|
||||||
# when: bond_info.rc == 0
|
|
||||||
# block:
|
|
||||||
# - name: Detect if any bridge is backed by bond0
|
|
||||||
# ansible.builtin.set_fact:
|
|
||||||
# wol_has_bond0: "{{ wol_detected_interfaces.values() | select('search', 'bond0') | length > 0 }}"
|
|
||||||
|
|
||||||
# - name: Extract bond0 slaves if present
|
|
||||||
# ansible.builtin.set_fact:
|
|
||||||
# wol_bond0_slaves: >-
|
|
||||||
# {{
|
|
||||||
# (bond_info.stdout | regex_findall('Slave Interface: ([a-zA-Z0-9]+)')) | list
|
|
||||||
# }}
|
|
||||||
# when: wol_has_bond0 | default(false)
|
|
||||||
|
|
||||||
# # ============================================================
|
|
||||||
# # Validate configuration and resolve to physical NICs
|
|
||||||
# # ============================================================
|
|
||||||
# - name: Fail if any bridge backing NIC could not be detected
|
|
||||||
# ansible.builtin.fail:
|
|
||||||
# msg: >
|
|
||||||
# Unable to detect physical NIC backing bridge(s): {{ unresolved_bridges | join(', ') }}.
|
|
||||||
# Please verify bridges exist and are backed by WOL-capable interfaces.
|
|
||||||
# Available WOL-capable interfaces: {{ wol_supported_interfaces | join(', ') }}
|
|
||||||
# vars:
|
|
||||||
# unresolved_bridges: "{{ wol_detected_interfaces | dict2items | selectattr('value', 'equalto', '') | map(attribute='key') | list }}"
|
|
||||||
# when: unresolved_bridges | length > 0
|
|
||||||
|
|
||||||
# - name: Build final WOL interfaces list (deduped physical NICs)
|
|
||||||
# ansible.builtin.set_fact:
|
|
||||||
# wol_final_interfaces: "{{ wol_detected_interfaces.values() | unique | list }}"
|
|
||||||
|
|
||||||
# # ============================================================
|
|
||||||
# # Check current WOL status to ensure idempotency
|
|
||||||
# # ============================================================
|
|
||||||
# - name: Get current WOL status
|
|
||||||
# ansible.builtin.command: "ethtool {{ item }}"
|
|
||||||
# register: wol_current_status
|
|
||||||
# changed_when: false
|
|
||||||
# failed_when: false
|
|
||||||
# loop: "{{ wol_final_interfaces }}"
|
|
||||||
# loop_control:
|
|
||||||
# label: "{{ item }}"
|
|
||||||
|
|
||||||
# - name: Build list of NICs needing WOL enabled
|
|
||||||
# ansible.builtin.set_fact:
|
|
||||||
# wol_needs_enable: >-
|
|
||||||
# {{
|
|
||||||
# wol_current_status.results
|
|
||||||
# | selectattr('stdout', 'search', 'Wake-on: [^g]')
|
|
||||||
# | map(attribute='item')
|
|
||||||
# | list
|
|
||||||
# }}
|
|
||||||
|
|
||||||
# # ============================================================
|
# # ============================================================
|
||||||
# # Enable WOL immediately (only if needed)
|
# # Enable WOL immediately (only if needed)
|
||||||
# # ============================================================
|
# # ============================================================
|
||||||
|
|||||||
Reference in New Issue
Block a user