github.com/jenkins-x/jx/v2@v2.1.155/pkg/jxfactory/connector/provider/default.go (about) 1 package provider 2 3 import ( 4 "fmt" 5 "os" 6 "path/filepath" 7 "sync" 8 9 "github.com/jenkins-x/jx/v2/pkg/jxfactory/connector" 10 "github.com/jenkins-x/jx/v2/pkg/jxfactory/connector/gcp" 11 "github.com/jenkins-x/jx/v2/pkg/util" 12 "github.com/pkg/errors" 13 "k8s.io/client-go/rest" 14 ) 15 16 type defaultClient struct { 17 configs sync.Map 18 workDir string 19 } 20 21 // NewClient default implementation using a work directory 22 func NewClient(workDir string) connector.Client { 23 return &defaultClient{workDir: workDir} 24 } 25 26 func (c *defaultClient) Connect(connector *connector.RemoteConnector) (*rest.Config, error) { 27 path := filepath.Join(c.workDir, connector.Path()) 28 var config *rest.Config 29 value, ok := c.configs.Load(path) 30 if ok { 31 config = value.(*rest.Config) 32 } 33 if config == nil { 34 var err error 35 36 err = os.MkdirAll(path, util.DefaultWritePermissions) 37 if err != nil { 38 return nil, errors.Wrapf(err, "failed to create parent dir %s", path) 39 } 40 config, err = c.createConfig(connector, path) 41 if err != nil { 42 return nil, err 43 } 44 if config == nil { 45 return nil, fmt.Errorf("connector is not supported") 46 } 47 c.configs.Store(path, config) 48 } 49 return config, nil 50 } 51 52 func (c *defaultClient) createConfig(connector *connector.RemoteConnector, dir string) (*rest.Config, error) { 53 if connector.GKE != nil { 54 return gcp.CreateGCPConfig(connector.GKE, dir) 55 } 56 return nil, nil 57 }