Пошаговое руководство по организации инфраструктуры Ansible для управления 20 серверами с указанием конкретных команд, ожидаемых выводов и типовых ошибок. Время выполнения: настройка окружения и базовых ролей — 2–4 часа, внедрение полного рабочего процесса — 1–2 дня.
Статья была полезной?
Вы получите воспроизводимую структуру Ansible для 20 серверов с рабочими примерами inventory, roles и vault. Примерное время выполнения полного гайда — 3–6 часов при наличии доступа к серверам и прав root/ansible.
Ansible остаётся инструментом де-факто для агентless-автоматизации благодаря простоте YAML-плейбуков, широкому набору модулей и активной поддержке. К 2026 году ключевые преимущества — согласованные модули для облачных провайдеров, улучшенная работа с Collections и встроенная поддержка контейнеризованных сценариев. Для окружений до нескольких сотен узлов Ansible остаётся экономичным и предсказуемым решением, особенно при правильной организации inventory и ролей.

Схема архитектуры Ansible Control Node и Managed Nodes
Создание грамотного inventory — базовый элемент управления 20 серверами. Для масштабируемости используйте YAML-inventory (host vars и group vars) и минимизацию дублирования через group_vars. Приведён пример структуры и команд для проверки инвентаря.
# Файл: inventory/hosts.yml
all:
children:
webservers:
hosts:
web01.example.local:
web02.example.local:
web03.example.local:
dbservers:
hosts:
db01.example.local:
db02.example.local:
monitoring:
hosts:
mon01.example.local:Команда проверки инвентаря и ожидаемый вывод:
ansible-inventory -i inventory/hosts.yml --listУспешный вывод (пример):
{
"all": {
"children": {
"webservers": {
"hosts": [
"web01.example.local",
"web02.example.local",
"web03.example.local"
]
},
"dbservers": {
"hosts": [
"db01.example.local",
"db02.example.local"
]
},
"monitoring": {
"hosts": [
"mon01.example.local"
]
}
}
}
}Типовая ошибка и её фикс:
Ошибка:
ERROR! Inventory file 'inventory/hosts.yml' could not be parsed
Причина: синтаксическая ошибка YAML или неверный отступ.
Фикс: проверить YAML через 'yamllint' или 'python -c "import yaml, sys; yaml.safe_load(sys.stdin.read())" < inventory/hosts.yml'.Переменные: вынесите конфигурацию в group_vars и host_vars. Пример group_vars/webservers.yml:
# inventory/group_vars/webservers.yml
nginx_version: "1.26"
app_user: "deploy"
keep_releases: 5Проверка переменных на тестовом хосте:
ansible -i inventory/hosts.yml web01.example.local -m setup -a "filter=ansible_distribution*" -u ansibleУспешный вывод (фрагмент):
web01.example.local | SUCCESS => {
"ansible_facts": {
"ansible_distribution": "Ubuntu",
"ansible_distribution_version": "22.04"
}
}Типичная ошибка и фикс:
Ошибка:
UNREACHABLE! => {"msg": "Failed to connect to the host via ssh\
Комментарии (0)
Войдите или зарегистрируйтесь, чтобы оставить комментарий
Загрузка комментариев…