yq 解析器中用于更新脚本的条件语句

问题描述 投票:0回答:1

我正在尝试替换 yaml 文件中的字符串值,但无法让

if
正常工作。

YAML 文件

apiVersion: kots.io/v1beta1
kind: Config
metadata:
  name: enterprise
spec:
  groups:
    - name: api_authorization
      title: API Authorization
      items:
        - name: api_key
          title: API Key
          type: password
          required: true
        - name: workspace_id
          title: Workspace ID
          type: text
          required: true
    - name: deep_learning
      title: Deep Learning
      description: Deep Learning Service Options
      items:
        - name: triton_release_options
          title: Release Options
          type: heading
        - name: triton_release_version
          title: Triton Release Version
          type: text
          default: "release-v308" ## Shoudl be updated when the triton release is true
          required: true
        - name: tracker_release_version
          title: Tracker Version
          type: text
          default: "release-v308" ## Shoudl be updated when the tracker is being build as part of the component
          required: true

我尝试了以下方法,但没有成功

yq e '.spec.groups[] |= if .name == "deep_learning" then (.items[] | select(.name == "triton_release_version").default = "new_release_version") else . end' config.yaml
yq e '.spec.groups[] | select(.name == "deep_learning") | .items[] | select(.name == "triton_release_version").default = "new_release_version"' config.yaml

我可以更新,但是如果我不使用 if 条件,我就会丢失整个 yaml 文件内容。如果我遇到语法错误。

yaml jq yq
1个回答
0
投票

运算符优先级很重要。您可以通过括号强制计算顺序:

yq e '(.spec.groups[] | select(.name == "deep_learning") | .items[] | select(.name == "triton_release_version") | .default) = "new_release_version"' config.yaml
© www.soinside.com 2019 - 2024. All rights reserved.