将值添加到 YAML 文件

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

我想使用 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
yaml yq
1个回答
0
投票

看起来您想使用

@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
)标志来更新文件(没有它,结果只会写入终端)。

© www.soinside.com 2019 - 2024. All rights reserved.