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

Ansible中如何按指定系统键转换packages字典结构?

Ansible 字典转换解决方案

你需要在dict2items与items2dict之间添加的过滤器链如下:

selectattr('value', 'has_key', package_key) | map('json_query', '{key: key, value: value.' ~ package_key ~ '}')

完整任务代码

- name: Transformation
  debug:
    msg: "{{ packages | dict2items | selectattr('value', 'has_key', package_key) | map('json_query', '{key: key, value: value.' ~ package_key ~ '}') | items2dict }}"

步骤说明

  1. selectattr('value', 'has_key', package_key):筛选出包含当前发行版(示例中为ubuntu)子项的应用条目,直接排除无对应发行版配置的项(比如示例里的cowsay)。
  2. map('json_query', '{key: key, value: value.' ~ package_key ~ '}'):对筛选后的每个条目做结构转换,保留原应用名称作为key,将value替换为对应发行版下的包列表。通过字符串拼接动态指定package_key对应的子键,适配不同发行版变量。
  3. items2dict:把处理后的列表格式重新转为字典,得到目标结构。

结果验证

当package_key为ubuntu时,最终输出的内容会与你期望的transformed_packages完全一致:

{
    "openssh-server": ["pkg3"],
    "app-armor": ["pkg6", "pkg7"]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:00:04