Схема инвентаризации, которая устанавливает источник истины, будет заключаться в запросе этих групп из некоторой системы. Что-то более сложное, чем строки в имени DNS.
Например, система базы данных инвентаризации netbox имеет подходящую роль устройства. Не придираться к netbox, но у него есть плагин инвентаризации Ansible и открытая модель базы данных, поэтому о ней легко говорить.
Однако, возможно, хорошей внешней базы данных еще не существует. Такая обычная схема именования может быть сгенерирована. С этим самым рекурсивным плагином инвентаризации Ansible генератор:
#инвентарь.yml
плагин: генератор
хосты:
name: "{{ application }}{{ number }}.{{ environment }}.example.com"
родители:
- имя: "{{ приложение }}_{{среда }}"
родители:
- имя: "{{ приложение }}"
вары:
приложение: "{{ приложение }}"
- имя: "{{среда }}"
вары:
среда: "{{ среда }}"
слои:
применение:
- приложение
- апи
среда:
- разработчик
- ка
- уат
- прод
количество:
- "01"
- "02"
- "05"
Имена слоев произвольны.Учитывая корень «hosts» и нотацию «parents», имена с более глубоким отступом представляют собой группы, содержащие внешние имена.
ansible-inventory -i inventory.yml --list
будет печатать хосты в JSON-документе инвентаризации Ansible. Частичный вывод:
{
"_мета": {
"хостварс": {
"app05.qa.example.com": {
"приложение": "приложение",
"окружающая среда": "ка"
}
}
},
"приложение_qa": {
"хозяева": [
"app01.qa.example.com",
"app02.qa.example.com",
"app05.qa.example.com"
]
},
"приложение": {
"дети": [
"приложение_dev",
"приложение_продукт",
"приложение_ка",
"приложение_уат"
]
},
"ка": {
"дети": [
"апи_ка",
"приложение_ка"
]
},
}
И продолжаем для других комбинаций.
Обратите внимание, что это сделано:
- группы приложений
- группы "окружающая среда"
- группы комбинаций "среда приложения"
- имена хостов, соответствующие шаблону имен DNS
- vars, содержащие «приложение» и «среду» для каждого хоста
Ограничения этого плагина включают:
Всегда делаем декартово произведение комбинаций слоев. Нельзя иметь больше или меньше определенной группы, а также начинать схемы нумерации с разных значений.
Отсутствие компактных диапазонов хостов. Ни синтаксис [01:25], ни функция range() не работают. Подумайте о том, чтобы запросить это, заполнив вопрос. В качестве обходного пути можно использовать десятки чисел в файле конфигурации.