github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/pkg/cli/cmd/playground/base.go (about) 1 /* 2 Copyright (C) 2022-2023 ApeCloud Co., Ltd 3 4 This file is part of KubeBlocks project 5 6 This program is free software: you can redistribute it and/or modify 7 it under the terms of the GNU Affero General Public License as published by 8 the Free Software Foundation, either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU Affero General Public License for more details. 15 16 You should have received a copy of the GNU Affero General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 package playground 21 22 import ( 23 "fmt" 24 "os" 25 "path/filepath" 26 "time" 27 28 cp "github.com/1aal/kubeblocks/pkg/cli/cloudprovider" 29 ) 30 31 type baseOptions struct { 32 startTime time.Time 33 Timeout time.Duration 34 // prevCluster is the previous cluster info 35 prevCluster *cp.K8sClusterInfo 36 // kubeConfigPath is the tmp kubeconfig path that will be used when init and destroy 37 kubeConfigPath string 38 // stateFilePath is the state file path 39 stateFilePath string 40 } 41 42 func (o *baseOptions) validate() error { 43 playgroundDir, err := initPlaygroundDir() 44 if err != nil { 45 return err 46 } 47 48 o.kubeConfigPath = filepath.Join(playgroundDir, "kubeconfig") 49 if _, err = os.Stat(o.kubeConfigPath); err == nil { 50 if err = os.Remove(o.kubeConfigPath); err != nil { 51 return err 52 } 53 } 54 55 o.stateFilePath = filepath.Join(playgroundDir, stateFileName) 56 o.prevCluster, err = readClusterInfoFromFile(o.stateFilePath) 57 if err != nil { 58 return err 59 } 60 61 // check existed cluster info 62 if o.prevCluster != nil && !o.prevCluster.IsValid() { 63 return fmt.Errorf("invalid playground kubernetes cluster info from state file %s, %v", o.stateFilePath, o.prevCluster) 64 } 65 return nil 66 }