Ansible loop error: "Invalid data passed to 'loop', it requires a list, got this instead

Ansible loop error: "Invalid data passed to 'loop', it requires a list, got this instead

我正在尝试通过执行下面的 ansible 剧本来下载远程服务器中的图像,但是我遇到了以下错误。谁能帮我解决这个问题。

Ansible 剧本:

name: download images from http
hosts: target1
tasks:
  - name: download the images
    get_url:
      url: "{{ item }}"
      dest: /home/ubuntu
    when: ansible_user== 'ubuntu'
    loop: "{{lookup('file', '/home/ubuntu/file.txt')}}"

错误:

致命:[target1]:失败! => {"msg": "传递给 'loop' 的无效数据,它需要一个列表,得到这个:https://test.s3.eu-central-1.amazonaws.com/gm.mp4\nhttps://test.s3.eu-central-1.amazonaws.com/ge.mp4 提示:如果你只传递了一个元素的 list/dict,尝试添加wantlist=True 到你的查找调用或使用 q/query 而不是查找。"}

file.txt:

https://test.s3.eu-central-1.amazonaws.com/gm.mp4
https://test.s3.eu-central-1.amazonaws.com/ge.mp4

分割线

    loop: "{{ lookup('file', '/home/ubuntu/file.txt').split('\n')  }}"

下一个选项是lines查找插件

    with_lines: cat /home/ubuntu/file.txt

我有一个类似的问题,在一个对象中有一个项目,得到与你完全相同的错误。在 Ubuntu 20.04 或 MacOS Big Sur 上,这根本不是问题。 另一方面,Ubuntu 18.04 是另一回事。

所以对于那些试图让它工作的人来说,你可以考虑检查你的 python 版本。 Python 3.6 不支持单条目列表,您需要升级到 Python 3.8(目前)。

在使用循环解析 ansible_facts 内的字典项列表时出现错误。

调试:消息:“{{项目}}”循环:“{{ansible_facts['mounts']}}”

错误:人:[本地主机]:失败! => {"msg": "传递给 'loop' 的无效数据,它需要一个列表,得到这个:[{'mount': '/', 'device': '/dev/sda6', 'fstype': 'ext4', 'options': 'rw,relatime,errors=remount-ro', 'size_total': 58788249600, 'size_available': 40204759040, 'block_size': 4096 ,如果您只传递了一个元素的 list/dict,请尝试将 wantlist=True 添加到查找调用中或使用 q/query 而不是查找。"}

尝试了多种解决方案,最终下面的代码有效,将循环替换为 with_items

#解决方案:千辛万苦终于成功了

name: collect disk data 
debug: 
 msg: "{{ item }}" 

#loop:“{{ ansible_facts['mounts'] }}” with_items: " {{ ansible_facts['mounts'] }} "