我正在尝试使用ansible来确定哪些路径存在,然后只执行一个存在的路径(它不仅仅是下面示例中的copy
,而且还可以进一步编辑这条线)。
这是我想到的 - 这是第二次迭代,我在第二个任务中使用with_item
无法得到任何东西。
- name: disable plasma - identify files to act on
stat:
path: "{{ item }}"
register:
plasma_conf
with_items:
- "/usr/share/autostart/plasma-desktop.desktop"
- "/usr/share/autostart/plasma-netbook.desktop"
- "/etc/xdg/autostart/plasmashell.desktop"
- name: disable plasma - copy config locally
copy:
src: "{{ item.item }}"
dest: "/home/{{ main_user }}/.config/autostart/{{ item.item | basename }}"
with_dict:
plasma_conf.results
when:
item.stat.exists == true
复制任务因fatal: [localhost] => with_dict expects a dict
而失败。如何根据dict
提供的stat
结构进行此工作?
答案 0 :(得分:1)
感谢所有评论 - debug
和with_items
之前曾在多次迭代中使用过,但未能产生我想要的输出。我回去了,使用了经过尝试和真实的“废弃一切,从头开始”的方法,使用以下简约,自包含的例子:
---
- hosts:
localhost
tasks:
- name:
create testing infrastructure a)
file:
path: "/tmp/{{ item }}"
state: touch
mode: 744
with_items:
- testFileA
- testFileB
- name:
create testing infrastructure b)
file:
path: "/tmp/testDir"
state: directory
mode: 744
- name:
identify files to act on
stat:
path: "{{ item }}"
register:
files2move
with_items:
- "/tmp/testFileA"
- "/tmp/testFileB"
- "/tmp/testFileC"
- name:
copy available files
copy:
src: "{{ item.item }}"
dest: "/tmp/testDir/{{ item.item | basename }}"
mode: 640
with_items:
files2move.results
when:
item.stat.exists == true
我现在真的不知道有什么不同,但这很有用 - 无论是在极简主义版本还是移植到我的代码中......
答案 1 :(得分:0)
plasma_conf.results
是统计词典列表。使用with_dict
替换第二项任务中的with_items
。请参阅http://docs.ansible.com/ansible/playbooks_loops.html#using-register-with-a-loop,当然还有udondan建议的调试输出。