Ansible Playbooks vs роли
согласно Ansible docs, a Playbook есть:
...основа для действительно простого управления конфигурацией и многомашинной системы развертывания, в отличие от любой, которая уже существует, и которая очень хорошо подходит для развертывания сложных приложений.
и, опять же, согласно тем же документам, a роли являются:
...способы автоматической загрузки определенные vars_files, задачи и обработчики на основе известной файловой структуры. Группировка контента по ролям также позволяет легко обмениваться ролями с другими пользователями.
однако различие между этими и их различными вариантами использования не сразу очевидно для меня. Например, если я настрою свой чтобы выглядеть как:
[databases]
mydb01.example.org
mydb02.example.org
[mail_servers]
mymail01.example.org
mymail_dr.example.org
...тогда что это "[databases]
" запись...а роль? Или имя файла YAML playbook где-то? Или что-то еще?!?
если бы кто-то мог объяснить мне различия на них, мое понимание Ansible было бы значительно улучшить!
- Playbook vs роль vs
[databases]
и аналогичные записи в/etc/ansible/hosts
- если Playbooks определены внутри файлов YAML, то где определены роли?
- помимо
ansible.cfg
живя на сервере Ansible, как добавить / настроить Ansible с доступными книгами/ролями? Например, когда я бегуansible-playbook someplaybook.yaml
, как Анзибль знает, где найти эту книгу?
4 ответов
Playbook vs Role vs [базы данных] и аналогичные записи в /etc/ansible/hosts
[databases]
- Это одно имя для группы хостов. Это позволяет ссылаться на несколько хостов по одному имени.
роль-это набор задач и дополнительных файлов для настройки хоста для обслуживания определенного роль.
Playbook-это сопоставление между хостами и ролями.
пример документация описывает пример проекта. Он содержит две вещи:
- Playbooks.
site.yml
,webservers.yml
,fooservers.yml
являются playbooks. - ролях:
roles/common/
иroles/webservers/
определенияcommon
иwebservers
соответственно роли.
внутри playbook (webservers.yml
) у вас есть что-то вроде:
---
- hosts: webservers <- this group of hosts defined in /etc/ansible/hosts, databases and mail_servers in example from your question
roles: <- this is list of roles to assign to these hosts
- common
- webservers
если Playbooks определены внутри файлов YAML, то где определены роли?
они определены внутри roles/*
справочники. Роли определяются в основном с помощью файлов YAML, но также могут содержать ресурсы любых типов (files/
, templates/
). Согласно документация определение роли структурировано следующим образом:
- если роли / x / задачи / main.yml существует, перечисленные в нем задачи будут добавлены в игру
- если роли / x / обработчики / main.yml существует, обработчики, перечисленные в нем, будут добавлены в play
- Если роли / x/vars / main.в формате YML существует, перечисленные в нем переменные будут добавлены в игру
- Если роли / x/meta / main.yml существует, любые зависимости ролей, перечисленные в нем, будут добавлены в список ролей (1.3 и более поздних версий)
- любые задачи копирования могут ссылаться на файлы в ролях / x / files / без необходимости их относительного или абсолютного пути
- любые задачи скриптов могут ссылаться на Скрипты В ролях / x / files / без необходимости их относительного или абсолютного пути
- любые задачи шаблон ссылочные файлы в ролях / x / templates / без необходимости их относительного или абсолютного пути
- любые задачи include могут ссылаться на файлы в ролях / x/ tasks / без необходимости их относительного или абсолютного пути
самый важный файл roles/x/tasks/main.yml
, здесь вы определяете задачи, которые будут выполняться при выполнении роли.
кроме ансибля.cfg, живущий на сервере Ansible, как добавить / настроить Ansible с доступные сценарии/ролей? Например, когда я запускаю ansible-playbook someplaybook.ямл, откуда Ансибл знает, где найти эту книгу?
$ ansible-playbook someplaybook.yaml
будет искать playbook внутри текущего каталога.
$ ansible-playbook somedir/somedir/someplaybook.yaml
будет искать playbook внутри .
это ваша ответственность, чтобы поставить свой проект со всеми playbooks и ролей на сервере. Анзибль тут ни при чем.
Playbook vs Role vs [базы данных] и аналогичные записи в /etc/ansible/hosts
роли-это способ сгруппировать задачи в один контейнер. У вас может быть роль для настройки MySQL, другая для настройки Postfix и т. д.
playbook определяет что происходит здесь. Это место, где вы определяете хосты (группы хостов, см. ниже) и роли, которые будут применяться к тем принимать гостей.
[databases]
и другие записи в вашем инвентаре являются hostgroups. Hostgroups определяют набор хостов, на которых будет выполняться игра.
пьеса представляет собой набор задач или ролей (или обоих) внутри playbook. В большинстве случаев (и примеров) playbook будет содержать только одну игру. Но ты можешь взять столько, сколько захочешь. Это означает, что у вас может быть playbook, который будет запускать роль postfix
на hostgroup mail_servers
роль mysql
о группе узлов databases
:
- hosts: mail_servers
roles:
- postfix
- hosts: databases
roles:
- mysql
если Playbooks определены внутри файлов YAML, то где определены роли?
в Ansible почти все определено в YAML, что имеет значение для ролей и playbooks.
кроме ансибля.cfg, живущий на сервере Ansible, как добавить / настроить Ansible с доступными книгами/ролями? Например, когда я запускаю ansible-playbook someplaybook.yaml, как Ansible знает, где найти что PlayBook?
AFAIK вы должны указать путь к playbook при вызове ansible-playbook
. Так что ansible-playbook someplaybook.yaml
ожидал someplaybook.yaml
чтобы быть в текущем каталоге. Но вы можете предоставить полный путь:ansible-playbook /path/to/someplaybook.yaml
это терминологический / семантический вопрос. Это может быть субъективным, даже если есть базовое определение.
мой взгляд таков:
любая система управления конфигурацией / развертывания имеет:
-
source data
- данные, используемые для создания конфигурации целевого хоста -
target data
- данные, используемые для определения целевых хостов -
config changes
- список / набор правил / действий, которые мы применяем сsource data
за целевого узлаtarget data
в Анзибль условия:
-
source data
- Это различные места, где мы можем поместить данные -group_vars
,playbook
vars,role
vars, etc., Эти места влияют на приоритет (если переменная с тем же именем переопределяется в разных местах, существуют очень конкретные правила того, каким будет значение переменной во времяansible
/ansible-playbook
исполнение -
target data
- это инвентарь (и, также можно определить инвентарь / hostgroup переменные внутри инвентаря!) -
config changes
- ansible имеет 4 уровня абстракции для него:- задач - одно действие
- список задач - список действий
- role-список действий (или список списков), сгруппированных по одному и тому же "субъекту", обычно все цели работают на одном хосте/hostgroup
- playbook-список пьес, каждая из которых работает на возможно различных hostgroup, применяя несколько
role
s/task
s / tasklists (и специальные такие задачи, какhandlers
)
из аспекта "программное обеспечение" - роль должна быть достаточно общей, чтобы быть повторно.
также в некоторых (довольно больших) организациях "роли" поставляются группой A, в то время как используются в playbooks, поддерживаемых группой B.
резюме
все вышеизложенное позволяет группировать аналогичные конфигурации-в role
.
группировка связанных подсистем / компонентов в одну playbook
.
Кроме того, стоит упомянуть, 1 элемент YAML в playbook (включая hosts:
и или tasks
, pre_tasks
, post_tasks
, roles
) называется play
теперь для вашего вопроса:
Да, сначала это сбивает с толку.
вы обычно подключаете свой source data
к семантике вашей роли, поэтому, когда вы видите эту роль setup_db
применяется в игре на связанную хост-группу (например,db_hosts
)
Но play
может выполняться объединение нескольких хост-групп.
Это просто вопрос Конвенции против гибкость.
П. С.
пожалуйста, напишите мне, добавило ли это к путанице или прояснилось. Спасибо.
также имейте в виду, что playbook может вызывать несколько ролей, если используется мета-файл, предназначенный для влияния на разные роли.
пример Playbook: dual_role-playbook.в формате YML
- name: Some Action for two roles
hosts: localhost
vars_files:
- roles/dual_role/meta/main.yml
roles:
- dual_role/container-1
- dual_role/container-2
схема папок и файлов ролей будет выглядеть следующим образом:
dual_role-playbook.yml
-- roles
-- dual_role
-- meta/main.yml
-- container-1
-- tasks/main.yml
-- templates/template.j2
-- container-2
-- tasks/main.yml
-- templates/template.j2