Python Ansible:在嵌套字典中添加值,然后插入到另一个字典中

Python Ansible:在嵌套字典中添加值,然后插入到另一个字典中,python,ansible,Python,Ansible,我正在迭代下面的字典字典,希望添加嵌套字典的值并将它们插入到另一个字典中 主节点 ok: [127.0.0.1] => { "msg": { "master01.example.com": { "cpu_total": 8, "cpu_used": 0.22 }, "master02.example

我正在迭代下面的字典字典,希望添加嵌套字典的值并将它们插入到另一个字典中

主节点

ok: [127.0.0.1] => {
    "msg": {
        "master01.example.com": {
            "cpu_total": 8,
            "cpu_used": 0.22
        },
        "master02.example.com": {
            "cpu_total": 8,
            "cpu_used": 0.27
        },
        "master03.example.com": {
            "cpu_total": 8,
            "cpu_used": 0.22
        }
    }
}
我正在尝试类似的事情,并努力想出一个解决方案

-名称:主节点的总节数
设定事实:
total_master:“{(total_master{默认值({}))|组合({'total_cpu':total_cpu+(item.value.cpu_total{int)}}”
使用{dict:{{master_nodes}}”
我试图在
total\u master中实现的目标

ok: [127.0.0.1] => {
    "msg": {
        "total_cpu": 24,
        "total_used_cpu": 0.71
    }
}

嵌套循环应该可以工作

sum1 = 0
sum2 = 0
for val in dict.values():
    for val1 in val.values():
        sum1+=val1['cpu_total']
        sum2+=val1['cpu_used']

result = 
{
    "msg": {
         "total_cpu": sum1,
         "total_used_cpu": sum2 
    }
}   

print(result)
输出:

{'msg': {'total_cpu': 24, 'total_used_cpu': 0.71}}

嵌套循环应该可以工作

sum1 = 0
sum2 = 0
for val in dict.values():
    for val1 in val.values():
        sum1+=val1['cpu_total']
        sum2+=val1['cpu_used']

result = 
{
    "msg": {
         "total_cpu": sum1,
         "total_used_cpu": sum2 
    }
}   

print(result)
输出:

{'msg': {'total_cpu': 24, 'total_used_cpu': 0.71}}

这可能是一种选择:

-设置事实:
结果:{result | default({})| combine({item:master_nodes | json_query('@.*')| sum(attribute=item)}}
循环:
-cpu_总数
-使用的cpu
-调试:
var:结果
给予

ok:[localhost]=>
结果:
中央处理器总数:24
使用的cpu_:0.71

另一种味道

-设置事实:
结果:“{{
'total_cpu':主节点| json_查询('@.*.cpu_total')| sum(),
'total_cpu_used':主节点| json_查询('@.*.cpu_used')| sum()
} }}"
-调试:
var:结果
给予

ok:[localhost]=>
结果:
cpu总数:24
使用的cpu总量:0.71

这可能是一个选项:

-设置事实:
结果:{result | default({})| combine({item:master_nodes | json_query('@.*')| sum(attribute=item)}}
循环:
-cpu_总数
-使用的cpu
-调试:
var:结果
给予

ok:[localhost]=>
结果:
中央处理器总数:24
使用的cpu_:0.71

另一种味道

-设置事实:
结果:“{{
'total_cpu':主节点| json_查询('@.*.cpu_total')| sum(),
'total_cpu_used':主节点| json_查询('@.*.cpu_used')| sum()
} }}"
-调试:
var:结果
给予

ok:[localhost]=>
结果:
cpu总数:24
使用的cpu总量:0.71

感谢您的回复。我就是这样做的

- name: Total section for master nodes
  set_fact:
    master_cpu: "{{ (master_cpu|float) + (item.value.cpu_total|float)}}"
    master_cpu_used: "{{ (master_cpu_used|float |round(2,'ceil')) + (item.value.cpu_used|float |round(2,'ceil'))}}"
  with_dict: "{{master_nodes}}"

谢谢你的回复。我就是这样做的

- name: Total section for master nodes
  set_fact:
    master_cpu: "{{ (master_cpu|float) + (item.value.cpu_total|float)}}"
    master_cpu_used: "{{ (master_cpu_used|float |round(2,'ceil')) + (item.value.cpu_used|float |round(2,'ceil'))}}"
  with_dict: "{{master_nodes}}"

谢谢你的回复,但我想在我的ansible剧本中这样做。我已经附上了样品。谢谢你的回复,但我想在我的ansible剧本中这样做。我已附上样品。