Назад к вопросам
Middle
67
questionbank

Как вы организовали хранение плейбуков и ролей в вашем проекте?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

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

Структура репозитория:

.
├── roles/             // Директория для ролей
│   ├── common/
│   │   ├── tasks/
│   │   ├── handlers/
│   │   └── files/
│   └── webserver/
│       ├── tasks/
│       └── templates/
└── playbooks/         // Директория для плейбуков
    ├── site.yml       // Основные плейбуки
    ├── web-servers.yml
    ├── db-servers.yml
    └── inventory/     // Инвентори
        ├── hosts.ini
        └── group_vars/
            ├── all.yml
            └── webservers.yml
  • roles/: Каждая поддиректория внутри roles/ представляет собой отдельную роль. Роли содержат задачи, обработчики, шаблоны и файлы, необходимые для настройки конкретного компонента или сервиса.
  • playbooks/: Содержит файлы плейбуков (.yml). Эти плейбуки описывают последовательность выполнения ролей и задач для достижения определенного состояния инфраструктуры.
  • inventory/: Хранит информацию об инвентори серверов, на которых выполняются плейбуки.
    • hosts.ini: Список хостов.
    • group_vars/: Переменные, специфичные для групп хостов.

Версионирование осуществлялось с помощью Git. Для управления зависимостями ролей использовался requirements.yml и ansible-galaxy collection install для установки коллекций. Различные окружения (dev, stage, prod) управлялись с помощью отдельных инвентори-файлов или динамического инвентори.

Пример requirements.yml:

# collections
collections:
  - name: community.general

# roles
roles:
  - src: git@github.com:username/ansible-role-nginx.git
    version: "1.0.0"
    name: nginx