【问题标题】:Ansible if else while iterating over a dictionaryAnsible if else 在迭代字典时
【发布时间】:2020-07-01 04:35:11
【问题描述】:

我有一本使用 prometheus 从 openshift 收集数据的字典。现在我打算在所有字典中添加值。但是有些项目没有配额,因此有些 pod 没有为 cpu 和内存设置请求/限制。我正在尝试以下操作,如果 key:value 不存在,它会失败。

如果可能我想使用 if else 这样,如果变量存在然后添加变量 else 使用值作为 0。

- name: Total section for Projects
  set_fact:
    pod_count_total: "{{ (pod_count_total|int) + (item.value.pod_count|int)}}"
    total_cpu_request: "{{ (total_cpu_request|float |round(2,'ceil')) + (item.value.cpu_request|float |round(2,'ceil'))}}"
    total_cpu_limit: "{{ (total_cpu_limit|float |round(2,'ceil')) + (item.value.cpu_limit|float |round(2,'ceil'))}}"
    total_memory_request: "{{ (total_memory_request|float |round(2,'ceil')) + (item.value.memory_request|float |round(2,'ceil'))}}"
    total_memory_limit: "{{ (total_memory_limit|float |round(2,'ceil')) + (item.value.memory_limit|float |round(2,'ceil'))}}"
  with_dict: "{{all_project}}"

字典就像字典

ok: [127.0.0.1] => {
    "msg": {
        "openshift-web-console": {
            "cpu_usage": 0.015,
            "memory_used": 0.04,
            "cpu_request": 0.301,
            "memory_request": 0.293,
            "pod_count": 3
        },
        "srv-test": {
            "cpu_usage": 0.013,
            "memory_used": 0.02,
            "pod_count": 5
        },
        "test": {
            "cpu_usage": 0.001,
            "memory_used": 0.0,
            "pod_count": 1
        },
        "openshift-monitoring": {
            "cpu_limit": 1.026,
            "cpu_request": 0.556,
            "cpu_usage": 0.786,
            "memory_limit": 1.866,
            "memory_request": 1.641,
            "memory_used": 0.14,
            "pod_count": 98
        }
    }
}

【问题讨论】:

标签: ansible openshift prometheus


【解决方案1】:

如果可能我想使用 if else 这样,如果变量存在然后添加变量 else 使用值作为 0。

你要找的是the default filter

    total_memory_request: "{{ (
        total_memory_request | default(0) 
        | float | round(2,'ceil')
        ) + (
        item.value.memory_request | default(0) 
        | float | round(2,'ceil')
        ) }}"

如果变量 存在 但为空字符串,则需要将第二个参数传递给 default 以使其以 Python“真实性”方式运行:{{ "" | default(0, true) | float }} -- 这可能不适用于您,但如果适用,您会很高兴知道第二个参数的作用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 2019-04-16
    相关资源
    最近更新 更多