Я попытался запустить playbook с ролью и только несколькими задачами из нее. F.e. У меня есть playbook
# setup.yaml
- hosts: all
tasks:
- include_role:
name: system
tags: setup
и роль "система"с задачами:
# roles/system/tasks/main.yaml
- name: Test ping
import_tasks: ping.yaml
tags: test
- name: Create ansible user
import_tasks: create_user_ansible.yaml
tags: setup
====================================================
# roles/system/tasks/ping.yaml
- name: test_ping
ping:
====================================================
# roles/system/tasks/create_user_ansible.yaml
- name: Creating ansible user
tags: setup
user:
name: ansible
password: '<hash>'
groups: adm
state: present
shell: /bin/bash
system: no
createhome: yes
home: /home/ansible
Когда я запускаю команду
ansible-playbook -i inventories/setup setup.yaml
обе задачи (ping.yaml и create_user_ansible.yaml) работают, но когда я запускаю
ansible-playbook -i inventories/setup setup.yaml --tags setup
работает, как мне и нужно.
Итак, мой вопрос:
Это такое поведение, разработанное разработчиками Ansible, или я допустил ошибку в моем сценарии, и есть какой-то способ запустить только несколько задач из роли без использования --tags
в командной строке?
Это поведение Ansible по умолчанию. Как показано в документация:
По умолчанию Ansible работает так, как если бы
--tags all
было указано.
Если вы хотите, чтобы игра не запускалась, если вы не указали никаких тегов, вы можете добавить специальный тег never
к нему. Снова пример из документации:
Еще один специальный тег -
never
, что предотвратит запуск задачи, если не будет специально запрошен тег.Пример:
tasks: - debug: msg="{{ showmevar }}" tags: [ never, debug ]
В этом примере задача будет запущена только тогда, когда
debug
илиnever
тег явно запрошен.