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

如何在Ansible的set_fact调用中将sessions转换为sessions_flat?

Ansible实现嵌套字典扁平化生成sessions_flat

可以通过subelements过滤器结合set_fact循环拼接的方式实现,以下是具体的Playbook任务:

- name: 生成扁平化的sessions_flat列表
  set_fact:
    sessions_flat: "{{ sessions_flat | default([]) + [{'oid': item.0.name ~ '-' ~ item.1.name, 'password': item.1.password, 'port': item.1.port}] }}"
  loop: "{{ sessions | subelements('vpns') }}"

实现说明:

  1. subelements过滤器:将双层嵌套的sessions结构展开,把每个客户端条目和其下属的vpn条目配对,生成形如(客户端字典, VPN字典)的元组列表。
  2. 循环构建条目:遍历每个元组,用~运算符拼接客户端名称和VPN名称作为oid字段,同时保留VPN原有的password和port字段,生成目标格式的字典。
  3. 列表追加:通过default([])初始化空列表,每次循环将新生成的字典追加到sessions_flat中,最终得到完整的扁平化列表。

备选方案(使用json_query):

如果偏好使用JMESPath查询,可以用以下方式实现:

- name: 用json_query实现扁平化
  set_fact:
    sessions_flat: "{{ sessions | json_query('[].{client: name, vpns: vpns} | [] | [].vpns[] | [].{oid: join([client, name], \"-\"), password: password, port: port}') }}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:02:34