从 values.yaml 中读取密钥

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

我正在使用 helm 创建虚拟服务 我的目标是在 helm 的帮助下创建接受单个或多个匹配块的 vs 现在我卡在最后一部分了,我想动态读取 httpmatch uri 例如 values.yaml(对于无法在此编辑器中输入格式的 yaml 中的错误缩进表示歉意)

values.yaml

  paths: 
   - uri: 
      - "/process-devlopment/projects"
      - "/process-devlopment/modules"
     rewrite: "/process-devlopment/projects"
     servicePort: 80 
     method: "POST" 
   - uri: 
      exact: "/process-devlopment/projects"
     rewrite: "/process-devlopment/modules"

来自 vs.yaml 的代码

   {{- range $key, $value := $path }}
  - match:
    - uri:
       "{{- toYaml $key.uri }}": "{{- toYaml  $value.uri }}"
    rewrite:
       uri: "{{- toYaml $value.rewrite }}" 

这里我想从values.yaml获取URI下的prefix/exact/regex 但似乎没有在 helm 中读取键我只能通过使用范围块遍历循环来获取值 谁能帮我动态地从 values.yaml 中获取密钥 任何建议将不胜感激

kubernetes-helm istio
1个回答
0
投票

我不知道你的 $path 的键和值是什么。 无论如何,如果您需要获取键和值的内容,我会按照以下方式重组列表

假定的原始列表:

paths:
  - exact: "uri1"
  - prefix: "uri2" 

更新名单:

paths: 
   - pattern: prefix
     path: "uri2"
   - pattern: exact
     path: "uri1"
     ...

virtual-service.yaml 可以是:

{{- range $.Values.paths }}   
  - match:
    - uri:
       "{{ .pattern }}": "{{ .path }}"
    rewrite:
       uri: "{{ .path }}" 
{{- end }}

在评论中,发布者询问如果模式有多个 uri,它会是什么样子。这是未经测试的代码,但是应该给你想法,这就是我重组它的方式

Values.yaml

paths: 
   - pattern: prefix
     uris:
      - "uri1"
      - "uri2"
   - pattern: exact
     uris:
      - "uri3"
      - "uri4"

现在,由于我们在遍历 uris 时需要模式,因此您必须将其分配给某些东西。然后你可以像这样遍历 uris,

虚拟服务.yaml:

{{- range $.Values.paths }}
  {{- $pattern := .pattern }} 
  {{- range .uris }}   
    - match:
      - uri:
         "{{ $pattern }}": "{{ . }}"
      rewrite:
        uri: "{{ . }}" 
  {{- end }}
{{- end }}
© www.soinside.com 2019 - 2024. All rights reserved.