没有检测到保管箱令牌助手?

时间:2018-06-20 21:03:13

标签: go devops alpine hashicorp-vault

问题:

vault:0.10.2泊坞映像中,我在以下位置有三个文件:

/home/myuser/token_helper:Go中的令牌辅助程序二进制文件,根据this documentation

实现了令牌辅助程序接口

/home/myuser/vault_start:运行os.exec("vault", "operator", "init")os.exec("vault", "server", "-config=myconfig.hcl")

的Go脚本

/home/myuser/.vault:令牌辅助程序配置文件指定了令牌辅助程序的二进制位置,并且我已导出VAULT_CONFIG_PATH指向此路径。该文件显示为token_helper = "/home/myuser/token_helper"

我看到的问题是运行vault_start脚本时,出现以下错误:

failed to get token helper: error expanding config path "": exec: "getent": executable file not found in $PATH

到目前为止已完成调试

此错误似乎不正确。 which getent返回/usr/bin/getent,并且图像$PATH包含它,证明两者都存在。此外,配置路径不是"",而是设置为/home/myuser/.vault,但保险柜显然将其检测为空。

我已将该错误输出跟踪到保险柜的command目录中的this file:根据该代码块,只有在未设置$HOME时,它才会出错,但是我已经确认在外壳程序中设置了$HOME

此外,我已经根据this document指定了Vault为了实施令牌助手而要求的所有内容,但似乎并没有检测到配置文件来运行它。保管箱似乎是错误的,还是我遗漏了一些东西?

1 个答案:

答案 0 :(得分:1)

弄清楚了,这是因为os.exec("vault", "operator", "init")行未从主机继承VAULT_CONFIG_PATH变量设置,因此为空。

下面显示了如何在运行期间提供os.Exec环境变量:

    vaultInitCmd := exec.Command("vault", "operator", "init")
    vaultInitCmd.Env = []string{
    fmt.Sprintf(`VAULT_ADDR=%s`, addr),
    fmt.Sprintf(`VAULT_CONFIG_PATH=%s`, `/home/myuser/.vault`)}