我正在使用 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 中获取密钥 任何建议将不胜感激
我不知道你的 $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 }}