搜索

3.3.3.6. 用法示例

download PDF

以下是基于 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/msgROUTER_LOG_FACILITY 未定义,并且 ROUTER_LOG_LEVEL 包含 info。以下命令将复制到输出文件中:

  log /var/log/msg local1 info

每个接受的路由最终都会在配置文件中生成行。使用 范围 来进入接受的路由:

{{ range $cfgIdx, $cfg := .State }}
  backend be_http_{{$cfgIdx}}
{{end}}

.StateServiceAliasConfig 的映射,其中键是路由名称. 范围 步骤通过映射,每个传递都使用 设置 $cfgIdx,并将 $cfg 设置为指向描述路由的 ServiceAliasConfig。如果有两个路由名为 myrouteheroute,则上述命令会将以下内容复制到输出文件中:

  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"
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.