我有一个我想多次执行的角色,每次执行都有一个不同的变量。但是,我也希望其中一些处决是有条件的。
这是一个 main.yml:
- hosts: localhost
roles:
- { role: test, test_files_group: 'a'}
- { role: test, test_files_group: 'b', when: False}
这是来自“测试”角色 ( ) 的 main.yml roles/test/tasks/main.yml
:
- name: List files
command: "find . ! -path . -type f"
args:
chdir: "{{ role_path }}/files/{{ test_files_group }}"
register: files
- debug: var=files.stdout_lines
- name: do something with the files
shell: "echo {{ item }}"
with_items: "{{ files.stdout_lines }}"
这是 ansible-playbook 命令输出的一部分:
TASK [test : List files]
*******************************************************
changed: [localhost]
TASK [test : debug] ************************************************************
ok: [localhost] => {
"files.stdout_lines": [
"./testfile-a"
]
}
TASK [test : do something with the files] **************************************
changed: [localhost] => (item=./testfile-a)
TASK [test : List files] *******************************************************
skipping: [localhost]
TASK [test : debug] ************************************************************
skipping: [localhost]
TASK [test : do something with the files] **************************************
fatal: [localhost]: FAILED! => {"failed": true, "msg": "'dict object' has no attribute 'stdout_lines'"}
一切都按预期适用于“a”,但随后do something with the files
为 b 执行任务,即使我设置了when: False
.
我觉得我错过了一些东西 - 我想要的是roles/test/tasks/main.yml
用相应的 var 设置执行所有内容test_files_group
,或者根本不执行。我究竟做错了什么?:)