我正在遍历以下字典,并希望添加嵌套字典的值并将其插入到另一个字典中。
master_nodes
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
}
}
}
我正在尝试类似的事情,并且努力设计解决方案。
- name: Total section for master nodes
set_fact:
total_master: "{{ (total_master | default({}))| combine({ 'total_cpu' : total_cpu+(item.value.cpu_total|int) }) }} "
with_dict: "{{ master_nodes }}"
我正在尝试在total_master
ok: [127.0.0.1] => {
"msg": {
"total_cpu": 24,
"total_used_cpu": 0.71
}
}
答案 0 :(得分:2)
这可能是一个选择:
- set_fact:
result: "{{ result | default({}) | combine({ item: master_nodes | json_query('@.*') | sum(attribute=item)}) }}"
loop:
- cpu_total
- cpu_used
- debug:
var: result
给予
ok: [localhost] =>
result:
cpu_total: 24
cpu_used: 0.71
另一种味道
- set_fact:
result: "{{ {
'total_cpu': master_nodes | json_query('@.*.cpu_total') | sum(),
'total_cpu_used': master_nodes | json_query('@.*.cpu_used') | sum()
} }}"
- debug:
var: result
给予
ok: [localhost] =>
result:
total_cpu: 24
total_cpu_used: 0.71
答案 1 :(得分:0)
嵌套循环应该起作用。
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}}
答案 2 :(得分:0)
感谢您的答复。这就是我的方法。
- 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}}"