【问题标题】:How to patch multi document yaml file on condition using yq?如何使用 yq 在条件下修补多文档 yaml 文件?
【发布时间】:2021-06-01 09:58:52
【问题描述】:

有类似的 YAML 文档:

---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-scraping
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: allow-webhooks

我正在尝试获得类似的东西

---
apiVersion: **networking.k8s.io/v1beta1**
kind: NetworkPolicy
metadata:
  name: allow-scraping
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: allow-webhooks

所以基本上获取文档,如果文档有kind: NetworkPolicy,则修补apiVersion: networking.k8s.io/v1beta1

理想情况下只有一个班轮,最好使用 yq v4,但其他解决方案也会有所帮助。

【问题讨论】:

    标签: kubernetes yaml yq


    【解决方案1】:

    在超过 4 的版本上使用 mikefarah/yq,您可以对所需文档执行 select 并更新 |= 操作

    yq e 'select(.kind == "NetworkPolicy").apiVersion |= "networking.k8s.io/v1beta1"' yaml
    

    以上在yq version 4.6.0 上运行良好。使用-i 标志就地替换文件。

    【讨论】:

      【解决方案2】:

      鉴于其他解决方案会有所帮助 - 另一种解决方案是使用 kustomize

      1. 创建 kustomization.yaml 文件:
      apiVersion: kustomize.config.k8s.io/v1beta1
      kind: Kustomization
      resources:
      - network-policy.yaml
      patches:
        - target:
            kind: NetworkPolicy
            group: networking.k8s.io
            version: v1
          patch: |
            - op: replace
              path: /apiVersion
              value: networking.k8s.io/v1beta1
      
      
      1. 运行
      kustomize build | kubectl apply -f -
      

      kubectl apply -k .
      

      【讨论】:

        猜你喜欢
        • 2021-12-17
        • 1970-01-01
        • 1970-01-01
        • 2020-12-30
        • 1970-01-01
        • 1970-01-01
        • 2022-01-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多