我想使用 yq 在下面的 yaml 文件中的 namespaceAdmin、namespaceDebugger 中添加一个条目。基本上它有多个补丁,我想对一些 helmrelease 补丁进行更改。这可能吗?
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: test
namespace: flux-system
spec:
interval: 10m0s
dependsOn:
- name: infra
sourceRef:
kind: GitRepository
name: applications
prune: true
postBuild:
substitute:
test: "dev"
patches:
- patch: |-
apiVersion: v1
kind: Namespace
metadata:
name: test
labels:
app-name: test
- patch: |-
apiVersion: helm.toolkit.fluxcd.io/v2beta2
kind: HelmRelease
metadata:
name: test
spec:
values:
ingress:
ipAddress: "11.22.333.33"
roleBinding:
namespaceAdmin:
- [email protected]
- [email protected]
- [email protected]
namespaceDebugger:
- [email protected]
- patch: |-
apiVersion: helm.toolkit.fluxcd.io/v2beta2
kind: HelmRelease
metadata
我尝试了 yq select 来获取整个 helmrelease。但我无法添加条目
yq eval '.spec.patches[] | select(.patch | contains("HelmRelease") and .patch | contains("name: istio-rules") and .patch | contains("namespace: istio-system")) | .patch |= sub("(keyVault:\\s*- [^\\n]*)"; "\\1\n - newKeyVaultEntry")' istio-rules.yaml
看起来您想使用
@yamld
对补丁进行 YAML 解码,进行一些更改,然后使用 @yaml
再次重新编码。也许类似于
.spec.patches[].patch |= (
@yamld
| select(
.kind == "HelmRelease" and
.metadata.name == "istio-rules" and
.metadata.namespace == "istio-system"
).keyVault += ["newKeyVaultEntry"]
| @yaml
)
使用
--inplace
(或 -i
)标志来更新文件(没有它,结果只会写入终端)。