- name: "detect nm connection corresponding to interface '{{ iface }}'" shell: "nmcli d show {{ iface | quote }} | grep CONNECTION | cut -d ':' -f 2- | sed -E -e 's/^[[:space:]]+//' | grep '^[[:alpha:]]'" register: conres failed_when: false changed_when: false - name: "check if the requested ip '{{ cidr }}' is present on the interface '{{ iface }}'" set_fact: ip_present: "{{ cidr | ipaddr('address') in ips }}" vars: eth: "{{ hostvars[inventory_hostname]['ansible_' + iface] | default({}) }}" ipv4: "{{ eth['ipv4'] | default({}) }}" q: "{{ eth | json_query('ipv4_secondaries[*].address') }}" sec: "{{ ((q == ands_none) or (q == '')) | ternary([], q) }}" ips: "{{ sec | union([ipv4.address]) }}" when: - conres.rc == 0 # - eth.ipv4 is defined - name: "destroy connection '{{ conres.stdout }}' if ip does not match" command: "nmcli connection delete {{ conres.stdout | quote }}" register: delres when: - conres.rc == 0 - force | default(false) - not (alias | default(false)) - not ip_present - name: "configure storage network interface '{{ iface }}' to '{{ cidr }}'" command: "nmcli connection add type infiniband ifname {{ iface | quote }} con-name {{ name }} ip4 {{ cidr }}" when: - (conres.rc != 0) or (not (delres | skipped)) - (conres.rc != 0) or (not (alias | default(false))) - name: "add ip alias '{{ cidr }}' to connection '{{ conres.stdout }}' using interface '{{ iface }}'" command: "nmcli connection modify {{ conres.stdout | quote }} +ipv4.address {{ cidr }}" register: alres when: - alias | default(false) - conres.rc == 0 - not ip_present - name: "add ip alias '{{ cidr }}' to network interface '{{ iface }}'" command: "nmcli connection up {{ conres.stdout | quote }}" register: alres when: - not(alres | skipped) - alres | succeeded - not ip_present