如何在Ansible中将注册变量作为数组传递?

问题描述 投票:-1回答:2

我试图列出目录中的文件并复制到其他目录。

这是我的剧本:

---
- 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对象'没有属性'结果'”}

ansible
2个回答
1
投票

你有一个debug任务,显示变量r的内容。你看到一个名为results的钥匙吗?

results所述,当你在循环中注册了值时,你只能看到item.item键(并且需要使用here)。你没有这样做,所以r的结构会简单得多。

如果你试图迭代ls输出的行,你可能想要:

- debug: 
    msg: "filename={{item}}"
  with_items: "{{r.stdout_lines}}"

1
投票

我试图列出目录中的文件并复制到其他目录。

  1. Don't parse ls output!既不在Ansible,也不在其他任何地方。
  2. 不要使用command模块来解决Ansible提供的本地模块。

Ansible有一个find module,它返回一个文件列表。在你的情况下:

- name: list files
  find:
    paths: /root
  register: my_find

- debug:
    var: item.path
  with_items: "{{ my_find.files }}"
© www.soinside.com 2019 - 2024. All rights reserved.