You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Helm Chart的Values中为ArgoCD ApplicationSet添加注解?

ArgoCD ApplicationSet 从Git目录内Values文件取值到注解的实现方法

问题需求

使用Git目录生成器的ArgoCD ApplicationSet模板,每个目录对应一个Helm Chart,希望从目录内的values.yaml中提取指定值(例如global.team),添加到生成的Application资源的注解中。

示例场景:

  • 名为annotations的目录下的values.yaml内容:
...
global:
  team: dns
  • 期望生成的Application注解:
metadata:
  name: 'development-annotations'
  annotations:
    itai-test: 'dns'

尝试过的无效方案

曾尝试用Merge Generator合并Git目录生成器与Git文件生成器,但未达到预期(无报错但注解未正确填充),配置如下:

spec:
  generators:
  - merge:
      mergeKeys:
      - path.basename
      generators:
      - git:
          repoURL: my-repo.git
          revision: HEAD
          directories:
          - path: '*'
      - git:
          repoURL: my-repo.git
          revision: HEAD
          files:
          - path: '{{path}}/values.yaml'

正确实现方法

直接在ApplicationSet模板中使用{{ .Values.global.team }}不可行,因为ApplicationSet模板不直接解析Helm的Values文件,必须通过生成器提取Values中的字段作为参数传入模板,具体步骤如下:

1. 配置Merge Generator,提取Values字段

修改Merge Generator配置,让文件生成器通过yqPath提取values.yaml中需要的字段,同时确保两个生成器的合并键完全匹配:

spec:
  generators:
  - merge:
      mergeKeys:
      - pathBasename # 统一用自定义键作为合并标识
      generators:
      - git:
          repoURL: my-repo.git
          revision: HEAD
          directories:
          - path: '*'
          values:
            # 将目录名赋值给自定义键,用于合并
            pathBasename: '{{path.basename}}'
      - git:
          repoURL: my-repo.git
          revision: HEAD
          files:
          # 匹配所有目录下的values.yaml
          - path: '*//values.yaml'
          values:
            # 从文件路径中提取目录名,作为合并键
            pathBasename: '{{path.dirname | basename}}'
            # 用yqPath提取values.yaml中的global.team值
            team: '{{yqPath ".global.team"}}'

2. 在模板中引用提取的字段

修改ApplicationSet模板,直接引用生成器传递过来的team字段:

template:
  metadata:
    name: 'development-{{path.basename}}'
    annotations:
      itai-test: '{{team}}'

注意事项

  • 确保ArgoCD版本在2.4及以上,yqPath功能需要该版本支持;
  • 合并键必须在两个生成器中都存在且值完全一致,否则无法正确合并;
  • 如果values.yaml中可能存在字段缺失的情况,可以添加默认值,例如{{yqPath ".global.team" | default "default-team"}}。

内容的提问来源于stack exchange,提问作者Itai Goldman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 13:06:13