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