That makes sense -thank you. Sorry for the confusion - some of your text is white and did not display against my white background! It works now!
On Monday, January 16, 2023 at 9:44:09 PM UTC-5 [email protected] wrote: > Hi 👋 > > It’s the VLAN ID for the sub-interface which ansible_facts is showing for > eth0_1 > > You must use the iproute 2 package with ip addr not net-tools > > If you want to modify this then you will need set_facts magic; > > To access variables of other hosts, you should enable fact caching > <http://docs.ansible.com/ansible/playbooks_variables.html#fact-caching>. > > In playbook files, you should adding gather_facts: True to update facts. > > > The ansible_interfaces fact lists all of the existing network interfaces. > > > Some hints to get an interface when you know more information: > > var: > allNetworkInterfaces: "{{ ansible_facts | dict2items | > selectattr('value.ipv4', 'defined') | map(attribute='value') | list }}" > allNetworkInterfaces_variant2: "{{ ansible_facts.interfaces | > map('extract', ansible_facts ) | list }}" > interfaceWithKnownIp: "{{ ansible_facts | dict2items | > selectattr('value.ipv4', 'defined') | selectattr('value.ipv4.address', > 'equalto', myKnowIpV4) | first }}" > interfaceWithKnownIp_fromVar: "{{ allNetworkInterfaces | > selectattr('ipv4.address', 'equalto', myKnowIpV4) | first }}" > interfacesWithPartialKnowMac: "{{ allNetworkInterfaces | > selectattr('macaddress', 'match', knownMacPrefix~'.*') | list }}" > interfacesWitKnowType: "{{ allNetworkInterfaces | selectattr('type', > 'equalto', knownType) | sort(attribute='device') | list }}" > # extended on 2020-10-28 > queryForKnownIpv6: "[*].{device: device, ipv4: ipv4, ipv6: ipv6[? > address == 'fe80::a00:27ff:fe38:ad36']}[?ipv6])" # string must be in ' # > sorry, only partial interface info, did not find out how to return all info > directly > interfacesWithKnownIpv6: '{{ allNetworkInterfaces | > json_query(queryForKnownIpv6) | first }}' > queryForKnownIpv4_linux: "[?ipv4.address == '{{ myKnownIpV4 > }}']}[?ipv4])" # string must be in ' > interfacesWithKnownIp_variantJsonQuery: '{{ allNetworkInterfaces | > json_query(queryForKnownIpv4_linux) | first }}' > > some short explications: > > > - dict2item > > <https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#dict-filter> > because selectattr > <http://jinja.pocoo.org/docs/dev/templates/#selectattr>expects an array > - map(attribute='...') <http://jinja.pocoo.org/docs/dev/templates/#map> to > unpack this array > - map('extract', ...) > > <https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#extracting-values-from-containers> > to > extract interfaces from ansible_facts > - ansible_facts.interfaces is the same as ansible_interfaces > - json_query() > > <https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#selecting-json-data-json-queries> > for > flexible selecting and unpacking, an alternative variant with `map()? is > welcome > > > the ansible_interfaces fact contains a list of all the network interfaces > and they appear to be in order (i.e., the first ethernet interface would > have been called eth0, the second eth1, etc). With a little set_fact > magic: > > - name: define traditional ethernet facts > set_fact: > ansible_eth: "{% set ansible_eth = ansible_eth|default([]) + > [hostvars[inventory_hostname]['ansible_' + item]] %}{{ ansible_eth|list }}" > when: hostvars[inventory_hostname]['ansible_' + item]['type'] == 'ether' > with_items: > - "{{ hostvars[inventory_hostname]['ansible_interfaces'] }}" > > This loops over all of the ansible_interfaces entries for the current > machine and builds a list of the hostvars[inventory_hostname]['ansible_' > + item] entries that have a type equal to "ether". > > Thus now ansible_eth.0 and ansible_eth.1 should be roughly equivalent to > the old ansible_eth0 and ansible_eth1 respectively. > > Best, > > S.W > On Thu, 12 Jan 2023 at 11:24, Kathy L <[email protected]> wrote: > >> I'm using ansible-core 1.18. When I gather facts on a device, it shows >> the interfaces of eth0, eth0_1, eth1 and lo. The results of "ip a" show >> only eth0, eth1 and lo interfaces . When I try to start arpwatch for each >> interface (other than lo), it fails on eth0_1, which makes sense to me. >> Why does ansible_facts interfaces show eth0_1? >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Ansible Project" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/ansible-project/61377336-30f3-4b80-b783-82ff963de609n%40googlegroups.com >> >> <https://groups.google.com/d/msgid/ansible-project/61377336-30f3-4b80-b783-82ff963de609n%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- You received this message because you are subscribed to the Google Groups "Ansible Project" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/0c1f9cbd-a800-4bbb-886a-569007de7339n%40googlegroups.com.
