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

如何在Helm的range函数下添加else条件处理混合前缀密钥?

解决Helm SecretProviderClass同时拉取应用特定前缀密钥与通用密钥的问题

需求说明

需要对现有Helm SecretProviderClass模板进行修改,在secretObjects.data和parameters.objects.array的循环中添加条件判断逻辑,实现:

  • 对于通用密钥(如示例中COMMON-开头的密钥),从密钥保管库拉取无发布名前缀的密钥对象
  • 对于应用特定密钥,拉取带当前发布名大写前缀的密钥对象
  • 确保最终生成的密钥项无重复

修改后的完整模板代码

spec:
  provider: azure
  secretObjects:
  - data:
      {{- range .Values.keyvault.secrets }}
      {{- if hasPrefix "COMMON-" . }}
    - key: {{ . }}
      objectName: {{ . }}
      {{- else }}
    - key: {{ . }}
      objectName: {{ $.Release.Name | upper }}-{{ . }}
      {{- end }}
      {{- end }}      
    secretName: {{ $.Release.Name }}-kvsecret
    type: opaque
  parameters:
    usePodIdentity: "false"
    useVMManagedIdentity: "false"
    userAssignedIdentityID: ""
    keyvaultName: {{ .Values.keyvault.name | default "mykv01" }}    
    objects: |
      array:
        {{- range .Values.keyvault.secrets }}
        {{- if hasPrefix "COMMON-" . }}
        - |
          objectName: {{ . }}
          objectType: secret
        {{- else }}
        - |
          objectName: {{ $.Release.Name | upper }}-{{ . }}
          objectType: secret
        {{- end }}
        {{- end }}
    tenantId: {{ .Values.keyvault.tenantid }}
{{- end }}
{{- end -}}

关键改动说明

  1. 条件判断逻辑:在两个range .Values.keyvault.secrets循环中,通过hasPrefix "COMMON-" .判断当前密钥是否为通用密钥:
    • 通用密钥:直接使用objectName: {{ . }},即无发布名前缀的原始密钥名
    • 应用特定密钥:保留原有逻辑,使用{{ $.Release.Name | upper }}-{{ . }}作为密钥对象名
  2. 避免重复:由于每个密钥在values.yaml的secrets列表中仅出现一次,循环处理时每个密钥只会生成一条对应配置,天然避免重复
  3. 灵活性扩展:如果你的通用密钥命名规则不是COMMON-开头,可以修改hasPrefix的参数,比如改为contains "COMMON"或者自定义的标识规则

示例验证(以发布名为APPA为例)

根据提供的values.yaml,最终生成的配置片段如下:

  • secretObjects.data部分:
    - key: MY-SECRET-1
      objectName: APPA-MY-SECRET-1
    - key: MY-SECRET-2
      objectName: APPA-MY-SECRET-2
    - key: COMMON-SECRET-1
      objectName: COMMON-SECRET-1
    - key: COMMON-SECRET-2
      objectName: COMMON-SECRET-2
    
  • parameters.objects.array部分:
    array:
      - |
        objectName: APPA-MY-SECRET-1
        objectType: secret
      - |
        objectName: APPA-MY-SECRET-2
        objectType: secret
      - |
        objectName: COMMON-SECRET-1
        objectType: secret
      - |
        objectName: COMMON-SECRET-2
        objectType: secret
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:45:24