in pkg/controller/service/vgroups.go [227:304]
func diff(reqCtx *RequestContext, remote, local model.VServerGroup) (
[]model.BackendAttribute, []model.BackendAttribute, []model.BackendAttribute) {
var (
addition []model.BackendAttribute
deletions []model.BackendAttribute
updates []model.BackendAttribute
)
for _, r := range remote.Backends {
if !isBackendManagedByMyService(reqCtx, r, local.VGroupName) {
continue
}
found := false
for _, l := range local.Backends {
if l.Type == "eni" {
if r.ServerId == l.ServerId &&
r.ServerIp == l.ServerIp &&
r.Port == l.Port {
found = true
break
}
} else {
if r.ServerId == l.ServerId &&
r.Port == l.Port {
found = true
break
}
}
}
if !found {
deletions = append(deletions, r)
}
}
for _, l := range local.Backends {
found := false
for _, r := range remote.Backends {
if l.Type == "eni" {
if r.ServerId == l.ServerId &&
r.ServerIp == l.ServerIp &&
r.Port == l.Port {
found = true
break
}
} else {
if r.ServerId == l.ServerId &&
r.Port == l.Port {
found = true
break
}
}
}
if !found {
addition = append(addition, l)
}
}
for _, l := range local.Backends {
for _, r := range remote.Backends {
if l.Type == "eni" {
if l.ServerId == r.ServerId &&
l.ServerIp == r.ServerIp &&
(l.Port != r.Port || l.Weight != r.Weight || l.Description != r.Description) {
updates = append(updates, l)
break
}
} else {
if l.ServerId == r.ServerId &&
(l.Port != r.Port || l.Weight != r.Weight || l.Description != r.Description) {
updates = append(updates, l)
break
}
}
}
}
return addition, deletions, updates
}