Spec-Zone.ru › Ansible 2.5

Теги

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

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

Если вы хотели запустить только части «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_tasks: foo.yml
  tags: [web,foo]

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

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

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

Вы можете увидеть, какие теги применены к задачам, запустив 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

Новое в версии 2.5.

Другой специальный тег — never, который предотвратит выполнение задачи, если тег не запрошен явно.

Пример:

tasks:
  - debug: msg='{{ showmevar}}'
    tags: [ 'never', 'debug' ]

В этом примере задача будет выполняться только при явном запросе тега debug или never.

Ещё 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.5/user_guide/playbooks_tags.html

Spec-Zone.ru

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