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  }