我尝试运行带有角色的剧本,并且只执行其中的几个任务。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