-
Notifications
You must be signed in to change notification settings - Fork 5
/
delete_service_instance.go
74 lines (63 loc) · 1.66 KB
/
delete_service_instance.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package clients
import (
"bytes"
"cf-html5-apps-repo-cli-plugin/log"
"fmt"
"io"
"net/http"
"github.com/cloudfoundry/cli/plugin"
)
// DeleteServiceInstance delete Cloud Foundry service instance
func DeleteServiceInstance(cliConnection plugin.CliConnection, serviceInstanceGUID string, maxRetryCount int) error {
var err error
var url string
var currentTry = 1
var request *http.Request
var response *http.Response
var body []byte
var apiEndpoint string
var accessToken string
apiEndpoint, err = cliConnection.ApiEndpoint()
if err != nil {
return err
}
accessToken, err = cliConnection.AccessToken()
if err != nil {
return err
}
url = apiEndpoint + "/v3/service_instances/" + serviceInstanceGUID
for currentTry <= maxRetryCount {
log.Tracef("Making request to: %s (try %d/%d)\n", url, currentTry, maxRetryCount)
request, err = http.NewRequest("DELETE", url, bytes.NewBuffer([]byte{}))
if err != nil {
return err
}
request.Header.Set("Content-Type", "application/json")
request.Header.Set("Authorization", accessToken)
client, err := GetDefaultClient()
if err != nil {
return err
}
response, err = client.Do(request)
if err != nil {
return err
}
defer response.Body.Close()
body, err = io.ReadAll(response.Body)
log.Trace(log.Response{Head: response, Body: body})
if err != nil {
return err
}
if response.StatusCode != 202 {
if currentTry != maxRetryCount {
continue
}
return fmt.Errorf("Could not delete service instance: [%d] %s", response.StatusCode, string(body[:]))
} else {
// Pool job
_, err = PollJob(cliConnection, response.Header.Get("Location"))
return err
}
}
return err
}