Назад | Перейти на главную страницу

Ansible: попытка поместить условные обозначения в файл vars

Я работаю над проектом, который будет использовать несколько устройств, которые нужно будет настроить с одинаковыми играми, но с разными переменными. У меня есть файл vars, который включает несколько библиотек, по одной для каждого устройства. Имя библиотеки совпадает с именем устройства, например:

(Устройство1)

- {xxx: "AAA", yyy: "BBB", zzz: "CCC"}
- {xxx: "AAA", yyy: "BBB", zzz: "CCC"}

(Устройство2)

- {xxx: "AAA", yyy: "BBB", zzz: "CCC"}
- {xxx: "AAA", yyy: "BBB", zzz: "CCC"}

Сама игра должна определить, какая библиотека соответствует устройству, использовать переменные этой библиотеки и никакие другие. Моя текущая попытка сделана так:

- name: do this
  command: "do some of item.xxx with some item.zzz
- include_vars: device-library.yaml
  when: "{{item}} == {{ansible_hostname}}"

Но всегда получаю:

фатальный: [xxx.xxx.xxx.xxx]: НЕ ПРОШЛО! => {"failed": true, "msg": "ОШИБКА! 'элемент' не определен"}

Когда в этом проекте было всего одно устройство, мы использовали with_items: stuff.yaml все время, и все работало нормально.

У меня такой вопрос: что я должен поставить вместо {{item}}, или есть способ лучше?

Из этого заявления:

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

В заключение я хочу сказать, что вы пытаетесь воспроизвести одну из самых фундаментальных функций Ansible.

Что ты должен делать:

  1. создать подкаталог host_vars в каталоге вашего проекта Ansible;
  2. переместите файлы, содержащие определения переменных, в host_vars каталог;
  3. убедитесь, что указанные выше имена файлов точно совпадают с именами хостов, используемыми Ansible для обращения к целевым машинам (нет .yaml расширение);
  4. удалите все директивы manual include из вашей книги;
  5. запустить playbook.

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

Ссылаться на документация Чтобы получить больше информации.