github.com/jenkins-x/jx/v2@v2.1.155/pkg/jxfactory/connector/gcp/gcp.go (about) 1 package gcp 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "os" 7 8 "github.com/jenkins-x/jx/v2/pkg/jxfactory/connector" 9 "github.com/jenkins-x/jx/v2/pkg/util" 10 "github.com/pkg/errors" 11 "k8s.io/client-go/rest" 12 "k8s.io/client-go/tools/clientcmd" 13 clientcmdapi "k8s.io/client-go/tools/clientcmd/api" 14 ) 15 16 // CreateGCPConfig creates a kubernetes config for the given connector 17 func CreateGCPConfig(connector *connector.GKEConnector, dir string) (*rest.Config, error) { 18 project := connector.Project 19 if project == "" { 20 return nil, fmt.Errorf("missing project") 21 } 22 cluster := connector.Cluster 23 if cluster == "" { 24 return nil, fmt.Errorf("missing cluster") 25 } 26 args := []string{"container", "clusters", "get-credentials", cluster, "--project", project} 27 if connector.Zone != "" { 28 args = append(args, "--zone", connector.Zone) 29 } else if connector.Region != "" { 30 args = append(args, "--region", connector.Region) 31 } else { 32 return nil, fmt.Errorf("missing zone or region") 33 } 34 35 file, err := ioutil.TempFile(dir, "") 36 if err != nil { 37 return nil, errors.Wrapf(err, "failed to create temp file in %s", dir) 38 } 39 fileName := file.Name() 40 41 cmd := util.Command{ 42 Dir: dir, 43 Name: "gcloud", 44 Args: args, 45 Env: map[string]string{ 46 "KUBECONFIG": fileName, 47 }, 48 Out: os.Stdout, 49 Err: os.Stderr, 50 } 51 text, err := cmd.RunWithoutRetry() 52 fmt.Printf(text) 53 if err != nil { 54 return nil, err 55 } 56 config, err := clientcmd.NewNonInteractiveDeferredLoadingClientConfig( 57 &clientcmd.ClientConfigLoadingRules{Precedence: []string{fileName}}, 58 &clientcmd.ConfigOverrides{ClusterInfo: clientcmdapi.Cluster{Server: ""}}).ClientConfig() 59 if err != nil { 60 return nil, errors.Wrapf(err, "failed to create client-go config for file %s", fileName) 61 } 62 return config, nil 63 }