package kubectl import ( "fmt" "math/rand" "os" "runtime" "strings" "time" "github.com/k3s-io/k3s/pkg/server" "github.com/sirupsen/logrus" "k8s.io/component-base/cli" "k8s.io/kubectl/pkg/cmd" "k8s.io/kubectl/pkg/cmd/util" // Import to initialize client auth plugins. _ "k8s.io/client-go/plugin/pkg/client/auth" ) func Main() { if runtime.GOOS == "windows" { os.Args = os.Args[1:] } kubenv := os.Getenv("KUBECONFIG") for i, arg := range os.Args { if strings.HasPrefix(arg, "--kubeconfig=") { kubenv = strings.Split(arg, "=")[1] } else if strings.HasPrefix(arg, "--kubeconfig") && i+1 < len(os.Args) { kubenv = os.Args[i+1] } } if kubenv == "" { config, err := server.HomeKubeConfig(false, false) if _, serr := os.Stat(config); err == nil && serr == nil { os.Setenv("KUBECONFIG", config) } if err := checkReadConfigPermissions(config); err != nil { logrus.Warn(err) } } main() } func main() { rand.Seed(time.Now().UnixNano()) command := cmd.NewDefaultKubectlCommand() if err := cli.RunNoErrOutput(command); err != nil { util.CheckErr(err) } } func checkReadConfigPermissions(configFile string) error { file, err := os.OpenFile(configFile, os.O_RDONLY, 0600) if err != nil { if os.IsPermission(err) { return fmt.Errorf("Unable to read %s, please start server "+ "with --write-kubeconfig-mode or --write-kubeconfig-group "+ "to modify kube config permissions", configFile) } } file.Close() return nil }