【问题标题】:Kustomize patch with string literal: Double quotes replaced with single quotesKustomize patch with string literal:双引号替换为单引号
【发布时间】:2022-06-20 22:24:16
【问题描述】:

将 kustomize 补丁添加到 kustomization.yaml 时,双引号会被单引号替换,从而导致错误

我正在使用以下内容:

kustomize edit add patch --patch "- op: add\n  path: /metadata/annotations/argocd.argoproj.io~1sync-wave\n. value: 1" --kind Deployment

转换为

- patch: '- op: add\n  path: /metadata/annotations/argocd.argoproj.io~1sync-wave\n value: 1'
  target:
    kind: Deployment

kustomization.yaml

这会在您执行kustomize build 时导致以下错误

Error: trouble configuring builtin PatchTransformer with config: `
patch: ‘- op: add\n path: /metadata/annotations/argocd.argoproj.io~1sync-wave\n  value:
  1’
target:
  kind: Deployment
`: unable to parse SM or JSON patch from [- op: add\n path: /metadata/annotations/argocd.argoproj.io~1sync-wave\n  value: 1]

如何确保kustomization.yaml 中的补丁包含双引号?

【问题讨论】:

  • 为什么重要?
  • 我添加了错误。我现在已经解决了这个问题。
  • 我怀疑如果您将补丁指定为 JSON 字符串,它不需要嵌入换行符,那么在命令行上传递会更容易(我也不会这样做:我会自己编辑kustomization.yaml,而不是依赖kustomize edit add)。
  • 我刚刚改用kustomize edit add annotations。有 100 多个自定义文件,所以手动添加它们有点痛苦,我试图避免。
  • @mbbce 您可以将此作为答案发布,以便其他人看到。

标签: kubernetes kubectl kustomize


【解决方案1】:

由于我有数百个 kustomization 文件需要使用 ArgoCD 同步波的注释进行更新,因此我改用 commonAnnotations 解决了这个问题(我相信这也是正确的做法)。因此,我没有添加补丁,而是执行了以下操作:

kustomize edit add annotation argocd.argoproj.io/sync-wave:$wave --force

这会将注释添加到所有对象。其中$wave 是波号,--force 会覆盖文件中已存在的注释。

【讨论】:

    【解决方案2】:

    在我的情况下,注释不是一个选项,所以我必须提供序列化为操作数组的补丁定义:

    kustomize edit add patch --patch '[{"op": "replace", "path": "/spec/template/spec/containers/0/ports/0/containerPort", "value": 8080}]' --kind Deployment
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-18
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      • 2021-08-12
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      相关资源
      最近更新 更多