Инвентарь#
Расширения инвентаря (inventory plugins) обрабатывают определенным образом источники данных, на основе которых формируется конечное описание инвентаря.
Активация и использование#
По умолчанию Ansible использует все расширения описания инвентаря, имеющиеся в коллекции ansible.builtin.
Однако, если в ansible.cfg задано значение параметра enable_plugins, включены будут только указанные расширения.
[inventory]
enable_plugins=auto,yaml,ini,script
Расширение ansible.builtin.auto позволяет Ansible автоматически определить, какое расширение использовать для каждого файла инвентаря.
Для этого Ansible анализирует структуру файла и при обнаружении ключа plugin подключает указанное расширение.
plugin: ansible.builtin.yaml
all:
hosts:
host1:
Для использования расширения необходимо предоставить ему источники инвентаря. Это выполняется при запуске утилит ansible, ansible-inventory или ansible-playbook. Далее приведен список вариантов указания источников в порядке убывания приоритета:
аргумент
-i(--inventory,--inventory-file);переменная окружения
ANSIBLE_INVENTORY;переменная
inventoryв конфигурационном файлеansible.cfg.
В сложных инфраструктурах исходное описание инвентаря может быть размещено в каталоге с разветвленной структурой внутренних каталогов и файлов.
Ansible рекурсивно обходит указанный каталог и обрабатывает найденные в нем файлы в алфавитном порядке.
Следует учитывать это, если используется расширение ansible.builtin.constructed, которое конструирует описание из подобных предварительных описаний узлов.
Задать порядок загрузки описаний можно с помощью нескольких аргументов -i, например:
ansible-inventory -i hosts.yml -i extra_vars.yml -i constructed.yml
Расширения описания инвентаря могут создавать динамические группы (ключ keyed_groups) путем анализа переменных узлов.
Также можно использовать ключ groups и генерировать переменные с помощью compose.
Пример описания инвентаря с динамической генерацией групп и переменных
Исходный файл с описанием узлов:
hosts.yml#all:
children:
webserver:
hosts:
web01:
ip: 10.0.0.1
web02:
ip: 10.0.1.1
database:
hosts:
db01:
ip: 10.0.0.2
dev:
hosts:
web01:
db01:
prod:
hosts:
web02:
Файл с конфигурацией constructed:
constructed.yml#plugin: constructed
groups:
dev: "'dev' in group_names"
prod: "'prod' in group_names"
keyed_groups:
- key: ansible_host
prefix: host_
separator: "_"
compose:
ansible_host: ip
role: "'web' if 'webserver' in group_names else 'db'"
Запуск команды с объединением инвентарей:
ansible-inventory -i hosts.yml -i constructed.yml --graph
Результат:
Подробности о каждом расширении см. в справочнике.
Кеширование#
Некоторые расширения описания инвентаря могут использовать кеш. Он позволяет сохранять факты Ansible об узлах между запусками сценариев, чтобы ускорить работу и избежать повторных запросов.
Общие параметры кеша настраиваются в секциях [defaults] и [inventory] конфигурационного файла ansible.cfg:
ansible.cfg#[defaults]
fact_caching = ansible.builtin.jsonfile
fact_caching_connection = /tmp/ansible_facts
cache_timeout = 3600
[inventory]
cache = yes
cache_connection = /tmp/ansible_inventory
Для некоторых специфичных расширений описания инвентаря настройки задаются в конфигурационном файле конкретного расширения, например:
demo.aws_ec2.yml#plugin: amazon.aws.aws_ec2
cache: true
cache_plugin: ansible.builtin.jsonfile
cache_timeout: 7200
cache_connection: /tmp/aws_inventory
cache_prefix: aws_ec2
Подробнее о кешировании см. Кеширование.