sig.k8s.io/controller-runtime/pkg/client/config/config.go
:中的一些定义
var (
kubeconfig, apiServerURL string
)
func init() {
flag.StringVar(&kubeconfig, "kubeconfig", "",
"Paths to a kubeconfig. Only required if out-of-cluster.")
}
我的项目,mybinary,使用cobra
var rootCmd = &cobra.Command{
Use: "mybinary",
Run: func(cmd *cobra.Command, args []string) {
somefunc()
}
}
func init() {
rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file")
rootCmd.InitDefaultHelpFlag()
}
如果我想使用mybinary --kubeconfig somevalue
设置在config.go
上定义的参数kubeconfig
,我需要做什么?
您有多种选择,但我认为目前最好的选择可能是使用cobra的PersistentPreRun
函数:
var rootCmd = &cobra.Command{
// ...
PersistentPreRun: func(cmd *cobra.Command, args []string) {
flag.CommandLine.Parse([]string{"-kubeconfig", yourVariableHere})
},
// ...
}
也就是说,在运行根命令或从中派生的任何命令(前提是它们不覆盖PreRun(之前,您将调用相当于调用flag.Parse()
的命令,就像有人运行过一样:
your-program -kubeconfig <string>
其中的值来自提供给您自己的Cobra标志的参数。如果正确的话,您可以使用cfgFile
参数,或者添加--kubeconfig
变量。
如果你使用的是viper,它似乎有自己的胶水来与基本的flag
库混合,但我还没有对此进行研究。我确实在config.go中看到了这样的评论:
// TODO: Fix this to allow double vendoring this library but still register flags on behalf of users
如果固定的话,它将提供一种不同于呼叫flag.CommandLine.Parse
的方式。