3.3.3.6. 用法示例
以下是基于 HAProxy 模板文件的简单模板:
从注释开始:
{{/* Here is a small example of how to work with templates taken from the HAProxy template file. */}}
模板可以创建任意数量的输出文件。使用定义结构来创建输出文件。文件名指定为要定义的参数,定义块内直到匹配端的所有内容都会被写入为该文件的内容。
{{ define "/var/lib/haproxy/conf/haproxy.config" }} global {{ end }}
上方会将 global
复制到 /var/lib/haproxy/conf/haproxy.config 文件,然后关闭该文件。
根据环境变量设置日志记录。
{{ with (env "ROUTER_SYSLOG_ADDRESS" "") }} log {{.}} {{env "ROUTER_LOG_FACILITY" "local1"}} {{env "ROUTER_LOG_LEVEL" "warning"}} {{ end }}
env
函数提取环境变量的值。如果未定义环境变量或 nil
,则返回第二个参数。
通过,使用 将 块中的 "."(dot)值设置为作为使用 的参数提供的任何值。with
操作测试点为 nil
。如果没有 nil
,则会处理到最后
。在上面,假设 ROUTER_SYSLOG_ADDRESS
包含 /var/log/msg、ROUTER_LOG_FACILITY
未定义,并且 ROUTER_LOG_LEVEL
包含 info
。以下命令将复制到输出文件中:
log /var/log/msg local1 info
每个接受的路由最终都会在配置文件中生成行。使用 范围
来进入接受的路由:
{{ range $cfgIdx, $cfg := .State }} backend be_http_{{$cfgIdx}} {{end}}
.State
是 ServiceAliasConfig
的映射,其中键是路由名称. 范围
步骤通过映射,每个传递都使用 键
设置 $cfgIdx
,并将 $cfg
设置为指向描述路由的 ServiceAliasConfig
。如果有两个路由名为 myroute
和 heroute
,则上述命令会将以下内容复制到输出文件中:
backend be_http_myroute backend be_http_hisroute
Route Annotations、$cfg.Annotations
也是注解名称作为键的映射,内容字符串作为值。路由可以根据需要拥有更多注解,其使用由模板作者定义。用户将注解代码到路由中,模板作者则自定义 HAProxy 模板来处理注解。
常见用法是索引注解以获取值。
{{$balanceAlgo := index $cfg.Annotations "haproxy.router.openshift.io/balance"}}
索引提取给定注解的值(若有)。因此,$balanceAlgo
将包含与注解或 nil
关联的字符串。如上所示,您可以测试非空字符串
,并使用 with
结构对其执行操作。
{{ with $balanceAlgo }} balance $balanceAlgo {{ end }}
此处,如果 $balanceAlgo
不是 nil
,平衡 $balanceAlgo
将复制到输出文件中。
在第二个示例中,您想要根据注释中设置的超时值设置服务器超时。
$value := index $cfg.Annotations "haproxy.router.openshift.io/timeout"
现在 $value
会被评估,以确保它包含正确构建的字符串。matchPattern
函数接受正则表达式,如果参数满足表达式要求,则返回 true
。
matchPattern "[1-9][0-9]*(us\|ms\|s\|m\|h\|d)?" $value
这会接受 5000ms
,但不接受 7y
。结果可用于测试。
{{if (matchPattern "[1-9][0-9]*(us\|ms\|s\|m\|h\|d)?" $value) }} timeout server {{$value}} {{ end }}
它还可用于匹配令牌:
matchPattern "roundrobin|leastconn|source" $balanceAlgo
另外,也可以使用 matchValues
来匹配令牌:
matchValues $balanceAlgo "roundrobin" "leastconn" "source"