我的test.yml
剧本看起来像这样:
- hosts: all
roles:
- role: test-role
test-role
角色看起来像这样:
---
- import_tasks: a.yml
tags:
- a
- import_tasks: b.yml
tags:
- b
但是如果我使用以下命令运行它:
ansible-playbook -i inventories/dev --tags "b" playbooks/test.yml --check
我从a.yml
运行中获得任务。
为什么?
仅供参考,a.yml
如下:
- set_fact: test_file="/tmp/test.txt"
- name: Look for the test file
stat:
path: "{{ test_file }}"
register: stat_result
- block:
- name: If the file exists, end playbook
debug: msg="Test file existed, ending play"
- meta: end_play
when: stat_result.stat.exists == True
错误是:
ERROR! The conditional check 'stat_result.stat.exists == True' failed. The error was: error while evaluating conditional (stat_result.stat.exists == True): 'stat_result' is undefined
和
The offending line appears to be:
debug: msg="Test file existed, ending play"
- meta: end_play
^ here
为什么a.yml
甚至在我使用标签专门不包含标签时也被运行?!
答案 0 :(得分:0)
如果要使用命令行包含/排除标签,则必须标记顶级剧本。就您而言,标记必须位于test.yml中,而不是角色中。
- hosts: all
roles:
- role: test-role
tags:
- a
我不确定您的设置,但是使用import_role一直对我有效:
- hosts: vpc
tasks:
- import_role:
name: test-role
tags:
- a
但这对您可能没有任何影响。希望这会有所帮助。