Какой у вас опыт работы с Ansible?

«Какой у вас опыт работы с Ansible?» — вопрос из категории Ansible, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Работаю с Ansible около 4 лет для автоматизации инфраструктуры. Основной стек: управление конфигурацией Linux-серверов, развертывание приложений и оркестрация в гибридных средах (on-prem + cloud).

Ключевые практики в моей работе:

  1. Структура проектов по ролям:

    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
  2. Пример плейбука развертывания с обработкой ошибок:

    - 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
  3. Использую динамические инвентари:

    • AWS EC2 через amazon.aws.aws_ec2
    • Kubernetes через kubernetes.core.k8s_info
    • Кастомные инвентари на Python для legacy-систем
  4. Интеграция в CI/CD:

    • Запуск плейбуков из GitLab CI/Jenkins с передачей секретов через HashiCorp Vault (ansible-vault)
    • Тестирование ролей с Molecule и Testinfra в Docker-контейнерах
    • Валидация синтаксиса и best practices через ansible-lint

Сложные задачи, которые решал:

  • Миграция 200+ серверов с CentOS 7 на AlmaLinux 8 с нулевым downtime
  • Реализация blue-green деплоя через Ansible + HAProxy
  • Создание самоисцеляющейся инфраструктуры с автоматическим реагированием на инциденты