Spec-Zone.ru › Ansible 2.6

Теги

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

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

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

Существует специальный 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 был указан.

См. также

Работа с плейбуками
Введение в плейбуки
Роли
Организация плейбука по ролям
Список рассылки пользователей
У вас есть вопрос? Загляните на страницу группы 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

Spec-Zone.ru

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