Я использую следующий шаблон в консулом-шаблон:Переопределение переменную в цикле в консулом-шаблоне
{{ range services }}
{{ $server_name := .Name | replaceAll "_" "." }}
{{ range .Tags }}
{{ if . | regexMatch "server_name=" }}
# found matching server_name in {{ . }}
{{ $server_name := . | regexReplaceAll ".*=" "" }}
{{ end }}
{{ end }}
# server_name = {{ $server_name }}
acl host_{{ .Name }} hdr(host) -i {{ $server_name }}
use_backend {{ .Name }}_backend if host_{{ .Name }}
{{ end }}
который производит
# found matching server_name in server_name=geoserver.hello.org
# server_name = geoserver.dev.hello.org
acl host_geoserver_dev_hello_org hdr(host) -i geoserver.dev.hello.org
use_backend geoserver_dev_hello_org_backend if host_geoserver_dev_hello_org
, где находится .Name
geoserver_dev_hello_org
и есть server_name=geoserver.hello.org
тег. Я ожидаю, что к концу цикла .Tags
диапазон $server_name
должен иметь значение geoserver.hello.org
, но он все еще имеет свое исходное значение geoserver.dev.hello.org
.
Как это сделать, чтобы цикл перекрывал $server_name
(и выходите из цикла, когда значение найдено)?
Возможный дубликат [? В цикле диапазона шаблон Go, переменные, объявленные вне сброса петли на каждой итерации] (http://stackoverflow.com/questions/28674199/in-a-go-template-range-loop-are-variables-declaration-outside-the-loop-reset-on-ea) – icza
Да действительно @icza –