Spec-Zone.ru › Ansible 2.10

Шаблоны: нацеливание на хосты и группы

При выполнении Ansible через команду ad-hoc или запуск playbook, необходимо выбрать управляемые узлы или группы, на которые вы хотите выполнить действие. Шаблоны позволяют запускать команды и playbooks на определённых хостах и/или группах в вашем инвентаре. Шаблон Ansible может ссылаться на один хост, IP-адрес, группу инвентаря, набор групп или все хосты в вашем инвентаре. Шаблоны очень гибкие - вы можете исключить или потребовать подмножества хостов, использовать подстановочные знаки или регулярные выражения и многое другое. Ansible выполняется на всех хостах инвентаря, включённых в шаблон.

  • Использование шаблонов
  • Общие шаблоны
  • Ограничения шаблонов
  • Дополнительные параметры шаблонов

    • Использование переменных в шаблонах
    • Использование позиции группы в шаблонах
    • Использование регулярных выражений в шаблонах
  • Шаблоны и флаги ansible-playbook

Использование шаблонов

Вы используете шаблон практически каждый раз, когда выполняете команду ad-hoc или playbook. Шаблон - единственный элемент команды ad-hoc, у которого нет флага. Обычно это второй элемент:

ansible <pattern> -m <module_name> -a "<module options>"

Например:

ansible webservers -m service -a "name=httpd state=restarted"

В playbook шаблон - содержимое строки hosts: для каждого play:

- name: <play_name>
  hosts: <pattern>

Например:

- name: restart webservers
  hosts: webservers

Поскольку вы часто хотите выполнить команду или playbook сразу на нескольких хостах, шаблоны часто ссылаются на группы инвентаря. Как команда ad-hoc, так и playbook выше будут выполняться на всех машинах в группе webservers.

Общие шаблоны

В этой таблице перечислены распространённые шаблоны для нацеливания на хосты и группы инвентаря.

Описание

Шаблон(ы)

Цели

Все хосты

all (или *)

Один хост

host1

Несколько хостов

host1:host2 (или host1,host2)

Одна группа

webservers

Несколько групп

webservers:dbservers

все хосты в webservers плюс все хосты в dbservers

Исключение групп

webservers:!atlanta

все хосты в webservers за исключением тех, что в atlanta

Пересечение групп

webservers:&staging

любые хосты в webservers, которые также находятся в staging

Примечание

Можно использовать запятую (,) или двоеточие (:) для разделения списка хостов. Запятая предпочтительнее при работе с диапазонами и IPv6-адресами.

После того, как вы знаете базовые шаблоны, вы можете их комбинировать. Этот пример:

webservers:dbservers:&staging:!phoenix

направлен на все машины в группах ‘webservers’ и ‘dbservers’, которые также находятся в группе ‘staging’, за исключением любых машин в группе ‘phoenix’.

Можно использовать шаблоны с подстановочными знаками для FQDN или IP-адресов, если хосты в вашем инвентаре названы FQDN или IP-адресом:

192.0.\*
\*.example.com
\*.com

Можно смешивать шаблоны с подстановочными знаками и группы одновременно:

one*.com:dbservers

Ограничения шаблонов

Шаблоны зависят от инвентаря. Если хост или группа не указаны в вашем инвентаре, вы не можете использовать шаблон для его нацеливания. Если ваш шаблон включает IP-адрес или имя хоста, которые не указаны в вашем инвентаре, вы увидите ошибку такого вида:

[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: Could not match supplied host pattern, ignoring: *.not_in_inventory.com

Ваш шаблон должен соответствовать синтаксису вашего инвентаря. Если вы определяете хост как псевдоним:

atlanta:
  host1:
    http_port: 80
    maxRequestsPerChild: 808
    host: 127.0.0.2

вы должны использовать псевдоним в своём шаблоне. В приведённом выше примере необходимо использовать host1 в шаблоне. Если вы используете IP-адрес, вы снова получите ошибку:

[WARNING]: Could not match supplied host pattern, ignoring: 127.0.0.2

Дополнительные параметры шаблонов

Общие шаблоны, описанные выше, удовлетворят большинство ваших потребностей, но Ansible предлагает несколько других способов определения хостов и групп, на которые вы хотите нацелиться.

Использование переменных в шаблонах

Можно использовать переменные для передачи спецификаторов групп через аргумент -e к ansible-playbook:

webservers:!{{ excluded }}:&{{ required }}

Использование позиции группы в шаблонах

Можно определить хост или подмножество хостов по его позиции в группе. Например, при наличии следующей группы:

[webservers]
cobweb
webbing
weber

можно использовать индексы для выбора отдельных хостов или диапазонов в группе webservers:

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

Шаблоны и флаги ansible-playbook

Можно изменить поведение шаблонов, определённых в playbooks, с помощью параметров командной строки. Например, можно запустить playbook, который определяет hosts: all на одном хосте, указав -i 127.0.0.2, (обратите внимание на конечную запятую). Это работает даже если целевой хост не определён в вашем инвентаре. Также можно ограничить хосты, на которые вы нацеливаетесь, в конкретном запуске, используя флаг --limit:

ansible-playbook site.yml --limit datacenter2

Наконец, можно использовать --limit для чтения списка хостов из файла, добавив префикс имени файла @:

ansible-playbook site.yml --limit @retry_hosts.txt

Если RETRY_FILES_ENABLED установлено в True, файл .retry будет создан после выполнения ansible-playbook с содержанием списка неудачных хостов из всех play. Этот файл перезаписывается каждый раз, когда ansible-playook завершается.

ansible-playbook site.yml –limit @site.retry

Для применения знаний о шаблонах с командами Ansible и playbooks, ознакомьтесь со статьёй Введение в команды ad-hoc и Введение в playbooks.

См. также

Введение в команды ad-hoc

Примеры основных команд

Работа с playbooks

Изучение языка управления конфигурацией Ansible

Список рассылки

Вопросы? Помощь? Идеи? Заходите на форум Google Groups

irc.freenode.net

IRC-чат канал #ansible

© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.10/user_guide/intro_patterns.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API