Как сопоставить первое значение зерен в солончаке? - PullRequest
0 голосов
/ 26 мая 2020

Я хочу получить первое значение eth0. Я хотел бы установить переменную.

hardware_interface:
  eth0:
      10.0.2.16
      192.168.34.11
  lo:
      127.0.0.1

Ниже приведено объявление моей переменной в файле состояния, и оно не работает. Что мне не хватает?

{% set interface = grains['hwaddr_interfaces'][0] %}
{% set ip = grains['ipv4'][1] %}

1 Ответ

0 голосов
/ 01 июня 2020

Вы пытаетесь получить доступ к словарю (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
...