Анзибль сценарии против ролей
согласно Ansible docs, a Playbook
это:
...основа для действительно простого управления конфигурацией и многомашинной системы развертывания, в отличие от любой, которая уже существует, и которая очень хорошо подходит для развертывания сложных приложений.
и, опять же, согласно тем же документам, a роли
являются:
...способы автоматической загрузки некоторые vars_files, задачи и обработчики, основанные на известной файловой структуре. Группировка контента по ролям также позволяет легко обмениваться ролями с другими пользователями.
однако различие между этими и их различными случаями использования не сразу очевидно для меня. Например, если я настрою свой /etc/ansible/hosts файл выглядит так:
[databases]
mydb01.example.org
mydb02.example.org
[mail_servers]
mymail01.example.org
mymail_dr.example.org
...тогда что же это"[databases]" запись...а роль? Или название файла PlayBook YAML где-то? Или что-то еще?!?
если бы кто-то мог объяснить мне различия на них, мое понимание Ansible было бы значительно улучшено!
- Playbook vs Role vs
[databases]и аналогичные записи в/etc/ansible/hosts
- если Playbooks определены внутри файлов YAML, то где определяются роли?
- помимо
ansible.cfgживя на сервере Ansible, как мне добавить / настроить Ansible с доступными книгами воспроизведения / ролями? Например, когда я бегуansible-playbook someplaybook.yaml, как знает ли Ансибл, где найти эту книгу?
4 ответов:
Playbook vs Role vs [databases] и аналогичные записи в /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 существует, обработчики, перечисленные в нем, будут добавлены в игру
- если роли / 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 внутри .
это ваша ответственность, чтобы поставить свой проект со всеми учебниками и ролями на сервере. Ансибл не имеет к этому никакого отношения.
Playbook vs Role vs [databases] и аналогичные записи в /etc/ansible / hosts
роли-это способ группировать задачи вместе в один контейнер. У вас может быть роль для настройки MySQL, другая для настройки Postfix и т. д.
playbook определяет что происходит здесь. Это место, где вы определяете хосты (группы хостов, см. ниже) и роли, которые будут применяться к ним принимать гостей.
[databases]и другие элементы в вашем инвентаре hostgroups. Группы хостов определяют набор хостов, на которых будет выполняться воспроизведение.пьеса-это набор задач или ролей (или и то, и другое) внутри playbook. В большинстве случаев (и примеров) playbook будет содержать только одну игру. Но вы можете иметь столько, сколько вам нравится. Это означает, что у вас может быть playbook, который будет запускать роль
postfixв группе хостовmail_serversрольmysqlв группе хостовdatabases:- hosts: mail_servers roles: - postfix - hosts: databases roles: - mysqlесли Playbooks определены внутри файлов YAML, то где определяются роли?
в Ansible почти все определено в YAML, что учитывает роли и книги пьес.
кроме ансибля.cfg, живущий на сервере Ansible, как добавить / настроить Ansible с доступными книгами воспроизведения / ролями? Например, когда я запускаю ansible-playbook someplaybook.ямл, как Ansible знает, где найти этот сборник пьес?
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ВарсroleВарс и т. д., Эти места влияют на приоритет (если переменная с одинаковым именем переопределяется в разных местах, существуют очень конкретные правила того, каким будет значение переменной во времяansible/ansible-playbookисполнениеtarget data- это инвентарь (а также можно определить инвентарь / группу хостов переменные внутри инвентаря!)config changes- ansible имеет 4 уровня абстракции для него:
- задач - одно действие
- список задач - список действий
- роль-список действий (или список списков), сгруппированных по одному и тому же "субъекту", обычно все цели работают на одном хосте/группе хостов
- playbook-список пьес, каждая из которых работает, возможно, в разных группах хостов, применяя несколько
roles/tasks / tasklists (и специальные такие задачи, какhandlers)из аспекта "программное обеспечение" - роль должна быть достаточно общей, чтобы быть повторно.
также в некоторых (довольно больших) организациях "роли" поставляются группой A, в то время как используются в книгах игр, поддерживаемых группой B.
резюме
все вышесказанное позволяет группировать подобные конфигурации-в
role. группировка связанных подсистем / компонентов в однуplaybook. Кроме того, стоит упомянуть, 1 ЯМЛ пункт в playbook (в том числеhosts:и илиtasks,pre_tasks,post_tasks,roles) называется aplayтеперь на ваш вопрос:
Да, сначала это сбивает с толку.
вы обычно подключаете свой
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
Comments