如何解决如何使用yq在条件下修补多文档yaml文件?
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 的版本使用 mikefarah/yq,您可以对所需文档执行 select
和更新 |=
操作
yq e 'select(.kind == "NetworkPolicy").apiVersion |= "networking.k8s.io/v1beta1"' yaml
以上在 yq version 4.6.0
上运行良好。使用 -i
标志就地替换文件。
鉴于其他解决方案会有所帮助 - 另一种解决方案是使用 kustomize:
- 创建 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 .
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。