Ответ
Да, активно использую Ansible для идемпотентной автоматизации настройки серверов, управления конфигурациями и деплоя приложений.
Пример плейбука для базовой настройки веб-сервера с использованием ролей и обработчиков:
# site.yml
- name: Configure baseline and deploy web servers
hosts: webservers
become: yes
vars_files:
- vars/main.yml
tasks:
- name: Ensure required system packages are installed
apt:
name: "{{ item }}"
state: present
update_cache: yes
loop:
- curl
- vim
- htop
- name: Create application user
user:
name: "{{ app_user }}"
system: yes
shell: /bin/bash
- name: Deploy Nginx configuration template
template:
src: templates/nginx.conf.j2
dest: /etc/nginx/sites-available/{{ app_name }}
owner: root
group: root
mode: '0644'
notify:
- Reload nginx
- name: Enable site in Nginx
file:
src: /etc/nginx/sites-available/{{ app_name }}
dest: /etc/nginx/sites-enabled/{{ app_name }}
state: link
notify:
- Reload nginx
handlers:
- name: Reload nginx
systemd:
name: nginx
state: reloaded
Ключевые принципы в моих плейбуках:
- Идемпотентность: Задачи написаны так, чтобы их можно было запускать многократно без побочных эффектов.
- Структурирование: Использую роли (roles) для организации кода (например,
roles/nginx,roles/postgres). - Безопасность: Храню секреты в Ansible Vault и никогда не коммичу их в открытом виде.
- Тестирование: Проверяю плейбуки с помощью
ansible-lintи тестовых стендов перед запуском на production-хостах. - Динамический инвентарь: Часто интегрирую с облачными провайдерами (AWS EC2, GCP) для автоматического получения списка хостов.