Вы пытаетесь получить доступ к словарю (hwaddr_interfaces), поэтому у вас нет прямого доступа к значению с индексом.
{% set interface = salt['grains.get']("hwaddr_interfaces", []) %}
# {{ interface.keys() }}
# {{ interface.keys() | first }}
# {{ interface.keys()[0] }}
Это приведет к следующему результату при выполнении вызова соли - l debug:
...
# [u'lo', u'virbr0', u'virbr0-nic', u'eth0']
# lo
# lo
...
Когда вы используете .keys (), вы получаете массив. Если вам нужен первый элемент, достаточно использовать jinja | first
. в противном случае interface.keys()[idx]
После того, как у вас есть имя интерфейса, вы можете получить связанный массив с помощью:
{% set res = salt['grains.get']("hwaddr_interfaces:"+interface.keys()[0], []) %}
Для части ipv4 он должен работать, поскольку это массив:
{% set ip = salt['grains.get']('ipv4') %}
# {{ ip }}
# {{ ip | first }}
# {{ ip[1] }}
вывод:
# [u'127.0.0.1', u'192.168.1.34', u'192.168.122.1']
# 127.0.0.1
# 192.168.1.34