github.com/olli-ai/jx/v2@v2.0.400-0.20210921045218-14731b4dd448/pkg/cloud/iks/iks.go (about)

     1  package iks
     2  
     3  import (
     4  	gohttp "net/http"
     5  
     6  	ibmcloud "github.com/IBM-Cloud/bluemix-go"
     7  	"github.com/IBM-Cloud/bluemix-go/authentication"
     8  	"github.com/IBM-Cloud/bluemix-go/client"
     9  	"github.com/IBM-Cloud/bluemix-go/http"
    10  	"github.com/IBM-Cloud/bluemix-go/rest"
    11  	"github.com/IBM-Cloud/bluemix-go/session"
    12  )
    13  
    14  type KubernetesServiceAPI interface {
    15  	Zones() Zones
    16  	Regions() Regions
    17  	MachineTypes() MachineTypes
    18  	VLANs() VLANs
    19  	Clusters() Clusters
    20  }
    21  
    22  //ContainerService holds the client
    23  type ksService struct {
    24  	*client.Client
    25  }
    26  
    27  // No auth session is required for region and zone calls
    28  func NewSessionless(sess *session.Session) (KubernetesServiceAPI, error) {
    29  	config := sess.Config
    30  	if config.HTTPClient == nil {
    31  		config.HTTPClient = http.NewHTTPClient(config)
    32  	}
    33  	if config.Endpoint == nil {
    34  		ep, err := config.EndpointLocator.ContainerEndpoint()
    35  		if err != nil {
    36  			return nil, err
    37  		}
    38  		config.Endpoint = &ep
    39  	}
    40  	return &ksService{
    41  		Client: client.New(config, ibmcloud.ContainerService, nil),
    42  	}, nil
    43  }
    44  
    45  func New(sess *session.Session) (KubernetesServiceAPI, error) {
    46  	config := sess.Config.Copy()
    47  	err := config.ValidateConfigForService(ibmcloud.ContainerService)
    48  	if err != nil {
    49  		return nil, err
    50  	}
    51  	if config.HTTPClient == nil {
    52  		config.HTTPClient = http.NewHTTPClient(config)
    53  	}
    54  	tokenRefreher, err := authentication.NewIAMAuthRepository(config, &rest.Client{
    55  		DefaultHeader: gohttp.Header{
    56  			"User-Agent": []string{http.UserAgent()},
    57  		},
    58  		HTTPClient: config.HTTPClient,
    59  	})
    60  	if err != nil {
    61  		return nil, err
    62  	}
    63  	if config.IAMAccessToken == "" {
    64  		err := authentication.PopulateTokens(tokenRefreher, config)
    65  		if err != nil {
    66  			return nil, err
    67  		}
    68  	}
    69  	if config.Endpoint == nil {
    70  		ep, err := config.EndpointLocator.ContainerEndpoint()
    71  		if err != nil {
    72  			return nil, err
    73  		}
    74  		config.Endpoint = &ep
    75  	}
    76  
    77  	return &ksService{
    78  		Client: client.New(config, ibmcloud.ContainerService, tokenRefreher),
    79  	}, nil
    80  }
    81  
    82  func (c *ksService) Zones() Zones {
    83  	return newZonesAPI(c.Client)
    84  }
    85  func (c *ksService) Regions() Regions {
    86  	return newRegionsAPI(c.Client)
    87  }
    88  func (c *ksService) MachineTypes() MachineTypes {
    89  	return newMachineTypesAPI(c.Client)
    90  }
    91  func (c *ksService) VLANs() VLANs {
    92  	return newVLANsAPI(c.Client)
    93  }
    94  func (c *ksService) Clusters() Clusters {
    95  	return newClusterAPI(c.Client)
    96  }