Как создать свой инвентарь
Ansible работает с несколькими управляемыми узлами или «хостами» в вашей инфраструктуре одновременно, используя список или группу списков, известных как инвентарь. После определения вашего инвентаря вы используете шаблоны, чтобы выбрать хосты или группы, с которыми Ansible должен взаимодействовать.
По умолчанию расположение инвентаря — это файл, называемый /etc/ansible/hosts. Вы можете указать другой файл инвентаря в командной строке, используя опцию -i <path>. Вы также можете использовать несколько файлов инвентаря одновременно и/или получать инвентарь из динамических или облачных источников или разных форматов (YAML, ini и так далее), как описано в работе с динамическим инвентарем. Введенные в версию 2.4, Ansible имеют плагины инвентаря для повышения гибкости и настраиваемости.
- Добавление переменных в инвентарь
- Организация переменных хоста и группы
- Как объединяются переменные
- Использование нескольких источников инвентаря
Основные принципы инвентаря: форматы, хосты и группы
Файл инвентаря может быть в одном из многих форматов в зависимости от используемых плагинов инвентаря. Наиболее распространённые форматы — INI и YAML. Базовый файл INI /etc/ansible/hosts может выглядеть следующим образом:
mail.example.com [webservers] foo.example.com bar.example.com [dbservers] one.example.com two.example.com three.example.com
Заголовки в квадратных скобках — это имена групп, которые используются для классификации хостов и определения, какие хосты вы контролируете в определённые моменты и с какой целью. Имена групп должны соответствовать тем же правилам, что и создание допустимых имён переменных.
Вот тот же базовый файл инвентаря в формате YAML:
all:
hosts:
mail.example.com:
children:
webservers:
hosts:
foo.example.com:
bar.example.com:
dbservers:
hosts:
one.example.com:
two.example.com:
three.example.com:
Группы по умолчанию
Существует две группы по умолчанию: all и ungrouped. Группа all содержит каждый хост. Группа ungrouped содержит все хосты, не принадлежащие другим группам помимо all. Каждый хост всегда будет принадлежать как минимум двум группам (all и ungrouped или all и какой-либо другой группе). Хотя all и ungrouped всегда присутствуют, они могут быть неявными и не отображаться в списках групп, как group_names.
Хосты в нескольких группах
Вы можете (и, вероятно, будете) размещать каждый хост в нескольких группах. Например, веб-сервер производства в дата-центре в Атланте может быть включён в группы [prod], [atlanta] и [webservers]. Вы можете создавать группы, которые отслеживают:
- Что — Приложение, стек или микросервис (например, серверы баз данных, веб-серверы и так далее).
- Где — Дата-центр или регион, для работы с локальным DNS, хранилищем и так далее (например, восток, запад).
- Когда — Этап разработки, чтобы избежать тестирования на производственных ресурсах (например, prod, test).
Расширение предыдущего файла инвентаря YAML для включения чего, когда и где будет выглядеть следующим образом:
all:
hosts:
mail.example.com:
children:
webservers:
hosts:
foo.example.com:
bar.example.com:
dbservers:
hosts:
one.example.com:
two.example.com:
three.example.com:
east:
hosts:
foo.example.com:
one.example.com:
two.example.com:
west:
hosts:
bar.example.com:
three.example.com:
prod:
hosts:
foo.example.com:
one.example.com:
two.example.com:
test:
hosts:
bar.example.com:
three.example.com:
Вы можете видеть, что one.example.com существует в группах dbservers, east и prod.
Вы также можете использовать вложенные группы, чтобы упростить prod и test в этом инвентаре, для того же результата:
all:
hosts:
mail.example.com:
children:
webservers:
hosts:
foo.example.com:
bar.example.com:
dbservers:
hosts:
one.example.com:
two.example.com:
three.example.com:
east:
hosts:
foo.example.com:
one.example.com:
two.example.com:
west:
hosts:
bar.example.com:
three.example.com:
prod:
children:
east:
test:
children:
west:
Дополнительные примеры организации инвентарей и группировки хостов см. в разделе Примеры настройки инвентаря.
Добавление диапазонов хостов
Если у вас много хостов с похожим шаблоном, вы можете добавить их в виде диапазона вместо отдельного перечисления каждого имени хоста:
В формате INI:
[webservers] www[01:50].example.com
В формате YAML:
...
webservers:
hosts:
www[01:50].example.com:
Вы можете указать шаг (приращения между номерами последовательности) при определении числового диапазона хостов:
В формате INI:
[webservers] www[01:50:2].example.com
В формате YAML:
...
webservers:
hosts:
www[01:50:2].example.com:
Для числовых шаблонов можно включать или исключать ведущие нули по желанию. Диапазоны включают крайние значения. Вы также можете определить алфавитные диапазоны:
[databases] db-[a:f].example.com
Добавление переменных в инвентарь
Вы можете хранить значения переменных, относящихся к конкретному хосту или группе в инвентаре. Начать можно с добавления переменных непосредственно к хостам и группам в вашем основном файле инвентаря. Однако по мере добавления всё большего количества управляемых узлов в ваш Ansible-инвентарь, вы, скорее всего, захотите хранить переменные в отдельных файлах переменных хостов и групп. Подробности см. в определении переменных в инвентаре.
Назначение переменной одному устройству: переменные хоста
Вы можете легко назначить переменную одному хосту, а затем использовать её в будущих задачах. В формате INI:
[atlanta] host1 http_port=80 maxRequestsPerChild=808 host2 http_port=303 maxRequestsPerChild=909
В формате YAML:
atlanta:
hosts:
host1:
http_port: 80
maxRequestsPerChild: 808
host2:
http_port: 303
maxRequestsPerChild: 909
Уникальные значения, такие как нестандартные порты SSH, хорошо подходят в качестве переменных хоста. Вы можете добавить их в ваш Ansible-инвентарь, добавив номер порта после имени хоста с двоеточием:
badwolf.example.com:5309
Переменные подключения также хорошо подходят в качестве переменных хоста:
[targets] localhost ansible_connection=local other1.example.com ansible_connection=ssh ansible_user=myuser other2.example.com ansible_connection=ssh ansible_user=myotheruser
Примечание
Если вы перечисляете нестандартные порты SSH в файле конфигурации SSH, подключение openssh найдёт и воспользуется ими, но подключение paramiko — нет.
Псевдонимы инвентаря
Вы также можете определить псевдонимы в своём инвентаре:
В формате INI:
jumper ansible_port=5555 ansible_host=192.0.2.50
В формате YAML:
...
hosts:
jumper:
ansible_port: 5555
ansible_host: 192.0.2.50
В приведённом выше примере при работе Ansible с псевдонимом хоста «jumper» произойдёт подключение к 192.0.2.50 на порту 5555. См. параметры поведения инвентаря, чтобы дополнительно настроить подключение к хостам.
Примечание
Значения, переданные в формате INI с помощью синтаксиса key=value, интерпретируются по-разному в зависимости от места их объявления:
- При объявлении вместе с хостом значения INI интерпретируются как структуры Python-литералов (строки, числа, кортежи, списки, словари, булевы значения, None). Строки хостов принимают несколько параметров
key=valueв одной строке. Поэтому требуется способ указать, что пробел является частью значения, а не разделителем. - При объявлении в разделе
:vars, значения INI интерпретируются как строки. Например,var=FALSEсоздаст строку, равную «FALSE». В отличие от строк хостов, разделы:varsпринимают только одно значение в строке, поэтому всё после=должно быть значением для записи. - Если значение переменной, заданной в инвентаре INI, должно быть определённого типа (например, строка или булево значение), всегда указывайте тип с фильтром в вашей задаче. Не полагайтесь на типы, заданные в инвентарях INI, при использовании переменных.
- Рассмотрите использование формата YAML для источников инвентаря, чтобы избежать путаницы с фактическим типом переменной. Плагин инвентаря YAML обрабатывает значения переменных последовательно и правильно.
В общем случае это не лучший способ определения переменных, которые описывают вашу системную политику. Установка переменных в основном файле инвентаря — это просто сокращение. См. Организация переменных хоста и группы для рекомендаций по хранению значений переменных в отдельных файлах в каталоге «host_vars».
Назначение переменной многим устройствам: переменные группы
Если все хосты в группе имеют одинаковое значение переменной, вы можете применить эту переменную ко всей группе сразу. В формате INI:
[atlanta] host1 host2 [atlanta:vars] ntp_server=ntp.atlanta.example.com proxy=proxy.atlanta.example.com
В формате YAML:
atlanta:
hosts:
host1:
host2:
vars:
ntp_server: ntp.atlanta.example.com
proxy: proxy.atlanta.example.com
Переменные группы — удобный способ применения переменных ко многим хостам одновременно. Однако перед выполнением Ansible всегда сглаживает переменные, включая переменные инвентаря, на уровне хоста. Если хост является членом нескольких групп, Ansible читает значения переменных из всех этих групп. Если вы назначаете разные значения одной и той же переменной в разных группах, Ansible выбирает, какое значение использовать, в соответствии с внутренними правилами объединения.
Наследование значений переменных: переменные группы для групп групп
Можно создавать группы групп, используя суффикс :children в INI или запись children: в YAML. Вы можете применять переменные к этим группам групп, используя :vars или vars::
В INI:
[atlanta] host1 host2 [raleigh] host2 host3 [southeast:children] atlanta raleigh [southeast:vars] some_server=foo.southeast.example.com halon_system_timeout=30 self_destruct_countdown=60 escape_pods=2 [usa:children] southeast northeast southwest northwest
В YAML:
all:
children:
usa:
children:
southeast:
children:
atlanta:
hosts:
host1:
host2:
raleigh:
hosts:
host2:
host3:
vars:
some_server: foo.southeast.example.com
halon_system_timeout: 30
self_destruct_countdown: 60
escape_pods: 2
northeast:
northwest:
southwest:
Если вам нужно хранить списки или данные хешей или вы предпочитаете хранить переменные, специфичные для хоста и группы, отдельно от файла инвентаризации, см. Организация переменных хоста и группы.
Дочерние группы имеют несколько свойств, которые следует отметить:
- Любой хост, являющийся членом дочерней группы, автоматически является членом родительской группы.
- Переменные дочерней группы будут иметь более высокий приоритет (переопределение) переменных родительской группы.
- Группы могут иметь несколько родителей и детей, но не циклические отношения.
- Хосты также могут входить в несколько групп, но будет только один экземпляр хоста, объединяющий данные из нескольких групп.
Организация переменных хоста и группы
Хотя вы можете хранить переменные в основном файле инвентаризации, хранение отдельных файлов переменных хоста и группы может помочь вам организовать значения переменных более эффективно. Файлы переменных хоста и группы должны использовать синтаксис YAML. Допустимые расширения файлов включают ‘.yml’, ‘.yaml’, ‘.json’ или без расширения файла. См. Синтаксис YAML, если вы новичок в YAML.
Ansible загружает файлы переменных хоста и группы, выполняя поиск по путям, относительным к файлу инвентаризации или файлу книги задач. Если ваш файл инвентаризации по адресу /etc/ansible/hosts содержит хост с именем «foosball», который принадлежит двум группам, «raleigh» и «webservers», этот хост будет использовать переменные в файлах YAML по следующим адресам:
/etc/ansible/group_vars/raleigh # can optionally end in '.yml', '.yaml', or '.json' /etc/ansible/group_vars/webservers /etc/ansible/host_vars/foosball
Например, если вы группируете хосты в своей инвентаризации по центрам обработки данных, и каждый центр обработки данных использует свой собственный NTP-сервер и сервер базы данных, вы можете создать файл под названием /etc/ansible/group_vars/raleigh для хранения переменных для группы raleigh:
--- ntp_server: acme.example.org database_server: storage.example.org
Вы также можете создать каталоги, названные в честь ваших групп или хостов. Ansible будет читать все файлы в этих каталогах в лексикографическом порядке. Пример с группой «raleigh»:
/etc/ansible/group_vars/raleigh/db_settings /etc/ansible/group_vars/raleigh/cluster_settings
Все хосты в группе «raleigh» будут иметь доступ к переменным, определенным в этих файлах. Это может быть очень полезно для сохранения организации ваших переменных, когда один файл становится слишком большим или когда вы хотите использовать Ansible Vault для некоторых переменных группы.
Вы также можете добавить каталоги group_vars/ и host_vars/ в каталог книги задач. Команда ansible-playbook по умолчанию ищет эти каталоги в текущей рабочей директории. Другие команды Ansible (например, ansible, ansible-console, и так далее) будут искать только group_vars/ и host_vars/ в каталоге инвентаризации. Если вы хотите, чтобы другие команды загружали переменные групп и хостов из каталога книги задач, вы должны указать опцию --playbook-dir в командной строке. Если вы загружаете файлы инвентаризации как из каталога книги задач, так и из каталога инвентаризации, переменные из каталога книги задач будут переопределять переменные, заданные в каталоге инвентаризации.
Хранение файла инвентаризации и переменных в репозитории Git (или другом системе контроля версий) — отличный способ отслеживать изменения в инвентаризации и переменных хостов.
Как объединяются переменные
По умолчанию переменные объединяются/сглаживаются для конкретного хоста перед запуском книги задач. Это позволяет Ansible сосредоточиться на хосте и задаче, поэтому группы фактически не сохраняются за пределами инвентаризации и сопоставления хостов. По умолчанию Ansible переопределяет переменные, включая те, что определены для группы и/или хоста (см. DEFAULT_HASH_BEHAVIOUR). Порядок/приоритет (от низкого к высокому):
- группа all (потому что она является «родительской» для всех остальных групп)
- родительская группа
- дочерняя группа
- хост
По умолчанию Ansible объединяет группы на одном уровне родитель/дочерний в порядке ASCII, и последняя загруженная группа переписывает предыдущие группы. Например, переменные a_group будут объединены с b_group, а переменные b_group, соответствующие переменным a_group, перепишут их.
Вы можете изменить это поведение, задав переменную группы ansible_group_priority для изменения порядка объединения групп одного уровня (после разрешения порядка родитель/дочерний). Чем больше число, тем позже она будет объединена, получив более высокий приоритет. Эта переменная по умолчанию равна 1, если не задана. Например:
a_group:
vars:
testvar: a
ansible_group_priority: 10
b_group:
vars:
testvar: b
В этом примере, если у обеих групп одинаковый приоритет, результат обычно был бы testvar == b, но поскольку мы придаём a_group более высокий приоритет, результатом будет testvar == a.
Примечание
ansible_group_priority можно задавать только в источнике инвентаризации, а не в group_vars/, так как переменная используется при загрузке group_vars.
Использование нескольких источников инвентаризации
Вы можете одновременно использовать несколько источников инвентаризации (каталоги, динамические скрипты инвентаризации или файлы, поддерживаемые плагинами инвентаризации), передавая несколько параметров инвентаризации из командной строки или настраивая ANSIBLE_INVENTORY. Это может быть полезно, когда вы хотите одновременно нацеливаться на разные среды, такие как staging и production, для конкретного действия.
Укажите два источника из командной строки так:
ansible-playbook get_logs.yml -i staging -i production
Помните, что если в инвентаризациях есть конфликты переменных, они разрешаются в соответствии с правилами, описанными в Как объединяются переменные и Приоритет переменных: где следует поместить переменную?. Порядок слияния контролируется порядком параметров источника инвентаризации. Если [all:vars] в инвентаризации staging определяет myvar = 1, но инвентаризация production определяет myvar = 2, книга задач будет запущена с myvar = 2. Результат будет обратным, если книга задач будет запущена с -i production -i staging.
Объединение источников инвентаризации с каталогом
Вы также можете создать инвентаризацию, объединив несколько источников и типов источников в каталоге. Это может быть полезно для объединения статических и динамических хостов и управления ими как одной инвентаризацией. Следующая инвентаризация объединяет источник плагина инвентаризации, динамический скрипт инвентаризации и файл со статическими хостами:
inventory/
openstack.yml # configure inventory plugin to get hosts from Openstack cloud
dynamic-inventory.py # add additional hosts with dynamic inventory script
static-inventory # add static hosts and groups
group_vars/
all.yml # assign variables to all hosts
Вы можете указать этот каталог инвентаризации следующим образом:
ansible-playbook example.yml -i inventory
Может быть полезно контролировать порядок слияния источников инвентаризации, если есть конфликты переменных или зависимости групп групп от других источников инвентаризации. Инвентаризации объединяются в лексикографическом порядке согласно именам файлов, поэтому результат можно контролировать, добавляя префиксы к файлам:
inventory/
01-openstack.yml # configure inventory plugin to get hosts from Openstack cloud
02-dynamic-inventory.py # add additional hosts with dynamic inventory script
03-static-inventory # add static hosts
group_vars/
all.yml # assign variables to all hosts
Если 01-openstack.yml определяет myvar = 1 для группы all, 02-dynamic-inventory.py определяет myvar = 2, а 03-static-inventory определяет myvar = 3, книга задач будет запущена с myvar = 3.
Дополнительную информацию о плагинах инвентаризации и динамических скриптах инвентаризации см. в разделах Плагины инвентаризации и Работа с динамической инвентаризацией.
Подключение к хостам: поведенческие параметры инвентаризации
Как описано выше, указание следующих переменных управляет тем, как Ansible взаимодействует с удалёнными хостами.
Подключение к хосту:
Примечание
Ansible не предоставляет канал для взаимодействия пользователя с процессом ssh для ручного ввода пароля для расшифровки ключа ssh при использовании плагина подключения ssh (который используется по умолчанию). Сильно рекомендуется использовать ssh-agent.
- ansible_connection
-
Тип подключения к хосту. Это может быть имя любого из плагинов подключения Ansible. Типы протоколов SSH —
smart,sshилиparamiko. По умолчанию — smart. Типы, не основанные на SSH, описаны в следующем разделе.
Общие для всех подключений:
- ansible_host
-
Имя хоста для подключения, если оно отличается от псевдонима, который вы хотите ему присвоить.
- ansible_port
-
Номер порта подключения, если он не по умолчанию (22 для ssh)
- ansible_user
-
Имя пользователя для подключения к хосту
- ansible_password
-
Пароль для аутентификации на хосте (никогда не храните эту переменную в открытом виде; всегда используйте vault. См. Держите зашифрованные переменные видимыми безопасно)
Специфичные для подключения SSH:
- ansible_ssh_private_key_file
-
Файл закрытого ключа, используемый ssh. Полезно, если используются несколько ключей, и вы не хотите использовать агент SSH.
- ansible_ssh_common_args
-
Это значение всегда добавляется в командную строку по умолчанию для sftp, scp и ssh. Полезно для настройки
ProxyCommandдля определенного хоста (или группы). - ansible_sftp_extra_args
-
Это значение всегда добавляется в командную строку sftp по умолчанию.
- ansible_scp_extra_args
-
Это значение всегда добавляется в командную строку scp по умолчанию.
- ansible_ssh_extra_args
-
Это значение всегда добавляется в командную строку ssh по умолчанию.
- ansible_ssh_pipelining
-
Определяет, использовать ли SSH-каналы. Это может переопределить значение
pipeliningвansible.cfg. - ansible_ssh_executable (добавлен в версии 2.2)
-
Это значение переопределяет стандартное поведение использования системного ssh. Это может переопределить значение
ssh_executableвansible.cfg.
Масштабирование привилегий (см. Масштабирование привилегий Ansible для получения более подробной информации):
- ansible_become
-
Эквивалентно
ansible_sudoилиansible_su, позволяет принудительно включить масштабирование привилегий - ansible_become_method
-
Позволяет установить метод масштабирования привилегий
- ansible_become_user
-
Эквивалентно
ansible_sudo_userилиansible_su_user, позволяет указать пользователя, к которому происходит масштабирование привилегий - ansible_become_password
-
Эквивалентно
ansible_sudo_passwordилиansible_su_password, позволяет установить пароль для масштабирования привилегий (никогда не храните эту переменную в открытом виде; всегда используйте хранилище. См. Безопасное хранение зашифрованных переменных) - ansible_become_exe
-
Эквивалентно
ansible_sudo_exeилиansible_su_exe, позволяет указать исполняемый файл для выбранного метода масштабирования - ansible_become_flags
-
Эквивалентно
ansible_sudo_flagsилиansible_su_flags, позволяет задать флаги, передаваемые выбранному методу масштабирования. Это также можно установить глобально вansible.cfgв опцииsudo_flags
Параметры среды удалённого узла:
- ansible_shell_type
-
Тип оболочки целевой системы. Не следует использовать эту настройку, если не задан ansible_shell_executable для оболочки, несовместимой с Bourne (sh). По умолчанию команды форматируются с использованием синтаксиса
sh. Установка значенийcshилиfishзаставит команды, выполняемые на целевых системах, следовать синтаксису этой оболочки.
- ansible_python_interpreter
-
Путь к интерпретатору Python на целевом узле. Это полезно для систем с несколькими установками Python или если он не расположен по пути /usr/bin/python, например, на системах *BSD, или если /usr/bin/python не является интерпретатором Python версии 2.X. Мы не используем механизм /usr/bin/env, так как он требует правильной настройки пути удалённого пользователя и предполагает, что исполняемый файл python имеет имя python, в то время как фактический исполняемый файл может называться, например, python2.6.
- ansible_*_interpreter
-
Подходит для языков, таких как Ruby или Perl, и работает аналогично ansible_python_interpreter. Заменяет shebang модулей, которые будут выполняться на этом узле.
Новое в версии 2.1.
- ansible_shell_executable
-
Устанавливает оболочку, которую контроллер Ansible будет использовать на целевой машине, переопределяет
executableвansible.cfg, по умолчанию /bin/sh. Изменять следует только в случае, если невозможно использовать /bin/sh (например, если /bin/sh не установлен на целевой машине или не может быть запущен с помощью sudo).
Примеры из файла конфигурации Ansible-INI:
some_host ansible_port=2222 ansible_user=manager aws_host ansible_ssh_private_key_file=/home/example/.ssh/aws.pem freebsd_host ansible_python_interpreter=/usr/local/bin/python ruby_module_host ansible_ruby_interpreter=/usr/bin/ruby.1.9.3
Типы соединений, не использующие SSH
Как уже упоминалось в предыдущем разделе, Ansible выполняет playbook через SSH, но не ограничивается этим типом соединения. С помощью параметра ansible_connection=<connector> для конкретного узла можно изменить тип соединения. Доступны следующие типы соединений, не использующие SSH:
local
Этот соединитель может использоваться для развертывания playbook на самом контроллере.
docker
Этот соединитель развертывает playbook непосредственно в контейнеры Docker, используя локальный клиент Docker. Обрабатываются следующие параметры:
- ansible_host
-
Имя контейнера Docker для подключения.
- ansible_user
-
Имя пользователя для работы внутри контейнера. Пользователь должен существовать внутри контейнера.
- ansible_become
-
Если установлено значение
true, то будет использоватьсяbecome_userдля работы внутри контейнера. - ansible_docker_extra_args
-
Может быть строкой с любыми дополнительными аргументами, понимаемыми Docker, которые не являются специфичными для команды. Этот параметр в основном используется для конфигурации удалённого демона Docker.
Вот пример мгновенного развертывания в созданных контейнерах:
- name: Create a jenkins container
community.general.docker_container:
docker_host: myserver.net:4243
name: my_jenkins
image: jenkins
- name: Add the container to inventory
ansible.builtin.add_host:
name: my_jenkins
ansible_connection: docker
ansible_docker_extra_args: "--tlsverify --tlscacert=/path/to/ca.pem --tlscert=/path/to/client-cert.pem --tlskey=/path/to/client-key.pem -H=tcp://myserver.net:4243"
ansible_user: jenkins
changed_when: false
- name: Create a directory for ssh keys
delegate_to: my_jenkins
ansible.builtin.file:
path: "/var/jenkins_home/.ssh/jupiter"
state: directory
Полный список доступных плагинов и примеры можно найти в Списке плагинов.
Примечание
Если вы читаете документацию с начала, возможно, это первый пример Ansible playbook, который вы видите. Это не файл инвентаризации. Playbook будут подробно рассмотрены в последующих разделах документации.
Примеры настройки инвентаризации
См. также Пример настройки Ansible, в котором представлены инвентаризация вместе с playbooks и другими элементами Ansible.
Пример: Одна инвентаризация на среду
Если вам нужно управлять несколькими средами, иногда целесообразно определять только узлы одной среды в одной инвентаризации. Таким образом, например, сложнее случайно изменить состояние узлов в среде «test», когда вы на самом деле хотели обновить некоторые серверы в среде «staging».
Для вышеупомянутого примера можно создать файл inventory_test.
[dbservers] db01.test.example.com db02.test.example.com [appservers] app01.test.example.com app02.test.example.com app03.test.example.com
Этот файл содержит только узлы, являющиеся частью среды «test». Определите машины «staging» в другом файле с именем inventory_staging.
[dbservers] db01.staging.example.com db02.staging.example.com [appservers] app01.staging.example.com app02.staging.example.com app03.staging.example.com
Чтобы применить playbook с именем site.yml ко всем серверам приложения в тестовой среде, используйте следующую команду:
ansible-playbook -i inventory_test -l appservers site.yml
Пример: Группировка по функциям
В предыдущем разделе вы уже видели пример использования групп для объединения узлов, выполняющих одинаковые функции. Это позволяет, например, определять правила брандмауэра в playbook или роли, затрагивающие только серверы базы данных.
- hosts: dbservers
tasks:
- name: Allow access from 10.0.0.1
ansible.builtin.iptables:
chain: INPUT
jump: ACCEPT
source: 10.0.0.1
Пример: Группировка по местоположению
Другие задачи могут быть сосредоточены на местоположении узла. Например, db01.test.example.com и app01.test.example.com находятся в ЦОД1, а db02.test.example.com — в ЦОД2.
[dc1] db01.test.example.com app01.test.example.com [dc2] db02.test.example.com
На практике вы можете даже смешивать все эти подходы, так как вам может потребоваться в один день обновить все узлы в конкретном дата-центре, а в другой день — все серверы приложений независимо от их местоположения.
См. также
- Плагины инвентаризации
-
Получение инвентаризации из динамических или статических источников
- Работа с динамической инвентаризацией
-
Получение инвентаризации из динамических источников, таких как поставщики облачных услуг
- Введение в ад-хок команды
-
Примеры базовых команд
- Работа с playbooks
-
Изучение языка конфигурации, развертывания и оркестрации Ansible.
- Список рассылки
-
Вопросы? Помощь? Идеи? Загляните на список рассылки на Google Groups
- irc.freenode.net
-
IRC-чат-канал #ansible
© 2012–2018 Michael DeHaan
© 2018–2021 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.11/user_guide/intro_inventory.html