Tener un documento YAML algo como:
--- apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-scraping --- apiVersion: apps/v1 kind: Deployment metadata: name: allow-webhooksEstoy tratando de obtener algo como
--- apiVersion: **networking.k8s.io/v1beta1** kind: NetworkPolicy metadata: name: allow-scraping --- apiVersion: apps/v1 kind: Deployment metadata: name: allow-webhooks Entonces, básicamente, obtenga el documento, si el documento tiene kind: NetworkPolicy , luego apiVersion: networking.k8s.io/v1beta1 .
Idealmente, una línea, idealmente con yq v4, pero otras soluciones también serán útiles.
Con mikefarah/yq en versiones posteriores a la 4, puede realizar una operación de select y actualización |= en el documento requerido
yq e 'select(.kind == "NetworkPolicy").apiVersion |= "networking.k8s.io/v1beta1"' yaml Lo anterior funciona bien en yq version 4.6.0 de yq. Use el indicador -i para reemplazar el archivo en el lugar.
Dado que otras soluciones serán útiles, una solución alternativa sería usar kustomize :
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 -o
kubectl apply -k .