Разработка динамических источников инвентаризации
Как описано в Динамической инвентаризации, Ansible может получать информацию об инвентаризации из динамических источников, включая облачные источники.
Как создать новый?
Просто! Мы просто создаём скрипт или программу, которая может выводить JSON в правильном формате, когда ей переданы соответствующие аргументы. Вы можете сделать это на любом языке программирования.
Правила написания скриптов инвентаризации
Когда внешний скрипт узла вызывается с единственным аргументом --list, скрипт должен вывести закодированный в JSON хеш/словарь всех управляемых групп в стандартный вывод. Значение каждой группы должно быть либо хеш/словарём, содержащим список каждого узла/IP-адреса, потенциальных дочерних групп и потенциальных переменных группы, либо просто списком адресов узлов/IP-адресов, как показано ниже:
{
"databases": {
"hosts": ["host1.example.com", "host2.example.com"],
"vars": {
"a": true
}
},
"webservers": ["host2.example.com", "host3.example.com"],
"atlanta": {
"hosts": ["host1.example.com", "host4.example.com", "host5.example.com"],
"vars": {
"b": false
},
"children": ["marietta", "5points"]
},
"marietta": ["host6.example.com"],
"5points": ["host7.example.com"]
}
Новая функция в версии 1.0.
Перед версией 1.0 каждая группа могла содержать только список имён хостов/IP-адресов, например, группы webservers, marietta и 5points выше.
При вызове со следующими аргументами --host <hostname> (где <hostname> — узел из вышеперечисленных), скрипт должен вывести либо пустой JSON хеш/словарь, либо хеш/словарь переменных, которые должны быть доступны для шаблонов и playbooks. Вывод переменных является необязательным, если скрипт не хочет этого делать, то он должен выводить пустой хеш/словарь:
{
"favcolor": "red",
"ntpserver": "wolf.example.com",
"monitoring": "pack.example.com"
}
Настройка внешнего скрипта инвентаризации
Новая функция в версии 1.3.
Стандартная система скриптов инвентаризации, описанная выше, работает для всех версий Ansible, но вызов --host для каждого узла может быть довольно дорогостоящим, особенно если он включает дорогостоящие API-вызовы к удалённой подсистеме. В Ansible 1.3 и более поздних версиях, если скрипт инвентаризации возвращает элемент верхнего уровня с именем «_meta», то можно вернуть все переменные узла в одном вызове скрипта инвентаризации. Если этот элемент meta содержит значение для «hostvars», скрипт инвентаризации не будет вызываться с --host для каждого узла. Это приводит к значительному увеличению производительности для большого количества узлов, а также упрощает реализацию кэширования на стороне клиента для скрипта инвентаризации.
Данные, которые должны быть добавлены в словарь JSON верхнего уровня, выглядят так:
{
# results of inventory script as above go here
# ...
"_meta": {
"hostvars": {
"moocow.example.com": {
"asdf" : 1234
},
"llama.example.com": {
"asdf": 5678
}
}
}
}
Для удовлетворения требований использования _meta, чтобы предотвратить вызов Ansible вашим скриптом инвентаризации с --host, вы должны по крайней мере заполнить _meta пустым hostvars словарем, например:
{
# results of inventory script as above go here
# ...
"_meta": {
"hostvars": {}
}
}
См. также
- Python API
- Python API для Playbooks и выполнения задач Ad Hoc
- Разработка модулей
- Как разрабатывать модули
- Разработка плагинов
- Как разрабатывать плагины
- Ansible Tower
- REST API-точку конечного узла и графический интерфейс пользователя для Ansible, синхронизируется с динамической инвентаризацией
- Список рассылки для разработчиков
- Список рассылки для тем по разработке
- irc.freenode.net
- IRC-чат-канал #ansible
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.4/dev_guide/developing_inventory.html