--- - name: Preflight checks block: - name: Collecting all nebula_internal_ip_addr values set_fact: sorted_ips: >- {{ hostvars | dict2items | selectattr('value.nebula_internal_ip_addr', 'defined') | map(attribute='value.nebula_internal_ip_addr') | list | sort }} - name: Initialize duplicated_ips list set_fact: duplicated_ips: [] - name: Looking for duplicate IP addresses set_fact: duplicated_ips: "{{ duplicated_ips + [item] }}" loop: "{{ sorted_ips | unique }}" when: "sorted_ips | select('equalto', item) | list | length > 1" - name: Fail if duplicate IP addresses are found fail: msg: "You have one or more hosts with duplicate IP addresses assigned: {{ duplicated_ips }}" when: duplicated_ips | length > 0 run_once: true