Анзибль сценарии против ролей



согласно 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, как знает ли Ансибл, где найти эту книгу?

749   4  

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

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

мое мнение таково:

любая система управления конфигурацией / развертывания имеет:

  1. source data - данные, используемые для создания конфигурации целевого хоста
  2. target data - данные, используемые для определения целевых хостов
  3. config changes - список / набор правил / действий, которые мы применяем с source data над целевым хостом на основе target data

в терминах Ансибля:

  1. source data - Это различные места, где мы можем поместить данные -group_vars,playbook Варс role Варс и т. д., Эти места влияют на приоритет (если переменная с одинаковым именем переопределяется в разных местах, существуют очень конкретные правила того, каким будет значение переменной во время ansible/ansible-playbook исполнение
  2. target data - это инвентарь (а также можно определить инвентарь / группу хостов переменные внутри инвентаря!)
  3. config changes - ansible имеет 4 уровня абстракции для него:
    1. задач - одно действие
    2. список задач - список действий
    3. роль-список действий (или список списков), сгруппированных по одному и тому же "субъекту", обычно все цели работают на одном хосте/группе хостов
    4. playbook-список пьес, каждая из которых работает, возможно, в разных группах хостов, применяя несколько roles/tasks / tasklists (и специальные такие задачи, как handlers)

из аспекта "программное обеспечение" - роль должна быть достаточно общей, чтобы быть повторно.

также в некоторых (довольно больших) организациях "роли" поставляются группой A, в то время как используются в книгах игр, поддерживаемых группой B.

резюме

все вышесказанное позволяет группировать подобные конфигурации-в role. группировка связанных подсистем / компонентов в одну playbook. Кроме того, стоит упомянуть, 1 ЯМЛ пункт в playbook (в том числе hosts: и или tasks,pre_tasks,post_tasks,roles) называется a 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

Comments

    Ничего не найдено.