Задать вопрос

Какую структуру выбрать для конфига Ansible с несколькими сайтами на хосте?

Есть некая инфраструктура, управляемая через Ansible. В инфраструктуре есть виртуалки с сайтами на django. На одну виртуалку может приходиться несколько сайтов или только один. Как организовать конфиг Ansible, чтобы максимально упростить добавление нового сайта (в существующую виртуалку или в новую)?

(Сайтом я называю отдельный инстанс Django или еще что-то, что через nginx отдается в виде обособленного web-сайта на своем домене или на нескольких. Каждый сайт — это отдельный server в конфиге nginx)

Я вижу два варианта.

Читерский вариант

Указываем в inventory.ini каждый сайт отдельным хостом:
[real_host_name]
site_name.ru ansible_ssh_host=11.22.33.44
another_site.com ansible_ssh_host=11.22.33.44

И тогда в файлах host_vars/*.yml будут переменные, относящиеся к отдельному сайту, а group_vars/host_name.yml будет отвечать за настройки виртуалки/сервера.

Основной playbook будет выглядеть так:
- hosts: real_host_name
  roles:
    - common
    - nginx
    .... и другие общие задачи — настроить локаль, поставить пакеты, создать пользователей

- hosts: site_name.ru
  roles:
    - nginx_site
    - deploy
    - django
  ... и другие задачи, относящиеся к конкретному сайту — создать директории проектов,
  выкатить код, положить локальные конфиги

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

«Правильный вариант»
Указываем в inventory.ini только один хост, а сайты добавляются в плейбуке, видимо. Но я новичок в настройке Ansible, и не знаю, где положить переменные и что написать в плейбуке, чтобы не получилась нечитаемая лапша.

Возможно, нужно создать общий плейбук и по одному плейбуку на каждый сайт?
  • Вопрос задан
  • 2837 просмотров
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@sevmax
Разбей большой плейбук на ряд маленьких:
real_host_name.yml
site_name_ru.yml
И в них опиши какие роли надо выполнять.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы