Установка и настройка Ansible

TL;DR: pipx install ansible — рекомендуемый способ. Control Node — только Linux/macOS. ansible.cfg — рядом с playbook. Включить pipelining = ускорение в 3-5 раз.

Ansible устанавливается только на Control Node. На управляемые серверы ничего ставить не нужно, кроме Python и SSH.

Установка

Рекомендуемый: pipx (изолированная среда)

# Установить pipx
sudo pacman -S python-pipx          # Arch
sudo apt install pipx                # Ubuntu 23.04+
brew install pipx                    # macOS
 
pipx ensurepath                      # добавить в PATH
 
# Установить Ansible
pipx install ansible
 
# Дополнительные инструменты
pipx inject ansible ansible-lint argcomplete

Системные пакеты

# Ubuntu / Debian (PPA для свежей версии)
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install ansible
 
# RHEL / CentOS / Fedora
sudo dnf install epel-release
sudo dnf install ansible
 
# Arch Linux
sudo pacman -S ansible
 
# macOS
brew install ansible

Windows (только через WSL2)

wsl --install

Далее в Ubuntu-терминале — установка как для Linux.

Настройка (ansible.cfg)

Ansible ищет конфигурацию: $ANSIBLE_CONFIG./ansible.cfg~/.ansible.cfg/etc/ansible/ansible.cfg. Создайте файл в корне проекта.

[defaults]
# Путь к инвентарю
inventory = ./inventory/hosts.yml
 
# Формат вывода — читаемый YAML вместо JSON
stdout_callback = yaml
stderr_callback = yaml
 
# Отключить .retry файлы
retry_files_enabled = False
 
# Отключить проверку SSH Host Key (для динамических сред)
host_key_checking = False
 
# Сбор фактов: smart = кэшировать, explicit = только по запросу
gathering = smart
 
# Python-интерпретатор: не показывать предупреждения
interpreter_python = auto_silent
 
# Количество параллельных SSH-соединений (по умолчанию 5)
forks = 20
 
# Путь к коллекциям
collections_path = ./collections
 
[ssh_connection]
# КРИТИЧНО ДЛЯ СКОРОСТИ
# Pipelining = меньше SSH-операций, ускорение в 3-5 раз
# Требует отключённого requiretty в /etc/sudoers (обычно по умолчанию)
pipelining = True
 
# Переиспользование SSH-соединений (ControlPersist)
ssh_args = -o ControlMaster=auto -o ControlPersist=60s
 
[privilege_escalation]
# become по умолчанию для всех playbook
become = False
become_method = sudo
become_ask_pass = False

Проверка

# Версия Ansible
ansible --version
 
# Какой конфиг используется
ansible --version | head -1
# ansible [core 2.16.0]
#   config file = /home/user/project/ansible.cfg
 
# Ping всех хостов из inventory
ansible all -m ping
 
# Ping конкретной группы
ansible webservers -m ping

Типичные ошибки

ОшибкаСимптомРешение
Ansible из snap/apt без PPAСтарая версия (2.9 вместо 2.16)Использовать pipx или PPA
Нет pipelining = TruePlaybook выполняется медленноДобавить в [ssh_connection] секцию ansible.cfg
host_key_checking = TrueUNREACHABLE! Host key verification failedОтключить или добавить ключи в known_hosts
Windows без WSLansible: command not foundControl Node — только Linux/macOS. Установить WSL2
forks = 5 (по умолчанию)100 хо