掌舵图中的嵌套循环

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

我在 helm 图表 values.yml 中有一个嵌套的入口值,如下所示

  hosts:
    - host:
      paths:
        - path: /
          pathType: Prefix
    - host: ppa
      paths:
        - path: /api/v1/ppob
          pathType: Prefix
        - path: /api/v1/pgob
          pathType: Prefix

有了这个,我试图通过 notes.txt 打印所有路线,代码为


1. Get the application URL by running these commands:
{{- $domainname := .Values.npdomain -}}
{{- $fullName := include "ppgp.fullname" . -}}
{{ println }}
{{- if .Values.ingress.enabled }}
{{- range $host := .Values.ingress.hosts }}
  {{- range .paths }}
  http{{ if $.Values.ingress.tls }}s{{ end }}://{{ if .host }}{{ .host }}.{{ $domainname }}{{ else }}{{ $fullName }}.{{ $domainname }}{{ end }}{{ .paths.path }}
  {{- end }}
{{- end }}
{{- end }}

我期待的输出是是否启用了 tls

https://ppgp.mydomainvar
https://ppa.mydomainvar/api.v1/ppob
https://ppa.mydomainvar/api.v1/pgob

我得到的输出是

https://ppgp.mydomainvar
https://ppgp.mydomainvar/api.v1/ppob
https://ppgp.mydomainvar/api.v1/pgob

我知道有些地方不对,但我无法弄明白,因为我有两个 .host 块,而我在第二个 .host 块中有两个 .path。

如果有人可以提供帮助,我们将不胜感激。

提前致谢

kubernetes-helm kubernetes-ingress helm3
1个回答
0
投票

你检查

.host
的地方你在最里面的
range
循环中。在这种情况下,
.
paths:
列表之一的项目之一。

您已经在

$host
列表中有对父项的引用
hosts:
,因此最简单的解决方法是将
.host
更改为
$host.host
它出现的地方。

与其立即深入到值结构的最深层次,然后尝试从父上下文构造值,不如考虑在 URL 出现的层次上创建它的每个部分。

paths:
中的每个项目都属于相同的
hosts:
条目,并且将具有相同的 URL 主机部分,例如;这将使发出 URL 的行更清晰一些。这可能看起来像:

{{- $domainname := .Values.npdomain -}}
{{- $fullName := include "ppgp.fullname" . -}}
{{- with .Values.ingress }}
  {{- if .enabled }}
    {{- $scheme := .tls | ternary "https" "http" }}
    {{- range .hosts }}
      {{- $host := printf "%s.%s" (.host | default $fullName) $domainName }}
      {{- range .paths }}
        {{- printf "%s://%s/%s" $scheme $host .path }}
{{ end }}
    {{- end }}
  {{- end }}
{{- end }}
© www.soinside.com 2019 - 2024. All rights reserved.