github.com/olli-ai/jx/v2@v2.0.400-0.20210921045218-14731b4dd448/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/olli-ai/jx/v2/pkg/jxfactory/connector"
    10  	"github.com/olli-ai/jx/v2/pkg/jxfactory/connector/gcp"
    11  	"github.com/olli-ai/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  }