You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible 2.9用loop替代with_dict报错,需任务传值该如何处理?

解决Ansible 2.9中loop替代with_dict的模板错误问题

不用换回with_dict,你的问题出在loop的语法写法错误,调整后即可正常使用loop。

错误原因

你在Jinja2模板中直接写{{ key:/var/tmp/a value:/tmp/h |dict2items }}是语法错误:

  • Jinja2表达式里定义字典必须用{}包裹键值对,且字符串类型的键/值需要加引号
  • dict2items过滤器的正确用法是传入一个完整字典,而非零散的键值对

正确写法示例

写法1:直接定义字典列表(推荐,直观易读)

- name: copy module
  copy: 
    src: "{{ item.src }}"
    dest: "{{ item.dest }}"
  loop:
    - { src: "/var/tmp/a", dest: "/tmp/h" }
    - { src: "/var/tmp/b", dest: "/tmp/z" }

写法2:保持key/value键名,用列表包裹字典

- name: copy module
  copy: 
    src: "{{ item.key }}"
    dest: "{{ item.value }}"
  loop:
    - { key: "/var/tmp/a", value: "/tmp/h" }
    - { key: "/var/tmp/b", value: "/tmp/z" }

写法3:用dict2items过滤器转换字典

如果更倾向于用键值对字典的形式,可以先定义完整字典再通过dict2items转成loop可用的列表:

- name: copy module
  copy: 
    src: "{{ item.key }}"
    dest: "{{ item.value }}"
  loop: "{{ { '/var/tmp/a': '/tmp/h', '/var/tmp/b': '/tmp/z' } | dict2items }}"

以上三种写法都能在Ansible 2.9中正常运行,无需退回with_dict。

内容的提问来源于stack exchange,提问作者Eva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 11:27:04