Files
oopen-server/roles/network_interfaces/tasks/interfaces.yml
2025-12-12 16:01:06 +01:00

88 lines
2.7 KiB
YAML

---
- name: (interfaces.yml) Check if file /etc/network/interfaces.ORIG exists
stat:
path: /etc/network/interfaces.ORIG
register: stat_result
tags:
- network-interfaces
- name: (interfaces.yml) Backup existing file '/etc/network/interfaces'
command: cp -a /etc/network/interfaces /etc/network/interfaces.ORIG
when: stat_result.stat.exists == False
tags:
- network-interfaces
- name: (interfaces.yml) Ensure interfaces file is latest
template:
src: "etc/network/interfaces.j2"
dest: /etc/network/interfaces
with_items: network_interfaces
tags:
- network-interfaces
- name: (interfaces.yml) Build interface map by device
ansible.builtin.set_fact:
iface_map: "{{ iface_map | default({}) | combine({ item.device: (iface_map[item.device] | default([])) + [item] }) }}"
loop: "{{ network_interfaces | default([]) }}"
loop_control:
label: "{{ item.device }}"
tags: [network-interfaces]
- name: (interfaces.yml) Ensure imported device files at interfaces.d are latest
ansible.builtin.template:
src: etc/network/interfaces.d/device.j2
dest: "{{ network_interface_path }}/device-{{ grp.key }}"
loop: "{{ iface_map | dict2items }}"
loop_control:
loop_var: grp
register: network_configuration_result
tags: [network-interfaces]
#- name: Ensure imported device files at interfaces.d are latest
# ansible.builtin.template:
# src: etc/network/interfaces.d/device.j2
# dest: "{{ network_interface_path }}/device-{{ grp.0 }}"
# loop: "{{ (network_interfaces | default([]) | groupby('device')) | list }}"
# loop_control:
# loop_var: grp
# register: network_configuration_result
# tags: [network-interfaces]
#- name: (interfaces.yml) Ensure imported device files at interfaces.d are latest
# template:
# src: "etc/network/interfaces.d/device.j2"
# dest: "{{ network_interface_path }}/device-{{ item.0 }}"
# with_items:
# - "{{network_interfaces | default([]) | groupby('device') }}"
# register: network_configuration_result
# tags:
# - network-interfaces
# ---
# Remove device files not configured here
# ---
- name: (interfaces.yml) list existing files
find:
path: "{{ network_interface_path }}"
file_type: file
register: files_matched
tags:
- network-interfaces
- name: (interfaces.yml) configured files
set_fact:
network_configured_files: >
[{% for item in network_configuration_result.results | default([]) -%}
u"{{ item.dest | default(item.path) }}"
{{ '' if loop.last else ',' }}
{%- endfor %}]
- name: (interfaces.yml) remove configurations
file:
dest: "{{ item.path }}"
state: absent
when: item.path not in network_configured_files
with_items: "{{ files_matched.files | default([]) }}"