Есть некая инфраструктура, управляемая через 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, и не знаю, где положить переменные и что написать в плейбуке, чтобы не получилась нечитаемая лапша.
Возможно, нужно создать общий плейбук и по одному плейбуку на каждый сайт?