Теги
Если у вас большой плейбук, то может оказаться полезным возможность запуска определённой части конфигурации без запуска всего плейбука.
И плейбуки, и задачи поддерживают атрибут “tags:” по этой причине. Вы можете ТОЛЬКО фильтровать задачи на основе тегов из командной строки с помощью --tags или --skip-tags. Добавление “tags:” в любой части плейбука (включая роли) добавляет эти теги к содержащимся задачам.
Пример:
tasks:
- yum:
name: "{{ item }}"
state: installed
loop:
- httpd
- memcached
tags:
- packages
- template:
src: templates/src.j2
dest: /etc/foo.conf
tags:
- configuration
Если вы хотите запустить только часть «конфигурация» и «пакеты» очень длинного плейбука, вы можете сделать так:
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
vars:
port: 5000
tags: [ 'web', 'foo' ]
И операторам импорта:
- import_tasks: foo.yml tags: [web,foo]
Всё это применяет указанные теги к КАЖДОЙ задаче внутри плейбука, импортированного файла или роли, чтобы эти задачи могли быть выборочно запущены при вызове плейбука с соответствующими тегами.
Нет способа «импортировать только эти теги»; вероятно, вам нужно разбить на меньшие роли/включения, если вы обнаруживаете такую необходимость.
Предыдущая информация не относится к include_tasks или другим динамическим включениям, так как атрибуты, применённые к включению, влияют только на само включение.
Теги наследуются вниз по цепочке зависимостей. Для того чтобы теги были применены к роли и всем её зависимостям, тег должен быть применён к роли, а не ко всем задачам внутри роли.
Вы можете увидеть, какие теги применяются к задачам, запустив ansible-playbook с --list-tasks параметром. Вы можете отобразить все теги с помощью --list-tags параметра.
Специальные теги
Пример:
tasks:
- debug:
msg: "Always runs"
tags:
- always
- debug:
msg: "runs when you use tag1"
tags:
- tag1
Новое в версии 2.5.
Другой специальный тег — never, который предотвращает выполнение задачи, если тег не запрашивается явно.
Пример:
tasks:
- debug: msg='{{ showmevar}}'
tags: [ 'never', 'debug' ]
В этом примере задача будет запущена только при явном запросе тега debug или never.
Ещё 3 специальных ключевых слова для тегов: tagged, untagged и all, которые запускают только помеченные, только непомеченные и все задачи соответственно.
По умолчанию Ansible выполняется так, как если бы --tags all был указан.
См. также
- Работа с плейбуками
- Введение в плейбуки
- Роли
- Организация плейбука по ролям
- Список рассылки пользователей
- У вас есть вопрос? Загляните на страницу группы Google!
- 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.6/user_guide/playbooks_tags.html