Инвентарный файл Ansible
Инвентарный файл (Inventory file) в Ansible — это ключевой компонент, который содержит информацию об управляемых узлах (хостах), таких как их IP-адреса, имена хостов, группы хостов и переменные. Этот файл указывает Ansible, на какие машины выполнять задачи и как с ними взаимодействовать.
Основные концепции инвентарного файла
- Хосты и группы: Инвентарный файл содержит список хостов, которые могут быть объединены в группы для удобства управления.
- Переменные: Можно задавать переменные для хостов и групп, чтобы управлять конфигурацией узлов.
- Форматы инвентаря: Инвентарь может быть представлен в виде текстового файла (INI или YAML/JSON) или динамически генерироваться с помощью скриптов.
Основные типы инвентарных файлов
- Статический инвентарь (INI или YAML/JSON):
- Простые текстовые файлы, где описаны хосты и группы.
- Подходит для небольших инфраструктур или тестирования.
- Динамический инвентарь:
- Скрипты или плагины, которые генерируют инвентарь на лету.
- Используется в облачных средах (AWS, Azure, GCP) и больших инфраструктурах, где списки хостов часто меняются.
Пример статического инвентарного файла в формате INI
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# Инвентарный файл INI формата [webservers] web1.example.com web2.example.com [databases] db1.example.com db2.example.com [all:vars] ansible_user=admin ansible_ssh_private_key_file=~/.ssh/id_rsa |
[webservers]
и[databases]
— группы хостов, которые можно адресовать в плейбуках.[all:vars]
— общие переменные для всех хостов.
Пример инвентаря в формате YAML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
all: hosts: web1.example.com: ansible_host: 192.168.1.10 web2.example.com: ansible_host: 192.168.1.11 children: webservers: hosts: web1.example.com: web2.example.com: databases: hosts: db1.example.com: db2.example.com: vars: ansible_user: admin ansible_ssh_private_key_file: ~/.ssh/id_rsa |
Пример динамического инвентаря
Динамический инвентарь — это скрипт или плагин, который на лету генерирует список узлов и их параметры. Например, для работы с AWS используется плагин aws_ec2
, который автоматически получает информацию об инстансах EC2.
Пример команды для использования динамического инвентаря:
1 2 |
ansible-inventory -i aws_ec2.yml --list |
Переменные в инвентарном файле
Переменные можно задавать на разных уровнях:
- Переменные хоста: задаются напрямую для конкретного хоста.
- Переменные группы: задаются для группы хостов, и применяются ко всем хостам в группе.
- Глобальные переменные: задаются для всех хостов сразу.
Пример использования переменных в INI
1 2 3 4 5 6 7 |
[webservers] web1.example.com ansible_user=ubuntu web2.example.com ansible_user=ubuntu [databases] db1.example.com ansible_user=dbadmin |
Как использовать инвентарь с Ansible
Для указания инвентарного файла используется флаг -i
при запуске команд:
1 2 |
ansible-playbook -i inventory.ini playbook.yml |
Схема (картинка из статьи )
Recommended Posts
Плейбук Ansible по развертыванию haproxy
15.02.2024