Что такое тег в Ansible и как он используется?

«Что такое тег в Ansible и как он используется?» — вопрос из категории Ansible, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Тег (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 до точечных изменений.