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

Ansible任务中用Jinja2循环生成filters列表报错求助

解决Ansible动态生成fortios_webfilter_profile的filters列表报错问题

错误原因

你使用YAML块标符|生成filters内容,导致Jinja2循环输出的是字符串类型,但fortios_webfilter_profile模块要求filters是列表(数组)结构,模块无法将字符串解析为字典/列表,因此抛出"msg": "dictionary requested, could not parse JSON or key=value"错误。

正确写法

直接在YAML结构中用Jinja2循环生成列表,保持原生数据类型,不需要块字符串:

方案1:原生Jinja2循环

vars:
  category_info:
    1: block
    2: block

tasks:
  - fortios_webfilter_profile:
      state: "present"
      webfilter_profile:
        name: "default"
        ftgd_wf:
          filters:
            {% for category_id, category_action in category_info.items() %}
            - id: {{ category_id }}
              action: {{ category_action }}
            {% endfor %}

方案2:列表推导式(更简洁)

借助community.general集合的dict_kv过滤器,一键转换键值对为目标字典结构:

vars:
  category_info:
    1: block
    2: block

tasks:
  - fortios_webfilter_profile:
      state: "present"
      webfilter_profile:
        name: "default"
        ftgd_wf:
          filters: "{{ category_info.items() | map('community.general.dict_kv', 'id', 'action') | list }}"

注意:使用此方案前需确保已安装community.general集合,执行命令安装:ansible-galaxy collection install community.general

注意事项

  • 严格保持Jinja2循环的缩进与YAML结构一致,避免缩进错误导致YAML解析失败
  • 生成结构化数据(列表/字典)时,禁止使用块字符串|,必须直接在YAML中构建数据类型
  • 如果使用方案2,需确认目标环境已安装对应Ansible集合

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:33:06