github.com/kyma-project/kyma-environment-broker@v0.0.1/common/deprovision/client.go (about) 1 package deprovision 2 3 import ( 4 "fmt" 5 "net/http" 6 "time" 7 8 "github.com/sirupsen/logrus" 9 "golang.org/x/oauth2/clientcredentials" 10 ) 11 12 const defaultPageSize = 100 13 14 // Client is the interface to interact with the KEB /deprovision API as an HTTP client using OIDC ID token in JWT format. 15 type Client interface { 16 DeprovisionRuntime(params DeprovisionParameters) error 17 } 18 19 type DeprovisionClient struct { 20 log logrus.FieldLogger 21 URL string 22 client *http.Client 23 } 24 25 func NewDeprovisionClient(parameters DeprovisionParameters) *DeprovisionClient { 26 cfg := clientcredentials.Config{ 27 ClientID: parameters.Oauth2ClientID, 28 ClientSecret: parameters.Oauth2ClientSecret, 29 TokenURL: parameters.Oauth2IssuerURL, 30 Scopes: parameters.Scopes, 31 AuthStyle: parameters.AuthStyle, 32 } 33 httpClientOAuth := cfg.Client(parameters.Context) 34 httpClientOAuth.Timeout = 30 * time.Second 35 36 return &DeprovisionClient{ 37 log: logrus.WithField("client", "deprovision"), 38 URL: parameters.EndpointURL, 39 client: httpClientOAuth, 40 } 41 } 42 43 func (c DeprovisionClient) DeprovisionRuntime(instanceID string) error { 44 logrus.Info("DeprovisionRuntime is called") 45 url := c.URL + "/oauth/v2/service_instances/" + 46 instanceID + "?accepts_incomplete=true&service_id=faebbe18-0a84-11e5-ab14-d663bd873d97&plan_id=0c712d43-b1e6-470s-9fe5-8e1d552aa6a5" 47 48 logrus.Infof("url: %s", url) 49 request, err := http.NewRequest("DELETE", url, nil) 50 if err != nil { 51 return fmt.Errorf("while creating the HTTP Delete request for deprovisioning: %w", err) 52 } 53 request.Header.Set("X-Broker-API-Version", "2.14") 54 55 response, err := c.client.Do(request) 56 if err != nil { 57 return fmt.Errorf("while calling %s: %w", request.URL.String(), err) 58 } 59 60 cerr := response.Body.Close() 61 if err == nil { 62 err = cerr 63 } 64 65 if response.StatusCode != http.StatusOK { 66 return fmt.Errorf("calling %s returned %d (%s) status", request.URL.String(), response.StatusCode, response.Status) 67 } 68 logrus.Infof("Deprovisioning request returned code: " + response.Status) 69 c.log.Infof("Deprovisioning request returned code: " + response.Status) 70 71 return err 72 }