diff --git a/envvar/envvar.go b/envvar/envvar.go new file mode 100644 index 0000000..69ee9d1 --- /dev/null +++ b/envvar/envvar.go @@ -0,0 +1,45 @@ +package envvar + +import ( + "os" + "strconv" +) + +func Check(key string) bool { + return os.Getenv(key) != "" +} + +func Set(key string, value string) error { + return os.Setenv(key, value) +} + +func Unset(key string) error { + return os.Unsetenv(key) +} + +func GetString(key, defaultValue string) string { + if !Check(key) { + return defaultValue + } + return os.Getenv(key) +} + +func GetBool(key string, defaultValue bool) bool { + value, err := strconv.ParseBool(os.Getenv(key)) + if err != nil { + return defaultValue + } + return value +} + +func GetInt(key string, defaultValue int) int { + return int(GetInt64(key, int64(defaultValue))) +} + +func GetInt64(key string, defaultValue int64) int64 { + value, err := strconv.ParseInt(os.Getenv(key), 10, 64) + if err != nil { + return defaultValue + } + return value +} diff --git a/main.go b/main.go index 6ec4a12..f7f3163 100644 --- a/main.go +++ b/main.go @@ -6,6 +6,8 @@ import ( "os" "path/filepath" + "bygui86/kubeconfigurator/utils" + clientcmd "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" ) @@ -13,52 +15,44 @@ import ( const ( kubeConfigFlagKey = "kubeconfig" - homeEnvVar = "HOME" - homeEnvVarDefault = "~/" - kubeConfigFolderDefault = ".kube" kubeConfigFilenameDefault = "config" kubeConfigOutputFolderName = ".kube/configs" - kubeConfigOutputFolderPerm = 0755 - - //kubeConfigEnvVar = "KUBECONFIG" - kubeConfigEnvVar = "NEW_KUBECONFIG" ) func main() { + fmt.Println("🏠 Get HOME") + home, homeErr := utils.GetHomeDir() + if homeErr != nil { + fmt.Println("❌ ERROR: " + homeErr.Error()) + os.Exit(1) + } + fmt.Println("📚 Get Kubernetes configuration file") - kubeConfigFilePath := getKubeConfigFlagValue(kubeConfigFlagKey) - srcConfig := getKubeConfig(*kubeConfigFilePath) + srcPath := filepath.Join(home, kubeConfigFolderDefault, kubeConfigFilenameDefault) + kubeConfigFilePath, getErr := getKubeConfigFlagValue(kubeConfigFlagKey, srcPath) + if getErr != nil { + fmt.Println("❌ ERROR: " + getErr.Error()) + os.Exit(1) + } + srcConfig := getKubeConfig(kubeConfigFilePath) fmt.Println("✂️ Split Kubernetes configuration file") tgConfigs := splitKubeConfig(srcConfig) - fmt.Println(" Save single Kubernetes configuration files") - configsPath, saveErr := saveKubeConfigs(tgConfigs) + fmt.Println("💾 Save single Kubernetes configuration files") + tgPath := filepath.Join(home, kubeConfigOutputFolderName) + configsPath, saveErr := saveKubeConfigs(tgConfigs, tgPath) if saveErr != nil { fmt.Println("❌ ERROR: " + saveErr.Error()) os.Exit(1) } fmt.Printf("✅ Completed, files stored in '%s'\n", configsPath) - - envErr := setKubeConfigEnvVar(configsPath) - if envErr != nil { - fmt.Println("❌ ERROR: " + envErr.Error()) - os.Exit(1) - } - fmt.Printf( "👀 New '%s' env var: '%s'\n", kubeConfigEnvVar, getKubeConfigEnvVar()) - - fmt.Println("") } -func getKubeConfigFlagValue(flagKey string) *string { - home := getHomeDir() - //if home != "" { - return flag.String(flagKey, filepath.Join(home, kubeConfigFolderDefault, kubeConfigFilenameDefault), "(optional) absolute path to the kubeconfig file") - //} else { - // return flag.String(flagKey, "", "absolute path to the kubeconfig file") - //} +func getKubeConfigFlagValue(flagKey, flagDefault string) (string,error){ + return *flag.String(flagKey, flagDefault, "(optional) absolute path to the kubeconfig file"), nil } func getKubeConfig(kubeConfigFilePath string) *clientcmdapi.Config { @@ -86,11 +80,9 @@ func splitKubeConfig(srcConfig *clientcmdapi.Config) map[string]*clientcmdapi.Co return tgConfigs } -func saveKubeConfigs(configs map[string]*clientcmdapi.Config) (string, error) { - configsPath := buildKubeConfigsPath(getHomeDir(), kubeConfigOutputFolderName) - +func saveKubeConfigs(configs map[string]*clientcmdapi.Config, configsPath string) (string, error) { fmt.Printf("Check '%s' configs folder\n", configsPath) - checkErr := checkKubeConfigsFolder(configsPath, kubeConfigOutputFolderPerm) + checkErr := utils.CheckKubeConfigsFolder(configsPath) if checkErr != nil { return "", checkErr } @@ -111,17 +103,6 @@ func saveKubeConfigs(configs map[string]*clientcmdapi.Config) (string, error) { return configsPath, nil } -func checkKubeConfigsFolder(path string, mode os.FileMode) error { - _, statErr := os.Stat(path) - if statErr != nil { - if os.IsNotExist(statErr) { - return os.Mkdir(path, mode) - } - return statErr - } - return nil -} - func validateKubeConfig(config *clientcmdapi.Config) error { validateErr := clientcmd.Validate(*config) if clientcmd.IsConfigurationInvalid(validateErr) { @@ -133,23 +114,3 @@ func validateKubeConfig(config *clientcmdapi.Config) error { func writeKubeConfig(config *clientcmdapi.Config, filepath string) error { return clientcmd.WriteToFile(*config, filepath) } - -func getHomeDir() string { - home := os.Getenv(homeEnvVar) - if home != "" { - return home - } - return homeEnvVarDefault -} - -func buildKubeConfigsPath(home, path string) string { - return filepath.Join(home, path) -} - -func setKubeConfigEnvVar(kubeConfigsPath string) error { - return os.Setenv(kubeConfigEnvVar, kubeConfigsPath) -} - -func getKubeConfigEnvVar() string { - return os.Getenv(kubeConfigEnvVar) -} diff --git a/utils/kubeconfig.go b/utils/kubeconfig.go new file mode 100644 index 0000000..a2c2047 --- /dev/null +++ b/utils/kubeconfig.go @@ -0,0 +1,31 @@ +package utils + +import ( + "bygui86/kubeconfigurator/envvar" + "os" +) + +const ( + kubeConfigEnvVar = "KUBECONFIG" + + kubeConfigOutputFolderPerm = 0755 +) + +func GetKubeConfigEnvVar() string { + return envvar.GetString(kubeConfigEnvVar, "") +} + +func SetKubeConfigEnvVar(kubeConfigsPath string) error { + return envvar.Set(kubeConfigEnvVar, kubeConfigsPath) +} + +func CheckKubeConfigsFolder(path string) error { + _, statErr := os.Stat(path) + if statErr != nil { + if os.IsNotExist(statErr) { + return os.Mkdir(path, kubeConfigOutputFolderPerm) + } + return statErr + } + return nil +} diff --git a/utils/os.go b/utils/os.go new file mode 100644 index 0000000..2598a25 --- /dev/null +++ b/utils/os.go @@ -0,0 +1,27 @@ +package utils + +import ( + "os/user" + + "bygui86/kubeconfigurator/envvar" +) + +const ( + homeEnvVar = "HOME" +) + +func GetHomeDir() (string,error) { + home, err := GetCurrentUserHomeDir() + if err != nil { + return "", err + } + return envvar.GetString(homeEnvVar, home), nil +} + +func GetCurrentUserHomeDir() (string,error) { + usr, err := user.Current() + if err != nil{ + return "", err + } + return usr.HomeDir, nil +}