yaml - 打印键和值,如果值满足条件

yaml - Print key and value, if value meets consitions

给定以下 yaml:

charts:
  # repository with Helm charts for creation namespaces
  path: ns
  pathMonitoringPrometheus: prom

namespaces:
  first:
    description: "Description of first"
    enabled: false
    branch: master
    bootstrapChart: bootstrap
    syncAccessGroups: []
    namespace:
      role: k8s-role-of-first
      istio: disabled
      public: view
    sources: []

  second:
    description: "Description of second"
    enabled: false
    branch: HEAD
    bootstrapChart: bootstrap
    namespace:
      role: k8s-role-of-second
      istio: 1-13-2
      labels:
        label: second
    sources:
      - http://url.of.second

如果 namespaces 与“已禁用”不同,我们如何获得 namespaces 及其 istio 值的列表。

我们正在尝试使用“yq”工具,但我想任何方法都可以,尽管“yq”是首选方法。

second, 1-13-2 

使用 kislyuk/yq,您可以将过滤器基于 jq

  • to_entries 将对象拆分为 key-value 对
  • 的数组
  • select 选择符合您条件的项目
  • String interpolation-r 选项相结合可以得到您想要的输出
yq -r '
  .namespaces
  | to_entries[]
  | select(.value.namespace.istio != "disabled")
  | "\(.key), \(.value.namespace.istio)"
'
second, 1-13-2

使用 mikefarah/yq 过滤器非常相似。

  • to_entries[] 必须拆分 to_entries | .[]
  • 使用 join 和数组
  • 替换字符串插值
yq '
  .namespaces
  | to_entries | .[]
  | select(.value.namespace.istio != "disabled")
  | [.key, .value.namespace.istio] | join(", ")
'
second, 1-13-2

这样做:

cat  /path/tp/your.yaml |yq -r  '.namespaces | to_entries[] | "\(.key)  \(.value.namespace.istio)"'`

结果:

first  disabled
second  1-13-2