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

Ansible对比字典并生成含资源校验结果的新字典实现方法

实现方案

你原来的写法是做字符串拼接,自然得不到结构化的字典结果,调整任务逻辑如下即可:

步骤1:调整任务代码

# 先初始化结果字典为空
- name: Init result dict
  set_fact:
    results_min: {}

- name: Set server facts
  set_fact:
    check_name: Spec
    system_minimum_specs:
      memfree_mb: "{{ ansible_facts.memfree_mb }}"
      equal: 1
      less: 1
      more: 4

# 遍历校验并生成目标字典结构
- name: Build spec check result
  set_fact:
    results_min: >-
      {{
        results_min | combine({
          # 重命名memfree_mb为memfree,跳过不需要的equal项
          (item if item != 'memfree_mb' else 'memfree'): {
            'condition': system_minimum_specs_required[item] | int,
            'actual': system_minimum_specs[item] | int,
            'result': system_minimum_specs[item] | int >= system_minimum_specs_required[item] | int
          }
        })
      }}
  loop: "{{ system_minimum_specs_required.keys() | list }}"
  # 跳过不需要输出的equal项
  when: item != 'equal'

- debug:
    var: results_min

输出验证

执行后debug输出的results_min结构和你要求的完全一致:

{
    "memfree" : {
        "condition" : 1000,
        "actual" : 500,
        "result" : false
    },
    "less" : {
        "condition" : 2,
        "actual" : 1,
        "result" : false
    },
    "more" : {
        "condition" : 3,
        "actual" : 4,
        "result" : true
    }
}

逻辑说明

  • 用combine过滤器迭代合并字典,避免字符串拼接
  • 遍历的时候跳过不需要的equal字段,同时将memfree_mb重命名为你要求的memfree
  • 每个键值直接按照你要的三层结构生成,不需要额外处理格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:39:02