Skip to content

Commit 3135a87

Browse files
dentargtbroden84
andauthored
Post Go-API import modifications (#284)
### WHY are these changes introduced? #282 imported https://github.com/84codes/go-api with history #273 makes some changes to the library code, the commits are cherry-picked from that branch ### WHAT is this pull request doing? - Directly use go-api client library in the provider - Remove the dependancy to separated go-api client library - Clean up code and logging. - More coherent code structure - Declare variable within var() - Make request - Switch statement to handle response ### HOW can this pull request be tested? - [x] Test with Go-VCR test fixtures and subset of new tests --------- Co-authored-by: Tobias Brodén <tobias@84codes.com>
1 parent ad86f8d commit 3135a87

File tree

62 files changed

+1027
-868
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+1027
-868
lines changed

api/account.go

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,53 +6,59 @@ import (
66
"strconv"
77
)
88

9-
func (api *API) ListInstances() ([]map[string]interface{}, error) {
9+
func (api *API) ListInstances() ([]map[string]any, error) {
1010
var (
11-
data []map[string]interface{}
12-
failed map[string]interface{}
13-
path = "api/instances"
11+
data []map[string]any
12+
failed map[string]any
1413
)
1514

16-
response, err := api.sling.New().Path(path).Receive(&data, &failed)
17-
log.Printf("[DEBUG] go-api::account::list_instances data: %v", data)
15+
response, err := api.sling.New().Path("api/instances").Receive(&data, &failed)
1816
if err != nil {
1917
return nil, err
2018
}
21-
if response.StatusCode != 200 {
22-
return nil, fmt.Errorf("ListInstances failed, status: %v, message: %s", response.StatusCode, failed)
19+
20+
switch response.StatusCode {
21+
case 200:
22+
log.Printf("[DEBUG] api::account#list_instances data: %v", data)
23+
return data, nil
24+
case 410:
25+
log.Printf("[WARN] api::instance#list status: 410, message: The instance has been deleted")
26+
return nil, nil
27+
default:
28+
return nil, fmt.Errorf("list instances failed, status: %d, message: %s",
29+
response.StatusCode, failed)
2330
}
24-
return data, nil
2531
}
2632

27-
func (api *API) ListVpcs() ([]map[string]interface{}, error) {
33+
func (api *API) ListVpcs() ([]map[string]any, error) {
2834
var (
29-
data []map[string]interface{}
30-
failed map[string]interface{}
35+
data []map[string]any
36+
failed map[string]any
3137
path = "/api/vpcs"
3238
)
3339

3440
response, err := api.sling.New().Path(path).Receive(&data, &failed)
35-
log.Printf("[DEBUG] go-api::vpc::list data: %v", data)
36-
3741
if err != nil {
3842
return nil, err
3943
}
40-
if response.StatusCode != 200 {
41-
return nil, fmt.Errorf("ListVpcs failed, status: %v, message: %v", response.StatusCode, failed)
42-
}
4344

44-
for k := range data {
45-
vpcID := strconv.FormatFloat(data[k]["id"].(float64), 'f', 0, 64)
46-
data_temp, _ := api.readVpcName(vpcID)
47-
data[k]["vpc_name"] = data_temp["name"]
45+
switch response.StatusCode {
46+
case 200:
47+
log.Printf("[DEBUG] api::account#list_vpcs data: %v", data)
48+
for k := range data {
49+
vpcID := strconv.FormatFloat(data[k]["id"].(float64), 'f', 0, 64)
50+
data_temp, _ := api.readVpcName(vpcID)
51+
data[k]["vpc_name"] = data_temp["name"]
52+
}
53+
return data, nil
54+
default:
55+
return nil, fmt.Errorf("list VPCs failed, status: %d, message: %s", response.StatusCode, failed)
4856
}
49-
50-
return data, nil
5157
}
5258

5359
func (api *API) RotatePassword(instanceID int) error {
5460
var (
55-
failed map[string]interface{}
61+
failed map[string]any
5662
path = fmt.Sprintf("api/instances/%d/account/rotate-password", instanceID)
5763
)
5864

@@ -67,14 +73,14 @@ func (api *API) RotatePassword(instanceID int) error {
6773
case 204:
6874
return nil
6975
default:
70-
return fmt.Errorf("failed to rotate api key, statusCode: %v, failed: %v",
76+
return fmt.Errorf("failed to rotate api key, statusCode: %d, failed: %v",
7177
response.StatusCode, failed)
7278
}
7379
}
7480

7581
func (api *API) RotateApiKey(instanceID int) error {
7682
var (
77-
failed map[string]interface{}
83+
failed map[string]any
7884
path = fmt.Sprintf("api/instances/%d/account/rotate-apikey", instanceID)
7985
)
8086

api/alarms.go

Lines changed: 93 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,119 +1,144 @@
11
package api
22

33
import (
4-
"errors"
54
"fmt"
65
"log"
76
"strconv"
87
"time"
98
)
109

11-
func (api *API) CreateAlarm(instanceID int, params map[string]interface{}) (map[string]interface{}, error) {
12-
data := make(map[string]interface{})
13-
failed := make(map[string]interface{})
14-
log.Printf("[DEBUG] go-api::alarm::create instance ID: %v, params: %v", instanceID, params)
15-
path := fmt.Sprintf("/api/instances/%d/alarms", instanceID)
16-
response, err := api.sling.New().Post(path).BodyJSON(params).Receive(&data, &failed)
17-
log.Printf("[DEBUG] go-api::alarm::create data: %v", data)
10+
func (api *API) CreateAlarm(instanceID int, params map[string]any) (map[string]any, error) {
11+
var (
12+
data map[string]any
13+
failed map[string]any
14+
path = fmt.Sprintf("/api/instances/%d/alarms", instanceID)
15+
)
1816

17+
log.Printf("[DEBUG] api::alarms#create path: %s", path)
18+
response, err := api.sling.New().Post(path).BodyJSON(params).Receive(&data, &failed)
1919
if err != nil {
2020
return nil, err
2121
}
22-
if response.StatusCode != 201 {
23-
return nil, fmt.Errorf("CreateAlarm failed, status: %v, message: %s", response.StatusCode, failed)
24-
}
2522

26-
if id, ok := data["id"]; ok {
27-
data["id"] = strconv.FormatFloat(id.(float64), 'f', 0, 64)
28-
log.Printf("[DEBUG] go-api::alarm::create id set: %v", data["id"])
29-
} else {
30-
msg := fmt.Sprintf("go-api::instance::create Invalid alarm identifier: %v", data["id"])
31-
log.Printf("[ERROR] %s", msg)
32-
return nil, errors.New(msg)
23+
switch response.StatusCode {
24+
case 201:
25+
log.Printf("[DEBUG] api::alarms#create data: %v", data)
26+
if id, ok := data["id"]; ok {
27+
data["id"] = strconv.FormatFloat(id.(float64), 'f', 0, 64)
28+
} else {
29+
return nil, fmt.Errorf("create alarm failed, invalid alarm identifier: %v", data["id"])
30+
}
31+
return data, err
32+
default:
33+
return nil,
34+
fmt.Errorf("create alarm failed, status: %d, message: %s", response.StatusCode, failed)
3335
}
34-
35-
return data, err
3636
}
3737

38-
func (api *API) ReadAlarm(instanceID int, alarmID string) (map[string]interface{}, error) {
39-
data := make(map[string]interface{})
40-
failed := make(map[string]interface{})
41-
log.Printf("[DEBUG] go-api::alarm::read instance ID: %v, alarm ID: %v", instanceID, alarmID)
42-
path := fmt.Sprintf("/api/instances/%v/alarms/%v", instanceID, alarmID)
43-
response, err := api.sling.New().Get(path).Receive(&data, &failed)
44-
log.Printf("[DEBUG] go-api::alarm::read data : %v", data)
38+
func (api *API) ReadAlarm(instanceID int, alarmID string) (map[string]any, error) {
39+
var (
40+
data map[string]any
41+
failed map[string]any
42+
path = fmt.Sprintf("/api/instances/%d/alarms/%s", instanceID, alarmID)
43+
)
4544

45+
log.Printf("[DEBUG] api::alarms#read path: %s", path)
46+
response, err := api.sling.New().Get(path).Receive(&data, &failed)
4647
if err != nil {
4748
return nil, err
4849
}
49-
if response.StatusCode != 200 {
50-
return nil, fmt.Errorf("ReadAlarm failed, status: %v, message: %s", response.StatusCode, failed)
51-
}
5250

53-
return data, err
51+
switch response.StatusCode {
52+
case 200:
53+
log.Printf("[DEBUG] api::alarms#read data : %v", data)
54+
return data, err
55+
default:
56+
return nil,
57+
fmt.Errorf("read alarm failed, status: %d, message: %s", response.StatusCode, failed)
58+
}
5459
}
5560

56-
func (api *API) ReadAlarms(instanceID int) ([]map[string]interface{}, error) {
57-
var data []map[string]interface{}
58-
failed := make(map[string]interface{})
59-
log.Printf("[DEBUG] go-api::alarm::read instance ID: %v", instanceID)
60-
path := fmt.Sprintf("/api/instances/%d/alarms", instanceID)
61-
response, err := api.sling.New().Get(path).Receive(&data, &failed)
62-
log.Printf("[DEBUG] go-api::alarm::read data: %v", data)
61+
func (api *API) ListAlarms(instanceID int) ([]map[string]any, error) {
62+
var (
63+
data []map[string]any
64+
failed map[string]any
65+
path = fmt.Sprintf("/api/instances/%d/alarms", instanceID)
66+
)
6367

68+
log.Printf("[DEBUG] api::alarms#list path: %s", path)
69+
response, err := api.sling.New().Get(path).Receive(&data, &failed)
6470
if err != nil {
6571
return nil, err
6672
}
67-
if response.StatusCode != 200 {
68-
return nil, fmt.Errorf("Alarms::ReadAlarms failed, status: %v, message: %s", response.StatusCode, failed)
69-
}
7073

71-
return data, err
74+
switch response.StatusCode {
75+
case 200:
76+
log.Printf("[DEBUG] api::alarms#list data: %v", data)
77+
return data, err
78+
default:
79+
return nil,
80+
fmt.Errorf("list alarms failed, status: %d, message: %s", response.StatusCode, failed)
81+
}
7282
}
7383

74-
func (api *API) UpdateAlarm(instanceID int, params map[string]interface{}) error {
75-
failed := make(map[string]interface{})
76-
log.Printf("[DEBUG] go-api::alarm::update instance ID: %v, params: %v", instanceID, params)
77-
path := fmt.Sprintf("/api/instances/%v/alarms/%v", instanceID, params["id"])
78-
response, err := api.sling.New().Put(path).BodyJSON(params).Receive(nil, &failed)
84+
func (api *API) UpdateAlarm(instanceID int, params map[string]any) error {
85+
var (
86+
failed map[string]any
87+
path = fmt.Sprintf("/api/instances/%d/alarms/%s", instanceID, params["id"].(string))
88+
)
7989

90+
log.Printf("[DEBUG] api::alarms#update path: %s", path)
91+
response, err := api.sling.New().Put(path).BodyJSON(params).Receive(nil, &failed)
8092
if err != nil {
8193
return err
8294
}
83-
if response.StatusCode != 201 {
84-
return fmt.Errorf("Alarms::UpdateAlarm failed, status: %v, message: %s", response.StatusCode, failed)
85-
}
8695

87-
return err
96+
switch response.StatusCode {
97+
case 201:
98+
return nil
99+
default:
100+
return fmt.Errorf("update alarm failed, status: %d, message: %s", response.StatusCode, failed)
101+
}
88102
}
89103

90-
func (api *API) DeleteAlarm(instanceID int, params map[string]interface{}) error {
91-
failed := make(map[string]interface{})
92-
log.Printf("[DEBUG] go-api::alarm::delete instance id: %v, params: %v", instanceID, params)
93-
path := fmt.Sprintf("/api/instances/%v/alarms/%v", instanceID, params["id"])
94-
response, _ := api.sling.New().Delete(path).BodyJSON(params).Receive(nil, &failed)
104+
func (api *API) DeleteAlarm(instanceID int, alarmID string) error {
105+
var (
106+
failed map[string]any
107+
path = fmt.Sprintf("/api/instances/%d/alarms/%s", instanceID, alarmID)
108+
)
95109

96-
if response.StatusCode != 204 {
97-
return fmt.Errorf("Alarm::DeleteAlarm failed, status: %v, message: %s", response.StatusCode, failed)
110+
log.Printf("[DEBUG] api::alarms::delete path: %s", path)
111+
response, err := api.sling.New().Delete(path).Receive(nil, &failed)
112+
if err != nil {
113+
return err
98114
}
99115

100-
return api.waitUntilAlarmDeletion(instanceID, params["id"].(string))
116+
switch response.StatusCode {
117+
case 204:
118+
return api.waitUntilAlarmDeletion(instanceID, alarmID)
119+
default:
120+
return fmt.Errorf("delete alarm failed, status: %d, message: %s", response.StatusCode, failed)
121+
}
101122
}
102123

103-
func (api *API) waitUntilAlarmDeletion(instanceID int, id string) error {
104-
log.Printf("[DEBUG] go-api::alarm::waitUntilAlarmDeletion waiting")
105-
data := make(map[string]interface{})
106-
failed := make(map[string]interface{})
124+
func (api *API) waitUntilAlarmDeletion(instanceID int, alarmID string) error {
125+
var (
126+
data map[string]any
127+
failed map[string]any
128+
)
129+
130+
log.Printf("[DEBUG] api::alarms#waitUntilAlarmDeletion waiting")
107131
for {
108-
path := fmt.Sprintf("/api/instances/%v/alarms/%v", instanceID, id)
132+
path := fmt.Sprintf("/api/instances/%d/alarms/%s", instanceID, alarmID)
109133
response, err := api.sling.New().Path(path).Receive(&data, &failed)
110-
111134
if err != nil {
112-
log.Printf("[DEBUG] go-api::alarm::waitUntilAlarmDeletion error: %v", err)
135+
log.Printf("[DEBUG] api::alarms#waitUntilAlarmDeletion error: %v", err)
113136
return err
114137
}
115-
if response.StatusCode == 404 {
116-
log.Print("[DEBUG] go-api::alarm::waitUntilAlarmDeletion deleted")
138+
139+
switch response.StatusCode {
140+
case 404:
141+
log.Print("[DEBUG] api::alarms#waitUntilAlarmDeletion deleted")
117142
return nil
118143
}
119144

api/api.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,12 @@ type API struct {
1111
client *http.Client
1212
}
1313

14-
func (api *API) DefaultRmqVersion() (map[string]interface{}, error) {
15-
data := make(map[string]interface{})
16-
failed := make(map[string]interface{})
14+
func (api *API) DefaultRmqVersion() (map[string]any, error) {
15+
var (
16+
data map[string]any
17+
failed map[string]any
18+
)
19+
1720
_, err := api.sling.New().Get("/api/default_rabbitmq_version").Receive(&data, &failed)
1821
if err != nil {
1922
return nil, err

0 commit comments

Comments
 (0)