github.com/oam-dev/kubevela@v1.9.11/pkg/utils/system/system.go (about) 1 /* 2 Copyright 2021 The KubeVela Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package system 18 19 import ( 20 "os" 21 "path/filepath" 22 23 "github.com/pkg/errors" 24 25 "github.com/oam-dev/kubevela/apis/types" 26 "github.com/oam-dev/kubevela/pkg/oam" 27 ) 28 29 const defaultVelaHome = ".vela" 30 31 const ( 32 // VelaHomeEnv defines vela home system env 33 VelaHomeEnv = "VELA_HOME" 34 ) 35 36 // GetVelaHomeDir return vela home dir 37 func GetVelaHomeDir() (string, error) { 38 var velaHome string 39 if custom := os.Getenv(VelaHomeEnv); custom != "" { 40 velaHome = custom 41 } else { 42 home, err := os.UserHomeDir() 43 if err != nil { 44 return "", err 45 } 46 velaHome = filepath.Join(home, defaultVelaHome) 47 } 48 if _, err := os.Stat(velaHome); err != nil && os.IsNotExist(err) { 49 err := os.MkdirAll(velaHome, 0750) 50 if err != nil { 51 return "", errors.Wrap(err, "error when create vela home directory") 52 } 53 } 54 return velaHome, nil 55 } 56 57 // GetCapCenterDir return cap center dir 58 func GetCapCenterDir() (string, error) { 59 home, err := GetVelaHomeDir() 60 if err != nil { 61 return "", err 62 } 63 return filepath.Join(home, "centers"), nil 64 } 65 66 // GetRepoConfig return repo config 67 func GetRepoConfig() (string, error) { 68 home, err := GetCapCenterDir() 69 if err != nil { 70 return "", err 71 } 72 return filepath.Join(home, "config.yaml"), nil 73 } 74 75 // GetCapabilityDir return capability dirs including workloads and traits 76 func GetCapabilityDir() (string, error) { 77 home, err := GetVelaHomeDir() 78 if err != nil { 79 return "", err 80 } 81 return filepath.Join(home, "capabilities"), nil 82 } 83 84 // GetCurrentEnvPath return current env config 85 func GetCurrentEnvPath() (string, error) { 86 homedir, err := GetVelaHomeDir() 87 if err != nil { 88 return "", err 89 } 90 envPath := filepath.Join(homedir, "curenv") 91 return envPath, nil 92 } 93 94 // InitDirs create dir if not exits 95 func InitDirs() error { 96 if err := InitCapabilityDir(); err != nil { 97 return err 98 } 99 if err := InitCapCenterDir(); err != nil { 100 return err 101 } 102 return nil 103 } 104 105 // InitCapCenterDir create dir if not exits 106 func InitCapCenterDir() error { 107 home, err := GetCapCenterDir() 108 if err != nil { 109 return err 110 } 111 _, err = CreateIfNotExist(filepath.Join(home, ".tmp")) 112 return err 113 } 114 115 // InitCapabilityDir create dir if not exits 116 func InitCapabilityDir() error { 117 dir, err := GetCapabilityDir() 118 if err != nil { 119 return err 120 } 121 _, err = CreateIfNotExist(dir) 122 return err 123 } 124 125 // CreateIfNotExist create dir if not exist 126 func CreateIfNotExist(dir string) (bool, error) { 127 _, err := os.Stat(dir) 128 if err != nil { 129 if os.IsNotExist(err) { 130 // nolint:gosec 131 return false, os.MkdirAll(dir, 0755) 132 } 133 return false, err 134 } 135 return true, nil 136 } 137 138 const ( 139 // LegacyKubeVelaSystemNamespaceEnv the legacy environment variable for kubevela system namespace 140 LegacyKubeVelaSystemNamespaceEnv = "DEFAULT_VELA_NS" 141 // KubeVelaSystemNamespaceEnv the environment variable for kubevela system namespace 142 KubeVelaSystemNamespaceEnv = "KUBEVELA_SYSTEM_NAMESPACE" 143 // KubeVelaDefinitionNamespaceEnv the environment variable for kubevela definition namespace 144 KubeVelaDefinitionNamespaceEnv = "KUBEVELA_DEFINITION_NAMESPACE" 145 ) 146 147 func bindEnv(variable *string, keys ...string) { 148 for _, key := range keys { 149 if val := os.Getenv(key); val != "" { 150 *variable = val 151 return 152 } 153 } 154 } 155 156 // BindEnvironmentVariables bind 157 func BindEnvironmentVariables() { 158 bindEnv(&types.DefaultKubeVelaNS, KubeVelaSystemNamespaceEnv, LegacyKubeVelaSystemNamespaceEnv) 159 bindEnv(&oam.SystemDefinitionNamespace, KubeVelaDefinitionNamespaceEnv, KubeVelaSystemNamespaceEnv) 160 }