首页 > 解决方案 > 如何在ansible中获取嵌套变量的值

问题描述

我正在尝试从下面的文件中一一获取警报的值,以执行某些操作。有没有办法这样做?

        apiVersion: monitoring.coreos.com/v1
        kind: PrometheusRule
        metadata:
          labels:
            prometheus: k8s
            role: alert-rules
            app: prometheus-operator
            release: prometheus-operator
          annotations:
            exclude.release.openshift.io/internal-openshift-hosted: "true"
          creationTimestamp: "2020-04-22T09:22:14Z"
          generation: 1
          name: free-memory-percentage
          namespace: openshift-monitoring
          selfLink: /apis/monitoring.coreos.com/v1/namespaces/openshift-cloud-credential-operator/prometheusrules/cloud-credential-operator-alerts
        spec:
          groups:
          - name: free-memory
            rules:
            - alert: node_mem_free_Percentage
              annotations:
                description: Node memory is under pressure
              expr: 100 - (100 * node_memory_MemFree_bytes / node_memory_MemTotal_bytes) < 50
              for: 2m
          - name: High-CPU-Usage
            rules:
            - alert: HighCPUUsage4test
              annotations:
                description: CPU usage is above the 0% threshold
              expr: (100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)) > 0
              for: 2m

标签: jsonansibleyaml

解决方案


问:“从文件中一一获取警报值。”

答:使用json_query。给定file.yml变量,下面的任务

    - include_vars:
        file: file.yml
        name: my_data
    - set_fact:
        my_alerts: "{{ my_data.spec.groups|json_query('[].rules[].alert') }}"
    - debug:
        var: my_alerts

  my_alerts:
  - node_mem_free_Percentage
  - HighCPUUsage4test

推荐阅读