首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在golang上使用Vault client

在golang上使用Vault client
EN

Stack Overflow用户
提问于 2017-11-14 16:50:46
回答 1查看 6.6K关注 0票数 4

我是golang和Vault的新手。我正在尝试秘密地存储一些值/密钥对,然后读取它。但对我来说,不太清楚客户端创建是如何工作的(实际上,我应该为每个操作调用它,还是可以创建一个)。例如下面的代码:

client, err := api.NewClient(conf)
client.SetToken(token)

c := client.Logical()

sec, err := c.Write("/secret/test/" + name,
    map[string]interface{}{ 
        "name": name,
        "username": username,
        "password": password,
    })

它工作得很完美。但每次我需要写或读一些东西时,调用NewClient对我来说很奇怪。所以我试着为它创建init函数。如下所示:

var VClient *api.Client // global variable

func InitVault(token string) int{

    conf := &api.Config{
        Address: "http://127.0.0.1:8200",
    }

    VClient, err := api.NewClient(conf)
    if  err != nil {
           log.Println(err)
           return 0
    }

    VClient.SetToken(token)    
    return 1
}

而且,它进行了初始化,但当我尝试进行初始化时:

main (){

r := InitVault("token string")

c := VClient.Logical()

    sec, err := c.Write("/secret/test/" + name,
        map[string]interface{}{ 
            "name": name,
            "username": username,
            "password": password,
        })
}

我得到了一个空指针异常。在这种情况下,没有太多的例子可以真正起到帮助作用。我错了吗?对于Vault的每个操作,我都需要调用NewClient?正如我之前提到的,它对我来说看起来很奇怪,这就是为什么我决定在这里发布我的问题,将很高兴得到任何答案。

致最好的问候

EN

回答 1

Stack Overflow用户

发布于 2018-10-23 03:48:57

因此,正如@Volker所述,您并没有更新已经创建的全局变量。所以你应该有像这样的东西。请注意,客户端被创建为另一个变量,然后将该变量传递给全局变量。

var VClient *api.Client // global variable

func InitVault(token string) error {
    conf := &api.Config{
        Address: "http://127.0.0.1:8200",
    }

    client, err := api.NewClient(conf)
    if err != nil {
        return err
    }
    VClient = client

    VClient.SetToken(token)
    return nil
}


func main() {
    err := InitVault("root token")
    if err != nil {
        log.Println(err)
    }
    c := VClient.Logical()

    secret, err = c.Write("kv/hi",
    map[string]interface{}{
        "name":     name,
        "username": username,
        "password": password,
    })
    if err != nil {
        log.Println(err)
    }
    log.Println(secret)
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47281295

复制
相关文章

相似问题

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