С ростом количества задач плейбуки становятся достаточно большими. И при отладке сценария это может вызывать неудобства. Если нужные задачи будут находиться ближе к концу плейбука, то пройдет достаточно много времени перед тем, как Ansible доберется до их выполнения. Для оптимизации процесса существует механизм тегов, который позволяет выполнять задачи выборочно. Мы можем пометить задачи тегами и запускать их, когда это необходимо:
В примере есть задачи, которые отвечают за работу с nginx. Одна из них копирует файл конфигурации, другая перезапускает nginx. Мы их пометили тегом nginx
, указав ключ и значение. При этом в любой задаче можно указать несколько тегов. Например, вот так tags: [nginx, config]
:
- hosts: webservers
tasks:
- name: install nginx
ansible.builtin.apt:
name: nginx
state: latest
become: yes
tags: nginx
- name: install redis server
ansible.builtin.apt:
name: redis-server
state: present
update_cache: yes
become: yes
- name: update cron
ansible.builtin.cron:
name: "check dirs"
minute: "0"
hour: "5,2"
job: "ls -alh > /dev/null"
- name: update nginx config
ansible.builtin.copy:
src: files/nginx.conf
dest: /etc/nginx/nginx.conf
become: yes
tags: [nginx, config]
- name: restart nginx
ansible.builtin.service:
name: nginx
state: reloaded
become: yes
tags: nginx
Нужные задачи запускаются с помощью опции -t
, которой передается название тега. Если мы ошибемся и укажем несуществующий тег, то Ansible выдаст подсказку со списком тегов, которые можно использовать:
ansible-playbook --check playbook.yml -i inventory.ini -t nginx
Обратите внимание, что используется параметр --check
. Так мы проверяем возможность изменений, не выполняя непосредственно сами задачи. После ввода команды мы увидим, что выполнились только три задачи с тегом nginx
:
TASK [install nginx] ****************************************
ok: [ec2-18-216-178-214.us-east-2.compute.amazonaws.com]
TASK [update nginx config] **********************************
ok: [ec2-18-216-178-214.us-east-2.compute.amazonaws.com]
TASK [restart nginx] ****************************************
changed: [ec2-18-216-178-214.us-east-2.compute.amazonaws.com]
Также можно исключать из сценария задачи, которые мы не хотим выполнять. Для этого существует опция --skip-tags
. С помощью вот такой команды будут запущены все таски, не связанные с Nginx:
ansible-playbook --check playbook.yml -i inventory.ini --skip-tags nginx
Самостоятельная работа
Для выполнения этого задания потребуется виртуальный сервер в облаке. Опишем плейбук с тегами для частичного выполнения изменений.
1.Создайте плейбук, в нем должны выполняться следующие задачи:
1. Обновление кеша пакетного менеджера
2. Установка рабочих приложений и пакетов (например Git, Make, Nodejs)
3. Создание нескольких пользователей (arya, sansa, tirion)
- Для частичного применения задач добавьте теги. Удобно добавить в Makefile команду, с помощью которой можно применять нужные теги
- Выполните плейбук и залейте изменения на Github
В результате у вас получится плейбук, который настраивает сервер для работы. За счет тегов таски можно выполнять частично (например актуализировать список пользователей, без установки пакетов).
Дополнительные материалы

Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.