Как хранить Ansible Role?

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

Ответ

В моей практике я использую несколько подходов в зависимости от масштаба и требований к переиспользованию кода.

Основные способы:

  1. Внутри репозитория Playbook (папка roles/)

    • Когда использовать: Для небольших, специфичных проектов, где роли вряд ли будут использоваться где-то ещё. Это самый простой путь.
    • Структура: Роль создаётся командой ansible-galaxy init my_role прямо в каталоге roles/ вашего плейбука.
  2. Отдельный 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

  1. Публикация в Ansible Galaxy или приватный реестр (Artifactory)
    • Когда использовать: Для командной работы в большой организации или публикации open-source ролей.
    • Процесс: Упаковываю роль (ansible-galaxy role build), публикую, а затем подключаю по имени в requirements.yml.

Ключевая практика: Для любой серьёзной инфраструктуры я всегда храню роли в отдельных Git-репозиториях. Это позволяет применять к ним CI/CD (например, линтер ansible-lint и тесты molecule), что значительно повышает качество и надёжность конфигураций.