Skip to content
This repository has been archived by the owner on Apr 12, 2024. It is now read-only.

Commit

Permalink
First refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
Matteo Baiguini SBT committed Jan 3, 2020
1 parent df0178e commit da86401
Show file tree
Hide file tree
Showing 4 changed files with 126 additions and 62 deletions.
45 changes: 45 additions & 0 deletions envvar/envvar.go
Original file line number Diff line number Diff line change
@@ -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
}
85 changes: 23 additions & 62 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,59 +6,53 @@ import (
"os"
"path/filepath"

"bygui86/kubeconfigurator/utils"

clientcmd "k8s.io/client-go/tools/clientcmd"
clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
)

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 {
Expand Down Expand Up @@ -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
}
Expand All @@ -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) {
Expand All @@ -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)
}
31 changes: 31 additions & 0 deletions utils/kubeconfig.go
Original file line number Diff line number Diff line change
@@ -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
}
27 changes: 27 additions & 0 deletions utils/os.go
Original file line number Diff line number Diff line change
@@ -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
}

0 comments on commit da86401

Please sign in to comment.