Spec-Zone.ru › Ansible 2.4

Теги

Если у вас большой плейбук, может быть полезно возможность запускать определённую часть конфигурации без запуска всего плейбука.

И плейбуки, и задачи поддерживают атрибут «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.

Специальные теги

Существует специальный тег always, который всегда запустит задачу, если её не пропустить явно (--skip-tags always)

Пример:

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

Spec-Zone.ru

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