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

2024-09-29 22:35:00 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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
    }
}

Tags: mastercom字典exampleokmsgcpu解决方案
3条回答

嵌套循环应该可以工作

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}}

这可能是一种选择:

- 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

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

- 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}}"

相关问题 更多 >

    热门问题