Как иметь несколько имен хостов в одном доступном шаблоне?

Я хочу сгенерировать файл, одинаковый на двух хостах и ​​содержащий имена обоих хостов, например:

resource r0 {
  on host01 {
    device    /dev/drbd0;
  }
  on host02 {
    device    /dev/drbd0;
  }
}

Я попытался добиться этого с помощью следующего шаблона:

resource r0 {
  on {{ hostvars[groups['hosts'][0]]['ansible_nodename'] }} {
    device    /dev/drbd0;
  }
  on {{ hostvars[groups['hosts'][1]]['ansible_nodename'] }} {
    device    /dev/drbd0;
  }
}    

Это работает для первой переменной, но в списке нет второго элемента, поэтому вторая переменная неизвестна.

Как мне получить список хостов, чтобы я мог выбрать каждый хост отдельно из списка?

Изменить: соответствующий бит инвентаря

[hosts]
host01
host02

Редактировать:

Мой ответ ниже работает, если мне просто нужно имя хоста. Однако мне также нужен IP-адрес определенного интерфейса.

Как мне получить доступ к чему-то вроде информации в hostvars, но для хоста, отличного от текущего?


person loris    schedule 20.01.2016    source источник
comment
Можете ли вы также добавить свой файл инвентаризации (или его соответствующий фрагмент)?   -  person ydaetskcoR    schedule 20.01.2016


Ответы (1)


Следующее делает то, что я хочу:

resource r0 {
  on {{ groups['hosts'][0] }} {
    device    /dev/drbd0;
  }
  on {{ groups['hosts'][1] }} {
    device    /dev/drbd0;
  }
}    

Редактировать:

Чтобы получить доступ к переменным хостов, отличных от текущего, например к IP-адресам, плейбук должен включать другие хосты в инструкцию hosts. Я тестировал playbook, который работал только для одного хоста и поэтому не мог получить доступ к информации о другом хосте. Вы по-прежнему можете запустить такой тест, но вам потребуется фиктивное действие над другими хостами, как описано здесь: https://serverfault.com/a/639269/144800, чтобы собрать информацию о других хостах.

person loris    schedule 20.01.2016