(backend string, addressesToKeep []string)
| 261 | } |
| 262 | |
| 263 | func (api *API) genericRevise(backend string, addressesToKeep []string) (success bool, anyChanges bool) { |
| 264 | errorIn := "" |
| 265 | |
| 266 | switch backend { |
| 267 | case DataplaneBackend: |
| 268 | errorIn = "data planes" |
| 269 | case RegistrationServerBackend: |
| 270 | errorIn = "registration servers" |
| 271 | default: |
| 272 | logrus.Fatalf("Invalid backend name for HAProxy backend revision function.") |
| 273 | } |
| 274 | |
| 275 | version, err := api.client.Configuration.GetVersion("") |
| 276 | if err != nil { |
| 277 | logrus.Errorf("Failed to revise %s. Error obtaining configuration version - %v", errorIn, err) |
| 278 | return false, false |
| 279 | } |
| 280 | |
| 281 | transaction, err := api.client.Configuration.StartTransaction(version) |
| 282 | if err != nil { |
| 283 | logrus.Errorf("Failed to revise %s. Error starting HAProxy transaction - %v", errorIn, err) |
| 284 | return false, false |
| 285 | } |
| 286 | |
| 287 | version, servers, err := api.client.Configuration.GetServers(backend, transaction.ID) |
| 288 | if err != nil { |
| 289 | logrus.Errorf("Failed to revise %s. Error obtaining list of existing servers - %v", errorIn, err) |
| 290 | return false, false |
| 291 | } |
| 292 | |
| 293 | var existingURLs []string |
| 294 | existingAddresses := make(map[string]string) |
| 295 | for _, server := range servers { |
| 296 | url := fmt.Sprintf("%s:%d", server.Address, *server.Port) |
| 297 | |
| 298 | existingURLs = append(existingURLs, url) |
| 299 | existingAddresses[url] = server.Name |
| 300 | } |
| 301 | |
| 302 | toAdd := _map.Difference(addressesToKeep, existingURLs) |
| 303 | toRemove := _map.Difference(existingURLs, addressesToKeep) |
| 304 | anyChanges = (len(toAdd) != 0) || (len(toRemove) != 0) |
| 305 | |
| 306 | // REMOVAL |
| 307 | switch backend { |
| 308 | case DataplaneBackend: |
| 309 | for _, server := range toRemove { |
| 310 | ipAddress, port := grpc_helpers.SplitAddress(server) |
| 311 | api.removeServerByName(ipAddress, port, transaction.ID, 0) |
| 312 | } |
| 313 | case RegistrationServerBackend: |
| 314 | api.removeRegistrationServers(transaction.ID) |
| 315 | } |
| 316 | |
| 317 | // ADDITION |
| 318 | switch backend { |
| 319 | case DataplaneBackend: |
| 320 | for _, address := range toAdd { |
no test coverage detected