从角色运行一项任务

从角色运行一项任务

我尝试运行带有角色的剧本,并且只执行其中的几个任务。Fe 我有剧本

# 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命令行的情况下从角色运行少量任务?

答案1

这是 Ansible 的默认行为。如下图所示文档

默认情况下,Ansible 运行时就像--tags all已指定一样。

如果您希望在未指定任何标签时不运行某个剧集,您可以never向其中添加特殊标签。再次引用文档中的一个例子:

另一个特殊标签是never,除非特别请求标签,否则它将阻止任务运行。

例子:

tasks:
  - debug: msg="{{ showmevar }}"
    tags: [ never, debug ]

在此示例中,仅当明确请求debug或标签时,任务才会运行。never

相关内容