Писал ли Ansible playbook’и?

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

Ответ

Да, активно использую 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) для автоматического получения списка хостов.