Правильно ли создать Ansible Role, которая будет настраивать весь фронтенд?

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

Ответ

Нет, это считается плохой практикой. Роли в Ansible должны быть атомарными и переиспользуемыми, каждая — для решения одной конкретной задачи. Создание монолитной роли для всего фронтенда нарушает принцип модульности и усложняет поддержку.

Правильный подход — декомпозиция:

  1. Роль nginx: Установка и базовая конфигурация веб-сервера.
  2. Роль frontend-deploy: Выкатка собранных статических файлов (например, из артефакта CI/CD).
  3. Роль ssl-config: Настройка TLS/SSL сертификатов (например, через Let's Encrypt).
  4. Роль nodejs: Установка Node.js, если требуется сборка на сервере.

Пример структуры playbook:

- hosts: frontend_servers
  roles:
    - role: nginx
      vars:
        nginx_template: frontend.conf.j2
    - role: frontend-deploy
      vars:
        build_source: "{{ ci_artifact_url }}"
        deploy_path: /var/www/app

Такой подход позволяет гибко комбинировать роли для разных окружений и проектов, а также независимо тестировать каждую часть инфраструктуры.