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'] }} "
我正在尝试通过执行下面的 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'] }} "