Мне нужна помощь с развертыванием системы, над которой я работаю уже полтора года. Чтобы вы могли понять мою озабоченность, я немного расскажу о нашей инфраструктуре.
У нас есть сервер (назовем его TESTING_SERVER), где у нас есть разные среды тестирования для нашей системы. Каждая из этих сред полностью работает с докером. Каждый экземпляр тестовой среды состоит из: 1. Контейнера Docker с nginx в качестве прокси 2. Контейнера Docker с веб-сайтом Django 3. Контейнера Docker с mysql
Каждый раз, когда нам нужно создать новую среду для целей тестирования (например, QA хочет протестировать новую функцию), мы используем доступный playbook, который запускает эти задачи на TESTING_SERVER:
В нашей производственной среде у нас есть простой сервер ubuntu (PRODUCTION_SERVER), на котором запущены mysql, django и nginx. Каждый раз, когда нам нужно выполнить развертывание в производственной среде, мы запускаем доступный playbook, который (почти) повторяет шаги, перечисленные выше:
Эти два сценария разные, хотя у них много общего. Я думал преобразовать каждый шаг в доступную задачу и использовать условное выражение, чтобы знать, какие задачи (dockerized или прямые) следует запускать. Но у меня по-прежнему будут разные задачи для каждого шага (та же инструкция, но кажется немного сложной).
Мой вопрос: есть ли способ «объединить» эти пьесы, чтобы получить только одну, не повторяя себя?
Я бы создал роль для каждой «задачи» и использовал ее в учебнике, как описано в документе с лучшими практиками.
http://docs.ansible.com/ansible/latest/playbooks_best_practices.html#directory-layout
например
roles/
create_a_docker_network/
tasks/
main.yml
create_database_container/...
...
Create_nginx_container/
и в пьесе назовите роли
testing.yml
- hosts: testserver
roles:
- create_a_docker_network
- create_database_container
- ...