Ответ
Нет, это считается плохой практикой. Роли в Ansible должны быть атомарными и переиспользуемыми, каждая — для решения одной конкретной задачи. Создание монолитной роли для всего фронтенда нарушает принцип модульности и усложняет поддержку.
Правильный подход — декомпозиция:
- Роль
nginx: Установка и базовая конфигурация веб-сервера. - Роль
frontend-deploy: Выкатка собранных статических файлов (например, из артефакта CI/CD). - Роль
ssl-config: Настройка TLS/SSL сертификатов (например, через Let's Encrypt). - Роль
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
Такой подход позволяет гибко комбинировать роли для разных окружений и проектов, а также независимо тестировать каждую часть инфраструктуры.