Я работаю над проектом, который будет использовать несколько устройств, которые нужно будет настроить с одинаковыми играми, но с разными переменными. У меня есть файл 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.
Что ты должен делать:
host_vars
в каталоге вашего проекта Ansible;host_vars
каталог;.yaml
расширение);В качестве альтернативы для охвата нескольких серверов вы можете сделать то же самое, используя group_vars
подкаталог и назовите файлы в соответствии с именами групп, определенными в файле инвентаризации.
Ссылаться на документация Чтобы получить больше информации.