Работа с шаблонами
Шаблоны в Ansible определяют, какие хосты будут управляться. Это может означать, с какими хостами необходимо взаимодействовать, но в контексте Работа с Playbook это означает, какие хосты будут подвергнуты определенной конфигурации или ИТ-процессу.
Мы рассмотрим использование командной строки в разделе Введение в Ad-Hoc команды, однако, в целом это выглядит так:
ansible <pattern_goes_here> -m <module_name> -a <arguments>
Например:
ansible webservers -m service -a "name=httpd state=restarted"
Шаблон обычно относится к набору групп (которые являются наборами хостов) – в данном случае, машины в группе «webservers».
В любом случае, для использования Ansible, вам сначала нужно узнать, как указать Ansible, с какими хостами в вашем инвентаре он должен взаимодействовать. Это делается путем указания определенных имен хостов или групп хостов.
Следующие шаблоны эквивалентны и нацелены на все хосты в инвентаре:
all *
Также возможно указать конкретный хост или набор хостов по имени:
one.example.com one.example.com:two.example.com 192.0.2.50 192.0.2.*
Следующие шаблоны обращаются к одной или нескольким группам. Группы, разделенные двоеточием, указывают конфигурацию «ИЛИ». Это означает, что хост может принадлежать либо к одной группе, либо к другой:
webservers webservers:dbservers
Вы также можете исключить группы, например, все машины должны быть в группе webservers, но не в группе phoenix:
webservers:!phoenix
Вы также можете указать пересечение двух групп. Это означало бы, что хосты должны быть в группе webservers и также должны быть в группе staging:
webservers:&staging
Вы можете комбинировать:
webservers:dbservers:&staging:!phoenix
Вышеуказанная конфигурация означает «все машины в группах 'webservers' и 'dbservers' должны быть управляемы, если они также находятся в группе 'staging', но машины не должны управляться, если они находятся в группе 'phoenix' … уф!
Вы также можете использовать переменные, если хотите передать некоторые спецификаторы групп через аргумент «-e» в ansible-playbook, но это используется нечасто:
webservers:!{{excluded}}:&{{required}}
Также не обязательно управлять строго определенными группами. Отдельные имена хостов, IP-адреса и группы также могут быть указаны с помощью подстановочных знаков
*.example.com *.com
Также можно смешивать шаблоны с подстановкой и группы одновременно:
one*.com:dbservers
Вы можете выбрать хост или подмножество хостов из группы по их позиции. Например, при следующей группе:
[webservers] cobweb webbing weber
Вы можете ссылаться на хосты внутри группы, добавив индекс к имени группы:
webservers[0] # == cobweb
webservers[-1] # == weber
webservers[0:2] # == webservers[0],webservers[1]
# == cobweb,webbing
webservers[1:] # == webbing,weber
webservers[:3] # == cobweb,webbing,weber
Большинство людей не указывают шаблоны как регулярные выражения, но вы можете. Просто начните шаблон с символа '~':
~(web|db).*\.example\.com
Хотя мы немного опережаем события, дополнительно вы можете добавить критерии исключения, просто предоставив флаг --limit в /usr/bin/ansible или /usr/bin/ansible-playbook:
ansible-playbook site.yml --limit datacenter2
И если вы хотите прочитать список хостов из файла, добавьте префикс «@» к имени файла.:
ansible-playbook site.yml --limit @retry_hosts.txt
Достаточно просто. Обратитесь к Введению в Ad-Hoc команды, а затем к Работа с Playbook для того, как применить эти знания.
Примечание
Можно использовать запятую (,) вместо двоеточия (:) в качестве разделителя списка хостов. Запятая предпочтительнее, особенно при работе с диапазонами и IPv6.
См. также
- Введение в 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.7/user_guide/intro_patterns.html