Ansible

Теория: Теги

С ростом количества задач плейбуки становятся достаточно большими. И при отладке сценария это может вызывать неудобства. Если нужные задачи будут находиться ближе к концу плейбука, то пройдет достаточно много времени перед тем, как 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

Рекомендуемые программы

Завершено

0 / 17