Как создать свой инвентарь
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:
Для числовых шаблонов можно включать или исключать ведущие нули по мере необходимости. Диапазоны включают крайние значения. Вы также можете определить алфавитные диапазоны:
[databases] db-[a:f].example.com
Добавление переменных в инвентарь
Вы можете хранить значения переменных, относящихся к определенному хосту или группе, в инвентаре. Начать можно с добавления переменных непосредственно к хостам и группам в главном файле инвентаря. Однако, по мере добавления новых управляемых узлов в ваш инвентарь Ansible, вероятно, потребуется хранить переменные в отдельных файлах переменных хостов и групп.
Назначение переменной одному узлу: переменные хостов
Вы можете легко назначить переменную одному хосту и затем использовать её в плейбуках. В INI:
[atlanta] host1 http_port=80 maxRequestsPerChild=808 host2 http_port=303 maxRequestsPerChild=909
В YAML:
atlanta:
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. Это работает только для хостов со статическими IP-адресами или при подключении через туннели.
Примечание
Значения, переданные в формате 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 объединяет группы на одном уровне родитель/потомок в алфавитном порядке, а последняя загруженная группа переписывает предыдущие группы. Например, a_group будет слита с b_group, а переменные b_group, которые совпадают, перепишут те, что в a_group.
Вы можете изменить это поведение, задав переменную группы ansible_group_priority, чтобы изменить порядок слияния для групп на одном уровне (после разрешения порядка родитель/потомок). Чем больше число, тем позже произойдет слияние, что придаст ему более высокий приоритет. Эта переменная по умолчанию равна 1, если не задано другое значение. Например:
a_group:
testvar: a
ansible_group_priority: 10
b_group:
testvar: b
В этом примере, если обе группы имеют одинаковый приоритет, результат обычно бы был testvar == b, но так как мы даём a_group более высокий приоритет, результатом будет testvar == a.
Примечание
ansible_group_priority может быть задан только в источнике инвентаризации, а не в group_vars/, так как переменная используется при загрузке group_vars.
Использование нескольких источников инвентаризации
Вы можете одновременно указать несколько источников инвентаризации (каталоги, динамические скрипты инвентаризации или файлы, поддерживаемые плагинами инвентаризации), указав несколько параметров инвентаризации в командной строке или настроив ANSIBLE_INVENTORY. Это может быть полезно, когда вы хотите одновременно нацелиться на различные среды, такие как эталонную и производственную, для конкретного действия.
Укажите два источника из командной строки так:
ansible-playbook get_logs.yml -i staging -i production
Помните, что если в инвентаризациях есть конфликты переменных, они разрешаются в соответствии с правилами, описанными в Как происходят слияния переменных и Приоритет переменных: куда поместить переменную?. Порядок слияния контролируется порядком параметров источника инвентаризации. Если [all:vars] в эталонной инвентаризации определяет myvar = 1, а производственная инвентаризация определяет 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
- Пароль для аутентификации на хосте (никогда не храните эту переменную в открытом виде; всегда используйте хранилище. См. Переменные и хранилища)
Специфично для подключения 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 jenkins container
docker_container:
docker_host: myserver.net:4243
name: my_jenkins
image: jenkins
- name: add container to inventory
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 directory for ssh keys
delegate_to: my_jenkins
file:
path: "/var/jenkins_home/.ssh/jupiter"
state: directory
Полный список доступных плагинов и примеры см. в списке плагинов.
Примечание
Если вы читаете документацию с самого начала, этот пример может быть первым примером playbook Ansible, который вы видите. Это не файл инвентаризации. Playbook будут подробно рассмотрены позже в документации.
Примеры настройки инвентаризации
Пример: Одна инвентаризация на среду
Если вам нужно управлять несколькими средами, иногда целесообразно определять хосты только одной среды в каждой инвентаризации. Таким образом, например, случайно изменить состояние узлов в среде «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 site.yml -l appservers
Пример: Группировка по функции
В предыдущем разделе вы уже видели пример использования групп для объединения хостов, выполняющих одинаковые функции. Это позволяет, например, определять правила брандмауэра в playbook или роли, не затрагивая серверы базы данных:
- hosts: dbservers
tasks:
- name: allow access from 10.0.0.1
iptables:
chain: INPUT
jump: ACCEPT
source: 10.0.0.1
Пример: Группировка по расположению
Другие задачи могут быть сосредоточены на расположении хоста. Допустим, db01.test.example.com и app01.test.example.com находятся в DC1, а db02.test.example.com находится в DC2:
[dc1] db01.test.example.com app01.test.example.com [dc2] db02.test.example.com
На практике вы можете даже смешивать все эти настройки, так как вам может потребоваться в один день обновить все узлы в определенном дата-центре, а в другой день обновить все серверы приложений независимо от их расположения.
См. также
- Плагины инвентаризации
- Извлечение инвентаризации из динамических или статических источников
- Работа с динамической инвентаризацией
- Извлечение инвентаризации из динамических источников, таких как облачные провайдеры
- Введение в ad-hoc команды
- Примеры основных команд
- Работа с playbook
- Изучение языка конфигурации, развертывания и оркестрации Ansible.
- Список рассылки
- Вопросы? Помощь? Идеи? Загляните на список рассылки на Google Groups
- irc.freenode.net
- #ansible IRC-чат-канал
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.9/user_guide/intro_inventory.html