Ответ
Работаю с Ansible около 4 лет для автоматизации инфраструктуры. Основной стек: управление конфигурацией Linux-серверов, развертывание приложений и оркестрация в гибридных средах (on-prem + cloud).
Ключевые практики в моей работе:
-
Структура проектов по ролям:
ansible-project/ ├── inventories/ │ ├── production/ │ └── staging/ ├── roles/ │ ├── nginx/ │ │ ├── tasks/main.yml │ │ ├── templates/nginx.conf.j2 │ │ └── defaults/main.yml │ └── postgresql/ ├── playbooks/ │ ├── deploy-app.yml │ └── infrastructure.yml └── ansible.cfg -
Пример плейбука развертывания с обработкой ошибок:
- name: Deploy application stack hosts: app_servers become: yes vars: app_version: "{{ lookup('env', 'APP_VERSION') }}" tasks: - name: Ensure Docker is installed apt: name: docker-ce state: present register: docker_install until: docker_install is succeeded retries: 3 delay: 10 - name: Pull application image docker_image: name: "{{ docker_registry }}/app:{{ app_version }}" source: pull when: app_version is defined - name: Start container docker_container: name: myapp image: "{{ docker_registry }}/app:{{ app_version }}" state: started ports: - "8080:8080" env: DB_HOST: "{{ db_host }}" notify: Wait for app health handlers: - name: Wait for app health uri: url: "http://localhost:8080/health" status_code: 200 register: health_check until: health_check.status == 200 retries: 10 delay: 5 -
Использую динамические инвентари:
- AWS EC2 через
amazon.aws.aws_ec2 - Kubernetes через
kubernetes.core.k8s_info - Кастомные инвентари на Python для legacy-систем
- AWS EC2 через
-
Интеграция в CI/CD:
- Запуск плейбуков из GitLab CI/Jenkins с передачей секретов через HashiCorp Vault (
ansible-vault) - Тестирование ролей с Molecule и Testinfra в Docker-контейнерах
- Валидация синтаксиса и best practices через ansible-lint
- Запуск плейбуков из GitLab CI/Jenkins с передачей секретов через HashiCorp Vault (
Сложные задачи, которые решал:
- Миграция 200+ серверов с CentOS 7 на AlmaLinux 8 с нулевым downtime
- Реализация blue-green деплоя через Ansible + HAProxy
- Создание самоисцеляющейся инфраструктуры с автоматическим реагированием на инциденты