На больших инфраструктурах Ansible может работать медленно. Как ускорить выполнение плейбуков? Разбираем на практике:
1. Оптимизация SSH-соединения
✅ Отключите SSH-проверки
Добавьте в ansible.cfg:
[ssh_connection]
ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s -o ConnectTimeout=5 -o GSSAPIAuthentication=no
pipelining = true

Что это даёт?
- ControlMaster — переиспользование SSH-соединений;
- pipelining — ускорение выполнения модулей.
✅ Используйте persistent-соединения
[persistent_connection]
connect_timeout = 30
command_timeout = 60

2. Параллельное выполнение задач
✅ Запускайте задачи параллельно (-f N)
ansible-playbook playbook.yml -f 20 # 20 потоков

✅ Используйте async для долгих задач
- name: Долгая операция
command: /some/long/script.sh
async: 300 # таймаут в секундах
poll: 0 # не ждать завершения

3. Оптимизация инвентаря
✅ Динамический инвентарь
Используйте генерацию инвентаря из облачных провайдеров (AWS, GCP) или CMDB.
✅ Группировка хостов
Разбивайте хосты на группы ([web], [db]) для точечного применения плейбуков.
4. Кэширование фактов (facts)
✅ Отключите сбор фактов, если они не нужны
- hosts: all
gather_facts: false

✅ Кэшируйте факты в Redis/JSON
В ansible.cfg:
[defaults]
fact_caching = jsonfile
fact_caching_connection = /tmp/ansible_facts

5. Оптимизация самих плейбуков
✅ Используйте meta: flush_handlers
- name: Apply config
template: src=config.j2 dest=/etc/app.conf
notify: restart app
- meta: flush_handlers # принудительно запускает handlers

✅ Замените command/shell на специализированные модули
❌ Плохо:
- command: apt install nginx

✅ Лучше:
- apt: name=nginx state=present

Еще 5 способов оптимизации Ansible расскажем в следующий раз, а пока напомним — курс «Ansible: Infrastructure as Code» стартует через 10 дней. Если вы планировали освоить инструмент, который автоматизирует рутину и даст вам возможность работать эффективнее, быстрее и интереснее, самое время занять место на курсе.
👉 До 21 апреля действует спеццена! Все подробности — по ссылке.
Читать вторую часть статьи по ссылке.