структура каталогов для более сложных областей сервера

Я только что прочитал несколько лучших практик Ansible, но все они работали только с этапами разработки, тестирования и производства. Для меня это немного сложнее. У меня есть такие сервера:

  • сервер разработки приложений
  • сервер тестирования приложений
  • сервер приложений
  • тестовый сервер джира
  • джира прод сервер
  • солр прод сервер
  • Дженкинс строит раба

И я изо всех сил пытаюсь определить свои запасы. Потому что есть несколько сценариев, которые могут произойти:

  • выполнить playbook на всех серверах приложений (dev + test + prod)
  • выполнить плейбук на всех серверах приложения
  • выполнить плейбук на всех рабочих серверах (приложения + jira + solr)

Так как же в этом случае будет выглядеть макет каталога? И где определить переменные, специфичные для хоста и среды? И как бы я выполнил свои плейбуки (с или без --limit?)


person Munchkin    schedule 31.07.2018    source источник


Ответы (2)


Передовая практика всегда не является лучшей для каждого варианта использования. Для вашего конкретного использования это должно быть так, как описано ниже:

Создавайте несколько инвентаризаций простым способом и классифицируйте их с точки зрения функциональности серверов. Например, создайте отдельные инвентаризации для каждой среды:

application dev server inventory
application test server inventory
application prod server inventory
jira test server inventory
jira prod server inventory
solr prod server inventory
jenkins build slave inventory

в то время как каждый инвентарь будет иметь классическую структуру, например:

введите здесь описание изображения

Когда у вас есть все эти запасы, у вас может быть коллекция простых сценариев оболочки, которые могут составлять несколько сборников сценариев, например сценарий оболочки для серверов приложений:

echo "***********************************"
echo "****INFO:- Performing deployment: on app servers"
echo "***********************************"
ansible-playbook $deploy_component_playbook1 -i $INVENTORY_PATH/application-dev-server/hosts --extra-vars " " # define env varaibles inside " "
ansible-playbook $deploy_component_playbook2 -i $INVENTORY_PATH/application-test-server/hosts --extra-vars " "  # define env varaibles inside " "
ansible-playbook $deploy_component_playbook3 -i $INVENTORY_PATH/application-prod-server/hosts --extra-vars " " # define env varaibles inside " "

Определите эти переменные deploy_component_playbook1, deploy_component_playbook2, deploy_component_playbook3 с соответствующими именами ваших книг воспроизведения с абсолютным/относительным путем.

Переменная INVENTORY_PATH должна быть абсолютным путем к директору инвентаризации, где размещаются все различные инвентари.

Переменные среды могут быть определены, как я упоминал после --extra-vars внутри " ".

Точно так же у вас может быть сценарий оболочки для других комбинаций плейбуков. В конце все, что вам нужно, это запустить нужный сценарий оболочки.

person TechMaster    schedule 31.07.2018
comment
you can have collection of simple shell scripts that can compose multiple playbooks - хм, значит, для моего варианта использования нет встроенного решения? Например. что-то вроде тегирования хостов и выполнения на всех хостах с определенными тегами? - person Munchkin; 31.07.2018
comment
Насколько я знаю, вы можете использовать теги, когда у вас есть длинная книга с множеством разных задач, тогда вы можете использовать теги для выполнения только определенной задачи из книги. Однако, что касается пометки хостов, я никогда не пробовал, а также это зависит от того, как у вас организованы ваши инвентари. С подходом, который я определил выше, кажется сложным иметь теги, потому что playbook нуждается в инвентаризации прямо во время выполнения. Вы также можете проверить этот stackoverflow.com/questions/42643684/ может быть полезен для тегирования хостов. - person TechMaster; 31.07.2018

Наш инвентарь не очень сложен, поэтому мы можем работать с группами и подгруппами, как показано ниже.

[app_prod]
appserverslist.xyz.com
[jira_prod]
jiraserverslist.xyz.com
[application:children]
app_prod
app_stage
app_test
[jira:children]
jira_prod
jira_test
jira_stage
[application:vars]     # variables to all groups
xyz=10
[app_prod:vars]        # variables to individual group
http_port=88
[all:vars]             # variables to all hosts
ansible_ssh_user=xyz

Однако мы широко используем файлы динамической инвентаризации (запрашиваем базу данных и получаем списки хостов).

person Sudhakar MNSR    schedule 01.08.2018