yq 替换清单 yaml 中的值

我在下面有一个用于负载均衡器的 k8s 清单文件,并且在我的一生中无法将 $ipaddress 替换为值,我必须覆盖整个文件或部分文件,甚至只是留空。如何仅替换 $ipaddress 如下所示

尝试如下例 2:

yq e '.spec|=select(.loadBalancerIP) .ports.port = "172.16.87.98"' manifest.yaml
yq e -i '(.spec|=select(.loadBalancerIP.$ipaddress) = "172.16.87.98"' manifest.yaml
  apiVersion: v1
    kind: Service
    metadata:
      name: my-lb-cluster
    spec:
      loadBalancerIP: $ipaddress
      ports:
        - name: ssl
          port: 8080
      selector:
        role: webserver
      sessionAffinity: None
      type: LoadBalancer
stack overflow yq replace value in manifest yaml
原文答案
author avatar

接受的答案

如果 YAML 和您的问题一样简单,您可以使用:

yq e -i '.spec.loadBalancerIP = "172.16.87.98"' manifest.yaml

更新 manifest.yaml 并将 .loadBalancerIP 中的 .spec 设置为 "172.16.87.98"


答案:

作者头像

我知道已经很晚了,但是如果您想从变量中传递值,这会有所帮助。

export LB_IP=1.1.1.1

yq e -i '.spec.loadBalancerIP= env(LB_IP)' manifest.yaml