我正在尝试替换 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 文件内容。如果我遇到语法错误。
运算符优先级很重要。您可以通过括号强制计算顺序:
yq e '(.spec.groups[] | select(.name == "deep_learning") | .items[] | select(.name == "triton_release_version") | .default) = "new_release_version"' config.yaml