/
reconcile_servers.go
66 lines (54 loc) · 1.8 KB
/
reconcile_servers.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
package reconciliation
import (
"fmt"
"go.anx.io/go-anxcloud/pkg/api/types"
"go.anx.io/go-anxcloud/pkg/utils/object/compare"
lbaasv1 "go.anx.io/go-anxcloud/pkg/apis/lbaas/v1"
)
const serverResourceTypeIdentifier = "01f321a4875446409d7d8469503a905f"
func (r *reconciliation) filterServers(allServers []*lbaasv1.Server) ([]*lbaasv1.Server, error) {
ret := make([]*lbaasv1.Server, 0, len(allServers))
for _, server := range allServers {
idx, err := compare.Search(lbaasv1.Backend{Identifier: server.Backend.Identifier}, r.backends, "Identifier")
if err != nil {
return nil, fmt.Errorf("error checking if Server belongs to one of our frontends: %w", err)
} else if idx != -1 {
ret = append(ret, server)
r.sortObjectIntoStateArray(server)
}
}
return ret, nil
}
func (r *reconciliation) reconcileServers() (toCreate, toDestroy []types.Object, err error) {
targetServers := make([]*lbaasv1.Server, 0, len(r.ports)*len(r.targetServers))
for _, server := range r.targetServers {
for portName, port := range r.ports {
backend, ok := r.portBackends[portName]
if !ok {
r.logger.V(2).Info("Not reconciling server because backend not (yet?) found",
"server", server.Name,
"port", portName,
)
continue
}
targetServers = append(targetServers, &lbaasv1.Server{
Name: r.makeResourceName(server.Name, portName),
IP: server.Address.String(),
Port: int(port.Internal),
Check: "enabled",
Backend: lbaasv1.Backend{Identifier: backend.Identifier},
})
}
}
toCreate = make([]types.Object, 0, len(targetServers))
toDestroy = make([]types.Object, 0, len(r.servers))
err = compare.Reconcile(
targetServers, r.servers,
&toCreate, &toDestroy,
"Name", "IP", "Port", "Check", "Backend.Identifier",
)
if err != nil {
return nil, nil, err
}
return
}