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

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

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 а для хозяина кроме текущего?

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, чтобы собрать факты для других хостов.

Другие вопросы по тегам