Python 在ansible中迭代字典

Python 在ansible中迭代字典,python,ansible,openshift,prometheus,Python,Ansible,Openshift,Prometheus,我正在OpenShift环境中使用ansible从prometheus获取数据。我正在创建一个类似以下输出的字典。现在我需要迭代这个字典来计算CPU使用率百分比(我知道有普罗米修斯的指标),比如CPU使用率*100/CPU总数 我试着使用和项目:但是项目。“任何东西”都失败 ok: [127.0.0.1] => { "msg": { "machine-infra01": { "cpu_total": 8, "cpu_u

我正在OpenShift环境中使用ansible从prometheus获取数据。我正在创建一个类似以下输出的字典。现在我需要迭代这个字典来计算CPU使用率百分比(我知道有普罗米修斯的指标),比如CPU使用率*100/CPU总数

我试着使用
和项目:
但是
项目。“任何东西”
都失败

ok: [127.0.0.1] => {
    "msg": {
        "machine-infra01": {
            "cpu_total": 8,
            "cpu_used": 0.23
        },
        "machine-infra02": {
            "cpu_total": 12,
            "cpu_used": 0.3
        },
        "machine-infra03": {
            "cpu_total": 12,
            "cpu_used": 0.44
        },
        "machine-master01": {
            "cpu_total": 8,
            "cpu_used": 0.21
        }   
    }
}

您可以执行类似的操作,迭代您的字典,构建一个包含
cpu\u%值的新字典,然后递归地将其与原始值合并:

  vars:
    data: "{{ lookup('file', 'foo.json') | from_json }}"
    percents: {}

  tasks:
    - set_fact:
        percents: "{{ percents | combine({ item.key : { 'cpu_percent': item.value.cpu_used*100/item.value.cpu_total }}) }}"
      with_dict: "{{ data }}"
    - set_fact:
        data: "{{ data | combine(percents, recursive=True) }}"
    - debug:
        var: data
输出:

ok: [localhost] => {
    "data": {
        "machine-infra01": {
            "cpu_percent": 2.875, 
            "cpu_total": 8, 
            "cpu_used": 0.23
        }, 
        "machine-infra02": {
            "cpu_percent": 2.5, 
            "cpu_total": 12, 
            "cpu_used": 0.3
        }, 
        "machine-infra03": {
            "cpu_percent": 3.6666666666666665, 
            "cpu_total": 12, 
            "cpu_used": 0.44
        }, 
        "machine-master01": {
            "cpu_percent": 2.625, 
            "cpu_total": 8, 
            "cpu_used": 0.21
        }
    }
}

听起来您可能需要将
与_dict
或新循环结构一起使用,具体取决于Ansible版本。