如何在Argo AppSet中实现生成器间传值并用作过滤器?
问题解决:Git生成器读取的值作为List生成器过滤器的正确实现
你的需求是可行的,问题出在Matrix生成器子生成器的变量引用逻辑上。当前配置中Git和List生成器是并行执行的,导致List生成器无法直接获取Git生成器输出的变量。以下是正确的实现方式:
正确配置示例
generators: - matrix: generators: # 通过Git生成器读取override.yaml,输出environmentType和clusterList变量 - git: repoURL: https://github.com/JCodeX-Dev/JCodeXClusterPublic revision: main files: - path: helm-charts/override.yaml # 基于Git生成的变量,用List生成器过滤目标集群 - list: elementsYaml: '{{ .clusterList | toYaml }}' selector: matchLabels: cluster: '{{ .environmentType }}'
关键说明
- 变量作用域:Matrix生成器的子生成器会按顺序合并变量,Git生成器输出的
environmentType和clusterList会被后续的List生成器继承并可用。 - 模板语法注意:YAML中使用Go模板时,需要用单引号包裹模板表达式,避免YAML解析器把
{{ ... }}当成特殊字符处理。 - 过滤逻辑验证:配置生效后,List生成器会从
clusterList中筛选出cluster字段等于environmentType(即green)的条目,最终生成的矩阵参数只会包含cluster: green那一组数据。
测试验证
你可以通过argo generate命令提前验证生成器输出:
argo generate <workflow-template-name>
执行后应该只输出对应green集群的参数,说明配置生效。
内容的提问来源于stack exchange,提问作者JCodeX
相关产品推荐
相关产品推荐

