Ответ
В моей практике я использую несколько подходов в зависимости от масштаба и требований к переиспользованию кода.
Основные способы:
-
Внутри репозитория Playbook (папка
roles/)- Когда использовать: Для небольших, специфичных проектов, где роли вряд ли будут использоваться где-то ещё. Это самый простой путь.
- Структура: Роль создаётся командой
ansible-galaxy init my_roleпрямо в каталогеroles/вашего плейбука.
-
Отдельный Git-репозиторий на роль (рекомендуемый для переиспользования)
- Когда использовать: Для стандартизированных ролей (например, настройка nginx, развёртывание Java-приложения), которые используются в нескольких проектах.
- Преимущества: Версионность, централизованное управление, лёгкое обновление.
- Подключение: Указываю роль в файле
requirements.ymlи устанавливаю черезansible-galaxy.
Пример requirements.yml для подключения роли из Git:
roles:
- name: nginx-role
src: https://github.com/my-org/ansible-role-nginx.git
scm: git
version: "v2.1.0" # Фиксация на конкретном теге/коммите
Установка: ansible-galaxy install -r requirements.yml -p ./roles
- Публикация в Ansible Galaxy или приватный реестр (Artifactory)
- Когда использовать: Для командной работы в большой организации или публикации open-source ролей.
- Процесс: Упаковываю роль (
ansible-galaxy role build), публикую, а затем подключаю по имени вrequirements.yml.
Ключевая практика: Для любой серьёзной инфраструктуры я всегда храню роли в отдельных Git-репозиториях. Это позволяет применять к ним CI/CD (например, линтер ansible-lint и тесты molecule), что значительно повышает качество и надёжность конфигураций.