Назад | Перейти на главную страницу

Запуск одной задачи из роли

Я попытался запустить 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 тег явно запрошен.