登录
首页 >  Golang >  Go问答

无法将 kubeconfig 的绝对路径设置为 Go 中有效

来源:stackoverflow

时间:2024-02-18 13:21:24 405浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《无法将 kubeconfig 的绝对路径设置为 Go 中有效》,聊聊,希望可以帮助到正在努力赚钱的你。

问题内容

我正在使用 go 模块调用 kubectl,如下所示:

getnscmd := cmd.newcmd("kubectl", "--kubeconfig", "~/.kube/", "get", "ns")

如果我像这样设置路径,它就会起作用:

getnscmd := cmd.newcmd("kubectl", "--kubeconfig", "../../../../.kube/", "get", "ns")

我正在使用 go cmd 包

目前该模块位于另一个存储库中,这就是它必须向上导航四个级别的原因。我认为这是因为该命令是从该文件的角度运行的,但似乎不必这样做。如果它作为 cli 命令运行很简单,第一个(我认为)应该可以工作。

当我从 cli 手动运行此命令时,它工作得很好:

$ kubectl --kubeconfig ~/.kube/ get ns

正确答案


正如其他人提到的,我需要获取主目录环境变量。 不过我是这样实现的:

homepath, _ := os.lookupenv("home")

//

getnscmd := cmd.newcmd("kubectl", "--kubeconfig", homepath+"/.kube/", "get", "ns")

使用 ~ 作为快捷方式是 specific to bash~ 只是获取用户的 $home 目录,但不能在 shell 的所有实现中工作。这是可以从终端使用的东西,但并不总是从代码中使用(它不独立于 shell)。不过,go 也可以使用 os.userhomedir() 找到当前用户的主目录。

https://pkg.go.dev/os#UserHomeDir

Something like this should work

package main

import (
    "fmt"
    "os"
)

func main() {

    homeDir, _ := os.UserHomeDir()

    fmt.Printf("%s/.kube/", homeDir)
}

输出:/root/.kube/

今天关于《无法将 kubeconfig 的绝对路径设置为 Go 中有效》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>