Ответ
Тег (tag) в Ansible — это метка, присваиваемая задачам, блокам или целым ролям, которая позволяет выборочно выполнять или пропускать части плейбука. Это мощный механизм для управления сложными развертываниями и оперативными задачами в DevOps.
Практическое применение тегов:
- Селективный запуск: Выполнение только задач, связанных с конкретным сервисом (например,
--tags "nginx"), без перезапуска всей инфраструктуры. - Этапы развертывания: Разделение плейбука на логические этапы:
provision,configure,deploy,restart. - Экстренные исправления: Быстрое применение только исправления безопасности (
--tags "security-patch"). - Тестирование: Запуск только задач проверки (
--tags "check").
Пример плейбука с тегами:
---
- name: Configure web server
hosts: webservers
become: yes
tasks:
- name: Install Nginx and dependencies
apt:
name:
- nginx
- python3-certbot-nginx
state: latest
update_cache: yes
tags:
- install
- nginx
- name: Deploy web application code
copy:
src: ../app/dist/
dest: /var/www/html/
owner: www-data
group: www-data
tags:
- deploy
- app
- name: Ensure Nginx is running and enabled
service:
name: nginx
state: started
enabled: yes
tags:
- service
- nginx
- name: Setup SSL with Let's Encrypt (manual trigger)
command: certbot --nginx --non-interactive --agree-tos -m admin@example.com -d {{ domain }}
when: ssl_enabled | bool
tags:
- ssl
- security
Запуск с тегами из командной строки:
# Развернуть только приложение, без настройки SSL
ansible-playbook site.yml --tags "deploy,app"
# Выполнить полную установку и настройку Nginx, но пропустить задачи с тегом 'ssl'
ansible-playbook site.yml --tags "nginx,install,service" --skip-tags "ssl"
# Запустить ВСЕ задачи, кроме развертывания кода
ansible-playbook site.yml --skip-tags "deploy"
Теги делают Ansible плейбуки гибкими и пригодными для разных сценариев, от полного provisioning до точечных изменений.