我试图列出目录中的文件并复制到其他目录。
这是我的剧本:
---
- hosts: testserver
become: true
tasks:
- name: list files
command: " ls /root/"
register: r
- debug: var=r
- debug: msg="item.item={{item.item}}, item.stdout={{item.stdout}}, item.changed={{item.changed}}"
with_items: "{{r.results}}"
这是我得到的错误:
失败! => {“msg”:“'dict对象'没有属性'结果'”}
你有一个debug
任务,显示变量r
的内容。你看到一个名为results
的钥匙吗?
如results
所述,当你在循环中注册了值时,你只能看到item.item
键(并且需要使用here)。你没有这样做,所以r
的结构会简单得多。
如果你试图迭代ls
输出的行,你可能想要:
- debug:
msg: "filename={{item}}"
with_items: "{{r.stdout_lines}}"
我试图列出目录中的文件并复制到其他目录。
ls
output!既不在Ansible,也不在其他任何地方。command
模块来解决Ansible提供的本地模块。Ansible有一个find
module,它返回一个文件列表。在你的情况下:
- name: list files
find:
paths: /root
register: my_find
- debug:
var: item.path
with_items: "{{ my_find.files }}"