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 }