Ansible: Как мне получить хост по номеру индекса в группе хостов

#ansible

#ansible

Вопрос:

У меня есть эта группа хостов в инвентаре

 [test-node]
usprz3-sec-asept-dz03.prz.foo.com
usprz3-sec-asept-dz04.prz.foo.com
  

Я хочу напечатать эти имена хостов в файле с помощью шаблона .j2
Я не хочу перебирать список, я просто хочу напечатать первый элемент в группе в одном месте и 2-й элемент в другом месте. Есть ли способ, подобный приведенному ниже, который дал бы мне желаемый эффект?

 [test-node].0    should print usprz3-sec-asept-dz03.prz.foo.com
[test-node].1    usprz3-sec-asept-dz04.prz.foo.com
  

Моя версия ansible — ansible 2.5.4

Спасибо.

Ответ №1:

Список групп и хостов доступен в специальных переменных. Задача, приведенная ниже

 - template:
    src: test-template.j2
    dest: test.txt
  

и шаблон (test-template.j2)

 {% for item in groups['test-node'] %}
[test-node].{{loop.index}}    {{ item }}
{% endfor %}
  

дает:

 > cat test.txt
[test-node].1    usprz3-sec-asept-dz03.prz.foo.com
[test-node].2    usprz3-sec-asept-dz04.prz.foo.com
  

Комментарии:

1. Владимир, спасибо за ваш ответ. Предположим, я не хочу перебирать группу (потому что я хочу, чтобы имена хостов были в разных местах, а не последовательно друг за другом.) Могу ли я ссылаться на них как на группы [‘test-node’].1 и группы [‘test-node’] .2?

Ответ №2:

Взяв пример Владимира, вы можете напечатать первый хост в списке как

 {{ groups['test-node'].0 }}
  

Это выведет usprz3-sec-asept-dz03.prz.foo.com

и второй хост как

 {{ groups['test-node'].1 }}
  

Это выведет usprz3-sec-asept-dz04.prz.foo.com