consul使用心得

consul-template的hcl和配置文件模板语法

hcl和配置文件模板语法参考:

https://wizardforcel.gitbooks.io/consul-guide/content/11_consul_template.html

https://github.com/hashicorp/consul-template/blob/main/docs/templating-language.md#in

后者是官方的。

其中,配置文件模板本身有类似于lisp的语法,其实就是所谓的go template。go template的语法参考:

https://www.jianshu.com/p/29c9f5e06b1d

https://qdmana.com/2022/03/202203240208085632.html

consul不过在其上补了一些自定义函数罢了。

比如查询consul服务使用:

{{ service .Name }}

会返回一个[]*HealthService 结构的数组,对这个结果调用range,可以遍历该数组:

{{ range service .Name }}

如想判断数组是否不为空,可用:

{{ if service .Name }}

{{ if gt (len (service “flask_svr”)) 0 }}

看到没,这是典型的lisp语法,op code在前,op number在后。

注释使用:

# 注释
{{/* comment */}}
{{- /* comment */ -}}

注意:/*要紧贴大括号写。

if-else这样写:

{{ if or (eq .Name "Webapp1") (eq .Name "Webapp2") }}
upstream {{.Name}}_b {
{{ else }}
upstream {{.Name}} {
{{ end }}

字符串的变量赋值和引用这样写:

{{ $svc := "flask_svr" }}
{{ if service $svc }}
...

数组的变量赋值和引用这样写:

{{ $svcs := parseJSON `["write", "read"]` }}
{{ range $svcs }}
{{ . }}
{{ end }}

注意: {{ . }} 代表的是range循环遍历中的每个元素,有点perl里的$_的意思。

如果不用parseJSON,原始的go template语法是没办法直接赋值一个常量数组的。对此,我研究过go\src\text\template\parse\lex.go的源码,基本可以确定。

in语法这样写(in也是consul提供的自定义函数,而非go的原生API):

{{ $svcs := parseJSON `["write", "read"]` }}
{{ if in $svcs "read" }}
bingo
{{ end }}

注意:in函数要,范围是第一个参数,待判定的元素是第二个参数

``在go template里表示raw quote string,即相比双引号,不做任何转义。类似python的三引号。

字典的变量赋值和引用这样写:

{{ $svcs := parseJSON `[{"id":1, "age":45},{"id":2, "age":40}]`}}
{{ range $svcs }}
{{ .age }}
{{ end }}

打印结果是:

45
40
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值