k3s/pkg/kubectl/main.go

72 lines
1.7 KiB
Go
Raw Normal View History

2019-01-01 08:23:01 +00:00
package kubectl
import (
goflag "flag"
"fmt"
"math/rand"
"os"
"strings"
2019-01-01 08:23:01 +00:00
"time"
2019-01-09 16:54:15 +00:00
"github.com/rancher/k3s/pkg/server"
"github.com/sirupsen/logrus"
2019-01-01 08:23:01 +00:00
"github.com/spf13/pflag"
2019-04-08 17:53:52 +00:00
utilflag "k8s.io/component-base/cli/flag"
"k8s.io/component-base/logs"
"k8s.io/kubectl/pkg/cmd"
2019-01-01 08:23:01 +00:00
)
func Main() {
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]
}
}
2019-01-01 08:23:01 +00:00
if kubenv == "" {
2019-03-08 22:47:44 +00:00
config, err := server.HomeKubeConfig(false, false)
2019-01-01 08:23:01 +00:00
if _, serr := os.Stat(config); err == nil && serr == nil {
os.Setenv("KUBECONFIG", config)
}
if err := checkReadConfigPermissions(config); err != nil {
logrus.Warn(err)
}
2019-01-01 08:23:01 +00:00
}
main()
}
func main() {
rand.Seed(time.Now().UnixNano())
command := cmd.NewDefaultKubectlCommand()
// TODO: once we switch everything over to Cobra commands, we can go back to calling
// utilflag.InitFlags() (by removing its pflag.Parse() call). For now, we have to set the
// normalize func and add the go flag set by hand.
pflag.CommandLine.SetNormalizeFunc(utilflag.WordSepNormalizeFunc)
pflag.CommandLine.AddGoFlagSet(goflag.CommandLine)
// utilflag.InitFlags()
logs.InitLogs()
defer logs.FlushLogs()
if err := command.Execute(); err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
os.Exit(1)
}
}
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 to modify kube config permissions", configFile)
}
}
file.Close()
return nil
}