配置文件动态生成工具confd的使用

 项目  confd 

作者: 李佶澳   转载保留:原文地址   更新时间:2018/08/28 11:51:49

说明

confd是一个支持多种后端的配置文件动态生成工具,可以用来简化配置的管理、更新。

下载安装

wget https://github.com/kelseyhightower/confd/releases/download/v0.16.0/confd-0.16.0-linux-amd64

下载得到的confd-0.16.0-linux-amd64就是可执行文件:

chmod  +x confd-0.16.0-linux-amd64
mv confd-0.16.0-linux-amd64 confd

对接consul

在consul中写入下面这些key:

curl -X PUT --data "rules1" 127.0.0.1:8500/v1/kv/rules/1
curl -X PUT --data "rules2" 127.0.0.1:8500/v1/kv/rules/2
curl -X PUT --data "rules3" 127.0.0.1:8500/v1/kv/rules/3

consul中在rules路径下有3个key:

$curl 127.0.0.1:8500/v1/kv/?keys
[
    "rules/1",
    "rules/2",
    "rules/3"
]

confd的配置路径(-confdir指定的路径)中需要有conf.d和templates目录,分布存放confd的配置文件和等待渲染的配置文件模版:

mkdir conf.d
mkdir templates

创建confd的配置文件:

$ cat conf.d/config.toml
[template]
src = "myconfig.conf.tmpl"
dest = "myconfig.conf"
keys = [
    "/rules",
    "/rules/1",
]
check_cmd = "touch /tmp/check"
reload_cmd = "touch /tmp/reload"

注意check_cmd和reload_cmd分别是配置文件的检查命令,和检查通过后执行的命令,可以通过这两个参数通知目标进程重新加载配置。

其中myconfig.conf.tmpl是等待被渲染的配置文件模版,使用go template语法:

$ cat templates/myconfig.conf.tmpl
[myconfig]

readdirect: {{getv "/rules/1"}}
readdirect: {{getv "/rules/2"}}

{{range getvs "/rules/*"}}
loop rule:  {{.}};
{{end}}

启动:

./confd -interval 10 -confdir ./ -config-file config.toml -backend consul -node 127.0.0.1:8500 &

其中-interval指定同步时间,单位是秒,默认是600秒,也就是说更新了consul中的数据之后,需要等待600秒才能更新配置文件。

在当前路径下将会得到myconfig.conf文件,修改consul中的key之后,配置文件会自动更新:

curl -X PUT --data "new rules3" 127.0.0.1:8500/v1/kv/rules/3

注意写入到consul中的数据如果有换行,需要使用--data-binary,否则换行符会丢失:

$ curl -X PUT --data-bianry @/tmp/rule3  127.0.0.1:8500/v1/kv/rules/3
$ cat /tmp/rule3
a
b
c

参考

  1. confd project
  2. go template

本文原创首发于网站:www.lijiaocn.com

 项目  confd 

QQ交流群

区块链实践互助QQ群:576555864

Kubernetes实践互助QQ群:947371129

Prometheus实践互助QQ群:952461804

Kong/Envoy实践互助QQ群:952503851

Ansible实践互助QQ群:955105412

Copyright @2011-2019 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: [email protected],备注网站合作 友情链接: lijiaocn github.com