如何使用etcd获取密钥字符串值生成

时间:2014-09-05 16:00:01

标签: service-discovery etcd confd

我正在使用confd和etcd。我正在关注confd example for nginx。我把这些密钥放在我的etcd服务中:

curl http://127.0.0.1:4001/v2/keys/myapp/upstream -XPUT -d dir=true
curl http://127.0.0.1:4001/v2/keys/myapp/subdomain -XPUT -d value="myapp"
curl http://127.0.0.1:4001/v2/keys/myapp/upstream/app2 -XPUT -d value="10.0.1.101:80"
curl http://127.0.0.1:4001/v2/keys/myapp/upstream/app1 -XPUT -d value="10.0.1.100:80"

这是我的配置:

[template]
prefix = "myapp"
keys = [
  "subdomain",
  "upstream",
]
owner = "nginx"
mode = "0644"
src = "nginx.tmpl"
dest = "/tmp/myapp.conf"
check_cmd  = "/usr/sbin/nginx -t -c {{ .src }}"
reload_cmd = "/usr/sbin/service nginx reload"

这是我的tmpl配置。

upstream {{.subdomain}} {
{{range $server := .upstream}}
    #I want to get the key string value
    server {{$sever.key}} {{$server.Value}};
{{end}}
}

server {
    server_name  {{.subdomain}}.example.com;

    location / {
        proxy_pass        http://{{.subdomain}};
        proxy_redirect    off;
        proxy_set_header  Host             $host;
        proxy_set_header  X-Real-IP        $remote_addr;
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
   }
}

在这里,我想要捕获关键字符串值,例如 app2 app1 。我只知道如何获得它的价值。我想做这样的事情 {{$ sever.key}} ,但它不起作用。 {{$ sever.key}} 上方的配置错误,但我这样做是为了展示我想要的内容。

这个想法有可能吗?

是否有针对该语法或语法的保留字?

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。对我来说这个代码有效(通过你的配置):

{{range gets "/myapp/upstream/*"}}
server {{base .Key}} {{.Value}}
{{end}}

对我来说,主要问题是gets功能。我在网上找到的所有示例都使用getvs,它只提供值。 base函数只会删除密钥路径的第一部分。

有关详细信息,请查看these confd docs