首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用逗号连接consul-template的服务元数据

如何使用逗号连接consul-template的服务元数据
EN

Stack Overflow用户
提问于 2016-07-26 01:52:41
回答 2查看 1.9K关注 0票数 3

谁知道如何将consul中的字符串连接成consul-template?

如果我在领事馆注册了服务'foo‘

代码语言:javascript
复制
{
  "Node": "node1",
  "Address": "192.168.0.1",
  "Port": 3333
},
{
  "Node": "node2",
  "Address": "192.168.0.2",
  "Port": 4444
}

我希望consul-template生成以下行:

代码语言:javascript
复制
servers=192.168.0.1:3333,192.168.0.2:4444/bogus

以下尝试不起作用,因为它在后面留下一个逗号,

代码语言:javascript
复制
servers={{range service "foo"}}{{.Address}}{{.Port}},{{end}}/bogus
# renders
servers=192.168.0.1:3333,192.168.0.2:4444,/bogus

# What I actually want
servers=192.168.0.1:3333,192.168.0.2:4444/bogus

我知道consul-template使用golang模板语法,但我就是找不出让它工作的语法。我可能应该使用consul-template的join,但是如何将.Address.Port都传递给join?这只是一个微不足道的例子,我并不是故意使用索引,因为服务的数量可能超过两个。有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2017-03-06 15:15:40

这应该是可行的。

代码语言:javascript
复制
{{$foo_srv := service "foo"}}
{{if $foo_srv}}
  {{$last := len $foo_srv | subtract 1}}
servers=
  {{- range $i := loop $last}}
    {{- with index $foo_srv $i}}{{.Address}}{{.Port}},{{end}}
  {{- end}}
  {{- with index $foo_srv last}}{{.Address}}{{.Port}}{{end}}/bogus
{{end}}

我在想,是否可以使用"join“。

注"{{-“表示删除前导空格(如‘',\t,\n)。

票数 3
EN

Stack Overflow用户

发布于 2016-07-26 15:14:43

您可以使用自定义插件。

代码语言:javascript
复制
servers={{service "foo" | toJSON | plugin "path/to/plugin"}}

插件代码:

代码语言:javascript
复制
package main

import (
    "encoding/json"
    "fmt"
    "os"
)

type InputEntry struct {
    Node    string
    Address string
    Port    int
}

func main() {
    arg := []byte(os.Args[1])
    var input []InputEntry
    if err := json.Unmarshal(arg, &input); err != nil {
        fmt.Fprintln(os.Stderr, fmt.Sprintf("err: %s", err))
        os.Exit(1)
    }

    var output string
    for i, entry := range input {
        output += fmt.Sprintf("%v:%v", entry.Address, entry.Port)
        if i != len(input)-1 {
            output += ","
        }
    }

    fmt.Fprintln(os.Stdout, string(output))
    os.Exit(0)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38574399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档