51 lines
2.1 KiB
YAML
51 lines
2.1 KiB
YAML
- name: Gather network interfaces with `vars` name
|
|
ansible.builtin.set_fact:
|
|
_gather_ip_interfaces_with_vars_name: "{{ ansible_interfaces | map('regex_replace', '^', 'ansible_') | map('regex_replace', '[^a-zA-Z0-9]', '_') }}"
|
|
|
|
- name: Gather network interface information
|
|
ansible.builtin.set_fact:
|
|
interfaces: "{{ _gather_ip_interfaces_with_vars_name | map('extract', vars) }}"
|
|
|
|
- name: Gather all IPv4 addresses of interface
|
|
ansible.builtin.set_fact:
|
|
all_ipv4_addresses: "{{ (all_ipv4_addresses | default([])) + new_items }}"
|
|
loop: "{{ ansible_interfaces }}"
|
|
when: vars['ansible_' + item | regex_replace('[^a-zA-Z0-9]', '_')].ipv4 is defined
|
|
vars:
|
|
new_items: "{{
|
|
(
|
|
[vars['ansible_' + item | regex_replace('[^a-zA-Z0-9]', '_')].ipv4]
|
|
+ vars['ansible_' + item | regex_replace('[^a-zA-Z0-9]', '_')].ipv4_secondaries | default([])
|
|
) | map('combine', {'interface': item})
|
|
}}"
|
|
|
|
- name: Gather all IPv6 addresses of interface
|
|
ansible.builtin.set_fact:
|
|
all_ipv6_addresses: "{{ (all_ipv6_addresses | default([])) + new_items }}"
|
|
loop: "{{ ansible_interfaces }}"
|
|
when: vars['ansible_' + item | regex_replace('[^a-zA-Z0-9]', '_')].ipv6 is defined
|
|
vars:
|
|
new_items: "{{
|
|
vars['ansible_' + item | regex_replace('[^a-zA-Z0-9]', '_')].ipv6 | map('combine', {'interface': item})
|
|
}}"
|
|
|
|
- name: Compute additional info for IPv4
|
|
ansible.builtin.set_fact:
|
|
all_ipv4_addresses: "{{ all_ipv4_addresses | difference([item]) | list + [item | combine(additional_info)] }}"
|
|
loop: "{{ all_ipv4_addresses }}"
|
|
vars:
|
|
additional_info:
|
|
network_prefix: "{{ item.network }}/{{ item.prefix }}"
|
|
address_prefix: "{{ item.address }}/{{ item.prefix }}"
|
|
loop_control:
|
|
label: "{{ item.interface }}: {{ item.address }}"
|
|
|
|
- name: Compute additional info for IPv6
|
|
ansible.builtin.set_fact:
|
|
all_ipv6_addresses: "{{ all_ipv6_addresses | difference([item]) | list + [item | combine(additional_info)] }}"
|
|
loop: "{{ all_ipv6_addresses }}"
|
|
vars:
|
|
additional_info:
|
|
address_prefix: "{{ item.address }}/{{ item.prefix }}"
|
|
loop_control:
|
|
label: "{{ item.interface }}: {{ item.address }}"
|