3 回答
TA贡献1859条经验 获得超6个赞
在consul-template模板中,您可以使用临时- 在模板的整个生命周期中可用的临时键值存储。
您的代码如下所示:
{{ range services }}
{{ $server_name := .Name | replaceAll "_" "." }}
{{ scratch.Set "server_name" $server_name }}
{{ range .Tags }}
{{ if . | regexMatch "server_name=" }}
# found matching server_name in {{ . }}
{{ $server_name := . | regexReplaceAll ".*=" "" }}
{{ scratch.Set "server_name" $server_name }}
{{ end }}
{{ end }}
# server_name = {{ scratch.Get "server_name" }}
acl host_{{ .Name }} hdr(host) -i {{ $server_name }}
use_backend {{ .Name }}_backend if host_{{ .Name }}
{{ end }}
TA贡献1818条经验 获得超3个赞
内部$server_name
和外部$server_name
是不同的变量。您不能在 Go 模板中从外部范围设置变量:http : //play.golang.org/p/0fuOmqXrSK。
您可以尝试重写您的模板以在acl
内部打印等部分if
,除非您只需要执行该部分一次,否则该部分将起作用。Go 模板不是作为复杂逻辑的脚本语言设计的,它是用于显示预先计算的信息的工具。一fmt.Printf
,如果你愿意的类固醇。包括搜索和替换在内的所有逻辑都应该在 Go 中,它会更快、更安全、更易于维护和调试。
TA贡献1951条经验 获得超3个赞
自Go 1.11 发布以来,可以通过模板中的赋值来修改变量。所以这是现在工作:
{{ $v := "init" }}
{{ if true }}
{{ $v = "changed" }}
{{ end }}
v: {{ $v }} {{/* "changed" */}}
这个版本是在v0.25.1版本中引入到 Consul 模板的。
- 3 回答
- 0 关注
- 148 浏览
添加回答
举报