Теги
Если у вас большой плейбук, может быть полезно возможность запускать определённую часть конфигурации без запуска всего плейбука.
И плейбуки, и задачи поддерживают атрибут «tags:» по этой причине. Вы можете ТОЛЬКО фильтровать задачи на основе тегов из командной строки с помощью --tags или --skip-tags. Добавление «tags:» в любую часть плейбука (включая роли) добавляет эти теги к содержащимся задачам.
Пример:
tasks:
- yum: name={{ item }} state=installed
with_items:
- httpd
- memcached
tags:
- packages
- template: src=templates/src.j2 dest=/etc/foo.conf
tags:
- configuration
Если вы хотите запустить только часть «configuration» и «packages» очень длинного плейбука, вы можете сделать это:
ansible-playbook example.yml --tags "configuration,packages"
С другой стороны, если вы хотите запустить плейбук без определённых задач, вы можете сделать это:
ansible-playbook example.yml --skip-tags "notification"
Повторное использование тегов
Вы можете применять одно и то же имя тега к нескольким задачам, в одном файле или включённых файлах. Это запустит все задачи с этим тегом.
Пример:
---
# file: roles/common/tasks/main.yml
- name: be sure ntp is installed
yum: name=ntp state=installed
tags: ntp
- name: be sure ntp is configured
template: src=ntp.conf.j2 dest=/etc/ntp.conf
notify:
- restart ntpd
tags: ntp
- name: be sure ntpd is running and enabled
service: name=ntpd state=started enabled=yes
tags: ntp
Наследование тегов
Вы можете применять теги к большему, чем задачам, но они только влияют на сами задачи. Применение тегов в других местах — просто удобство, чтобы вам не приходилось писать его на каждой задаче:
- hosts: all
tags:
- bar
tasks:
...
- hosts: all
tags: ['foo']
tasks:
...
Вы также можете применять теги к ролям:
roles:
- { role: webserver, port: 5000, tags: [ 'web', 'foo' ] }
И к инструкциям import/include:
- import_tasks: foo.yml tags: [web,foo]
или:
- include_tasks: foo.yml tags: [web,foo]
Всё это применяет указанные теги к КАЖДОЙ задаче внутри плейбука, включённого файла или роли, так что эти задачи могут быть выборочно запущены при вызове плейбука с соответствующими тегами.
Теги наследуются вниз по цепочке зависимостей. Для того, чтобы теги применялись к роли и всем её зависимостям, тег должен быть применён к роли, а не ко всем задачам внутри роли.
Вы можете увидеть, какие теги применены к задачам, выполнив ansible-playbook с параметром --list-tasks. Вы можете отобразить все теги, используя параметр --list-tags.
Специальные теги
Пример:
tasks:
- debug: msg="Always runs"
tags:
- always
- debug: msg="runs when you use tag1"
tags:
- tag1
Есть ещё 3 специальных ключевых слова для тегов, tagged, untagged и all, которые запускают только тегированные, только нетегированные и все задачи соответственно.
По умолчанию ansible работает так, как будто был указан --tags all.
См. также
- Плейбуки
- Введение в плейбуки
- Роли
- Организация плейбуков по ролям
- Пользовательский список рассылки
- У вас есть вопрос? Загляните на форум!
- 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.4/playbooks_tags.html