ansible_Jonny007MKD_interfaces/roles/gather_ip_interfaces/tasks/main.yml

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 }}"