Работал ли с Ansible

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

Ответ

Да, активно использовал Ansible для управления конфигурацией и автоматизации рутинных задач. Основное применение — бутстраппинг серверов (базовая настройка, установка агентов мониторинга, настройка безопасности) и конфигурация middleware (Nginx, PostgreSQL, Redis) в средах, где не использовался Docker/Kubernetes.

Мой опыт и подход:

  • Структура проектов: Организовывал плейбуки по ролям (roles), выносил переменные в group_vars/ и host_vars/, использовал динамический инвентарь, например, для AWS через плагин amazon.aws.aws_ec2.
  • Безопасность: Работал с Ansible Vault для шифрования паролей, ключей и других секретов прямо в репозитории.
  • Идемпотентность: Писал задачи с учетом идемпотентности, используя модули stat, register и when для проверки состояния перед изменением.
  • Интеграция: Запускал плейбуки из CI/CD (GitLab CI) для автоматического применения конфигурации при изменении кода.

Пример роли для настройки базового hardening сервера:

# roles/base_hardening/tasks/main.yml
- name: Update apt cache
  apt:
    update_cache: yes
    cache_valid_time: 3600

- name: Install essential security packages
  apt:
    name:
      - fail2ban
      - unattended-upgrades
    state: present

- name: Configure SSH hardening
  lineinfile:
    path: /etc/ssh/sshd_config
    regexp: "{{ item.regexp }}"
    line: "{{ item.line }}"
  with_items:
    - { regexp: '^#?PasswordAuthentication', line: 'PasswordAuthentication no' }
    - { regexp: '^#?PermitRootLogin', line: 'PermitRootLogin prohibit-password' }
  notify: restart sshd

- name: Ensure UFW is enabled with default deny policy
  ufw:
    state: enabled
    policy: deny
    direction: incoming

# roles/base_hardening/handlers/main.yml
- name: restart sshd
  service:
    name: sshd
    state: restarted

В современных стеках с контейнерами и Kubernetes роль Ansible сместилась для меня больше на начальную настройку host-систем (например, нод K8s) и управление сетевым оборудованием, где агентный подход не требуется.