2

让 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,但其他解决方案也会有所帮助。

4

2 回答 2

5

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

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

以上工作正常yq version 4.6.0。使用该-i标志就地替换文件。

于 2021-03-03T05:54:38.477 回答
0

鉴于其他解决方案会有所帮助 - 另一种解决方案是使用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

kustomize build | kubectl apply -f -

或者

kubectl apply -k .
于 2021-03-05T11:12:26.200 回答