@@ -18,19 +18,13 @@ type NginxClient struct {
18
18
httpClient * http.Client
19
19
}
20
20
21
- type peers struct {
22
- Peers []peer
23
- }
24
-
25
- type peer struct {
26
- ID int
27
- Server string
28
- }
29
-
30
21
type versions []int
31
22
32
- type upstreamServer struct {
33
- Server string `json:"server"`
23
+ type UpstreamServer struct {
24
+ ID int64 `json:"id,omitempty"`
25
+ Server string `json:"server"`
26
+ MaxFails int64 `json:"max_fails"`
27
+ FailTimeout string `json:"fail_timeout,omitempty"`
34
28
}
35
29
36
30
type apiErrorResponse struct {
@@ -129,16 +123,17 @@ func readAPIErrorResponse(respBody io.ReadCloser) (*apiErrorResponse, error) {
129
123
130
124
// CheckIfUpstreamExists checks if the upstream exists in NGINX. If the upstream doesn't exist, it returns the error.
131
125
func (client * NginxClient ) CheckIfUpstreamExists (upstream string ) error {
132
- _ , err := client .getUpstreamPeers (upstream )
126
+ _ , err := client .GetHTTPServers (upstream )
133
127
return err
134
128
}
135
129
136
- func (client * NginxClient ) getUpstreamPeers (upstream string ) (* peers , error ) {
137
- url := fmt .Sprintf ("%v/%v/http/upstreams/%v" , client .apiEndpoint , APIVersion , upstream )
130
+ // GetHTTPServers returns the servers of the upsteam from NGINX.
131
+ func (client * NginxClient ) GetHTTPServers (upstream string ) ([]UpstreamServer , error ) {
132
+ url := fmt .Sprintf ("%v/%v/http/upstreams/%v/servers" , client .apiEndpoint , APIVersion , upstream )
138
133
139
134
resp , err := client .httpClient .Get (url )
140
135
if err != nil {
141
- return nil , fmt .Errorf ("failed to connect to the API to get upstream %v info : %v" , upstream , err )
136
+ return nil , fmt .Errorf ("failed to connect to the API to get upstream servers of upstream %v : %v" , upstream , err )
142
137
}
143
138
defer resp .Body .Close ()
144
139
@@ -149,50 +144,46 @@ func (client *NginxClient) getUpstreamPeers(upstream string) (*peers, error) {
149
144
150
145
body , err := ioutil .ReadAll (resp .Body )
151
146
if err != nil {
152
- return nil , fmt .Errorf ("failed to read the response body with upstream %v info : %v" , upstream , err )
147
+ return nil , fmt .Errorf ("failed to read the response body with upstream servers of upstream %v : %v" , upstream , err )
153
148
}
154
149
155
- var prs peers
156
- err = json .Unmarshal (body , & prs )
150
+ var servers [] UpstreamServer
151
+ err = json .Unmarshal (body , & servers )
157
152
if err != nil {
158
- return nil , fmt .Errorf ("error unmarshalling upstream %v: got %q response: %v" , upstream , string (body ), err )
153
+ return nil , fmt .Errorf ("error unmarshalling upstream servers of upstream %v: got %q response: %v" , upstream , string (body ), err )
159
154
}
160
155
161
- return & prs , nil
156
+ return servers , nil
162
157
}
163
158
164
159
// AddHTTPServer adds the server to the upstream.
165
- func (client * NginxClient ) AddHTTPServer (upstream string , server string ) error {
166
- id , err := client .getIDOfHTTPServer (upstream , server )
160
+ func (client * NginxClient ) AddHTTPServer (upstream string , server UpstreamServer ) error {
161
+ id , err := client .getIDOfHTTPServer (upstream , server . Server )
167
162
168
163
if err != nil {
169
- return fmt .Errorf ("failed to add %v server to %v upstream: %v" , server , upstream , err )
164
+ return fmt .Errorf ("failed to add %v server to %v upstream: %v" , server . Server , upstream , err )
170
165
}
171
166
if id != - 1 {
172
- return fmt .Errorf ("failed to add %v server to %v upstream: server already exists" , server , upstream )
173
- }
174
-
175
- upsServer := upstreamServer {
176
- Server : server ,
167
+ return fmt .Errorf ("failed to add %v server to %v upstream: server already exists" , server .Server , upstream )
177
168
}
178
169
179
- jsonServer , err := json .Marshal (upsServer )
170
+ jsonServer , err := json .Marshal (server )
180
171
if err != nil {
181
- return fmt .Errorf ("error marshalling upstream server %v: %v" , upsServer , err )
172
+ return fmt .Errorf ("error marshalling upstream server %v: %v" , server , err )
182
173
}
183
174
184
175
url := fmt .Sprintf ("%v/%v/http/upstreams/%v/servers/" , client .apiEndpoint , APIVersion , upstream )
185
176
186
177
resp , err := client .httpClient .Post (url , "application/json" , bytes .NewBuffer (jsonServer ))
187
178
188
179
if err != nil {
189
- return fmt .Errorf ("failed to add %v server to %v upstream: %v" , server , upstream , err )
180
+ return fmt .Errorf ("failed to add %v server to %v upstream: %v" , server . Server , upstream , err )
190
181
}
191
182
defer resp .Body .Close ()
192
183
193
184
if resp .StatusCode != http .StatusCreated {
194
185
mainErr := fmt .Errorf ("failed to add %v server to %v upstream: expected %v response, got %v" ,
195
- server , upstream , http .StatusCreated , resp .StatusCode )
186
+ server . Server , upstream , http .StatusCreated , resp .StatusCode )
196
187
return createResponseMismatchError (resp .Body , mainErr )
197
188
}
198
189
@@ -234,7 +225,7 @@ func (client *NginxClient) DeleteHTTPServer(upstream string, server string) erro
234
225
// UpdateHTTPServers updates the servers of the upstream.
235
226
// Servers that are in the slice, but don't exist in NGINX will be added to NGINX.
236
227
// Servers that aren't in the slice, but exist in NGINX, will be removed from NGINX.
237
- func (client * NginxClient ) UpdateHTTPServers (upstream string , servers []string ) ([]string , []string , error ) {
228
+ func (client * NginxClient ) UpdateHTTPServers (upstream string , servers []UpstreamServer ) ([]UpstreamServer , []UpstreamServer , error ) {
238
229
serversInNginx , err := client .GetHTTPServers (upstream )
239
230
if err != nil {
240
231
return nil , nil , fmt .Errorf ("failed to update servers of %v upstream: %v" , upstream , err )
@@ -250,7 +241,7 @@ func (client *NginxClient) UpdateHTTPServers(upstream string, servers []string)
250
241
}
251
242
252
243
for _ , server := range toDelete {
253
- err := client .DeleteHTTPServer (upstream , server )
244
+ err := client .DeleteHTTPServer (upstream , server . Server )
254
245
if err != nil {
255
246
return nil , nil , fmt .Errorf ("failed to update servers of %v upstream: %v" , upstream , err )
256
247
}
@@ -259,11 +250,11 @@ func (client *NginxClient) UpdateHTTPServers(upstream string, servers []string)
259
250
return toAdd , toDelete , nil
260
251
}
261
252
262
- func determineUpdates (updatedServers []string , nginxServers []string ) (toAdd []string , toRemove []string ) {
253
+ func determineUpdates (updatedServers []UpstreamServer , nginxServers []UpstreamServer ) (toAdd []UpstreamServer , toRemove []UpstreamServer ) {
263
254
for _ , server := range updatedServers {
264
255
found := false
265
256
for _ , serverNGX := range nginxServers {
266
- if server == serverNGX {
257
+ if server . Server == serverNGX . Server {
267
258
found = true
268
259
break
269
260
}
@@ -276,7 +267,7 @@ func determineUpdates(updatedServers []string, nginxServers []string) (toAdd []s
276
267
for _ , serverNGX := range nginxServers {
277
268
found := false
278
269
for _ , server := range updatedServers {
279
- if serverNGX == server {
270
+ if serverNGX . Server == server . Server {
280
271
found = true
281
272
break
282
273
}
@@ -289,30 +280,15 @@ func determineUpdates(updatedServers []string, nginxServers []string) (toAdd []s
289
280
return
290
281
}
291
282
292
- // GetHTTPServers returns the servers of the upsteam from NGINX.
293
- func (client * NginxClient ) GetHTTPServers (upstream string ) ([]string , error ) {
294
- peers , err := client .getUpstreamPeers (upstream )
295
- if err != nil {
296
- return nil , fmt .Errorf ("error getting servers of %v upstream: %v" , upstream , err )
297
- }
298
-
299
- var servers []string
300
- for _ , peer := range peers .Peers {
301
- servers = append (servers , peer .Server )
302
- }
303
-
304
- return servers , nil
305
- }
306
-
307
- func (client * NginxClient ) getIDOfHTTPServer (upstream string , name string ) (int , error ) {
308
- peers , err := client .getUpstreamPeers (upstream )
283
+ func (client * NginxClient ) getIDOfHTTPServer (upstream string , name string ) (int64 , error ) {
284
+ servers , err := client .GetHTTPServers (upstream )
309
285
if err != nil {
310
286
return - 1 , fmt .Errorf ("error getting id of server %v of upstream %v: %v" , name , upstream , err )
311
287
}
312
288
313
- for _ , p := range peers . Peers {
314
- if p .Server == name {
315
- return p .ID , nil
289
+ for _ , s := range servers {
290
+ if s .Server == name {
291
+ return s .ID , nil
316
292
}
317
293
}
318
294
0 commit comments