-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinstances.go
156 lines (152 loc) · 4.49 KB
/
instances.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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
package sdk
import (
"encoding/json"
"fmt"
"time"
)
type Instances struct {
ListInstances ListInstances
Instance Instance
}
type Instance struct {
Data []struct {
TenantId string `json:"tenantId"`
CustomerId string `json:"customerId"`
AdditionalIps []struct {
V4 struct {
Ip string `json:"ip"`
NetmaskCidr int `json:"netmaskCidr"`
Gateway string `json:"gateway"`
} `json:"v4"`
} `json:"additionalIps"`
Name string `json:"name"`
DisplayName string `json:"displayName"`
InstanceId int `json:"instanceId"`
Region string `json:"region"`
ProductId string `json:"productId"`
ImageId string `json:"imageId"`
IpConfig struct {
V4 struct {
Ip string `json:"ip"`
NetmaskCidr int `json:"netmaskCidr"`
Gateway string `json:"gateway"`
} `json:"v4"`
V6 struct {
Ip string `json:"ip"`
NetmaskCidr int `json:"netmaskCidr"`
Gateway string `json:"gateway"`
} `json:"v6"`
} `json:"ipConfig"`
MacAddress string `json:"macAddress"`
RamMb int32 `json:"ramMb"`
CpuCores int `json:"cpuCores"`
OsType string `json:"osType"`
DiskMb int `json:"diskMb"`
SshKeys []int `json:"sshKeys"`
CreatedDate time.Time `json:"createdDate"`
CancelDate string `json:"cancelDate"`
Status string `json:"status"`
VHostId int `json:"vHostId"`
AddOns []struct {
Id int `json:"id"`
Quantity int `json:"quantity"`
} `json:"addOns"`
ErrorMessage string `json:"errorMessage"`
ProductType string `json:"productType"`
DefaultUser string `json:"defaultUser"`
} `json:"data"`
Links struct {
Self string `json:"self"`
} `json:"_links"`
}
type ListInstances struct {
Pagination struct {
Size int `json:"size"`
TotalElements int `json:"totalElements"`
TotalPages int `json:"totalPages"`
Page int `json:"page"`
} `json:"_pagination"`
Data []struct {
TenantId string `json:"tenantId"`
CustomerId string `json:"customerId"`
AdditionalIps []struct {
V4 struct {
Ip string `json:"ip"`
NetmaskCidr int `json:"netmaskCidr"`
Gateway string `json:"gateway"`
} `json:"v4"`
} `json:"additionalIps"`
Name string `json:"name"`
DisplayName string `json:"displayName"`
InstanceId int `json:"instanceId"`
Region string `json:"region"`
ProductId string `json:"productId"`
ImageId string `json:"imageId"`
IpConfig struct {
V4 struct {
Ip string `json:"ip"`
NetmaskCidr int `json:"netmaskCidr"`
Gateway string `json:"gateway"`
} `json:"v4"`
V6 struct {
Ip string `json:"ip"`
NetmaskCidr int `json:"netmaskCidr"`
Gateway string `json:"gateway"`
} `json:"v6"`
} `json:"ipConfig"`
MacAddress string `json:"macAddress"`
RamMb int `json:"ramMb"`
CpuCores int `json:"cpuCores"`
OsType string `json:"osType"`
DiskMb int `json:"diskMb"`
SshKeys []int `json:"sshKeys"`
CreatedDate time.Time `json:"createdDate"`
CancelDate string `json:"cancelDate"`
Status string `json:"status"`
VHostId int `json:"vHostId"`
AddOns []struct {
Id int `json:"id"`
Quantity int `json:"quantity"`
} `json:"addOns"`
ErrorMessage string `json:"errorMessage"`
ProductType string `json:"productType"`
DefaultUser string `json:"defaultUser"`
} `json:"data"`
Links struct {
First string `json:"first"`
Previous string `json:"previous"`
Self string `json:"self"`
Next string `json:"next"`
Last string `json:"last"`
} `json:"_links"`
}
// Get returns the list of available resources
func (l *ListInstances) Get(page, size *int) (*ListInstances, error) {
url := getPage(page, size)
res, _ := Do(GET, URL(url), nil)
var re ListInstances
err := json.Unmarshal(res, &re)
if err != nil {
return nil, err
}
return &re, nil
}
func (l *Instance) GetInstanceByID(id string) (*Instance, error) {
url := fmt.Sprintf("%s/%s", ComputeInstancesUrl, id)
res, _ := Do(GET, URL(url), nil)
var instance Instance
err := json.Unmarshal(res, &instance)
if err != nil {
return nil, err
}
return &instance, nil
}
func getPage(page *int, size *int) string {
var url string
if page != nil && size != nil {
url = fmt.Sprintf("%s?page=%d&size=%d", string(ComputeInstancesUrl), page, size)
} else {
url = string(ComputeInstancesUrl) + "?page=1&size=10"
}
return url
}