← Назад к вопросам
Как объявить хост в файле inventory с расширением YAML
1.3 Junior🔥 221 комментариев
#Ansible и управление конфигурацией
Комментарии (1)
🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Объявление хостов в Ansible Inventory YAML
В современных версиях Ansible (начиная с 2.4) YAML-формат inventory стал предпочтительным способом описания инфраструктуры благодаря своей структурированности и читаемости. Вот основные подходы к объявлению хостов:
Базовое объявление хостов
Простой список хостов можно объявить в корневом элементе all.hosts:
all:
hosts:
webserver1:
ansible_host: 192.168.1.10
webserver2:
ansible_host: 192.168.1.11
database:
ansible_host: 192.168.1.20
Использование групп
Основная сила inventory YAML проявляется при работе с группами хостов:
all:
children:
webservers:
hosts:
web1:
ansible_host: 10.0.0.1
web2:
ansible_host: 10.0.0.2
databases:
hosts:
db-primary:
ansible_host: 10.0.1.1
db-replica:
ansible_host: 10.0.1.2
# Группа, объединяющая другие группы
production:
children:
webservers:
databases:
Расширенные возможности YAML inventory
Переменные на разных уровнях
all:
vars:
ansible_user: admin
ansible_ssh_private_key_file: ~/.ssh/production_key
children:
webservers:
vars:
http_port: 80
max_clients: 200
hosts:
web1.prod.example.com:
# Переменные уровня хоста переопределяют групповые
http_port: 8080
Использование шаблонов для диапазонов
all:
hosts:
# Диапазон номеров
web-[01:10].example.com:
# Диапазон букв
db-[a:e].example.com:
# Комбинированные шаблоны
app-server-[1:3]-[a:c]:
Динамические группы с паттернами
all:
children:
# Группа по паттерну имени
us_servers:
hosts:
"*.us.example.com":
# Группа с использованием переменных
high_memory:
hosts:
"{{ groups['all'] }}"
vars:
min_memory: 16384
Продвинутые примеры
Inventory с ролями и средами
all:
children:
prod:
children:
prod_webservers:
hosts:
prod-web-01:
ansible_host: 192.168.100.10
role: frontend
prod-web-02:
ansible_host: 192.168.100.11
role: backend
prod_databases:
hosts:
prod-db-01:
ansible_host: 192.168.101.10
cluster_node: primary
stage:
children:
stage_servers:
hosts:
stage-web-01:
ansible_host: 192.168.200.10
stage-db-01:
ansible_host: 192.168.200.20
Inventory с кастомными переменными и структурами
all:
vars:
environment: production
data_center: ams01
children:
application_stack:
vars:
stack_version: "2.5.1"
deployment_strategy: rolling
hosts:
app-server-1:
ansible_host: 10.1.0.100
# Сложные структуры данных
ports:
- 80
- 443
tags:
- primary
- load_balancer
app-server-2:
ansible_host: 10.1.0.101
ports:
- 8080
Практические рекомендации
- Именование файлов: Используйте расширение
.ymlили.yamlдля inventory файлов - Подключение inventory: Указывайте в
ansible.cfgили через флаг-i - Валидация: Проверяйте YAML-синтаксис с помощью
ansible-inventory --list -i inventory.yml - Модульность: Разделяйте большое inventory на несколько файлов с помощью
includeилиimport - Безопасность: Используйте
ansible-vaultдля шифрования чувствительных данных
YAML inventory предоставляет мощный и гибкий способ управления инфраструктурой, особенно в комбинации с динамическими inventory-скриптами и плагинами inventory, что делает его идеальным выбором для сложных DevOps-сред.