in pkg/controllers/cloudmap_controller.go [234:278]
func (r *CloudMapReconciler) updateServiceImport(ctx context.Context, svcImport *v1alpha1.ServiceImport, svc *v1.Service, importedSvcPorts []*model.Port) error {
updateRequired := false
if len(svcImport.Spec.IPs) != 1 || svcImport.Spec.IPs[0] != svc.Spec.ClusterIP {
r.Log.Debug("ServiceImport IP need update", "ServiceImport IPs", svcImport.Spec.IPs, "cluster IP", svc.Spec.ClusterIP)
svcImport.Spec.IPs = []string{svc.Spec.ClusterIP}
updateRequired = true
}
// ServiceImport ports do not have TargetPort, exclude field for purpose of comparison
simplifiedSvcPorts := make([]*model.Port, 0)
for _, svcPort := range importedSvcPorts {
simplifiedSvcPorts = append(simplifiedSvcPorts, &model.Port{
Name: svcPort.Name,
Port: svcPort.Port,
Protocol: svcPort.Protocol,
})
}
svcImportPorts := make([]*model.Port, 0)
for _, importPort := range svcImport.Spec.Ports {
port := ServiceImportPortToPort(importPort)
svcImportPorts = append(svcImportPorts, &port)
}
if !PortsEqualIgnoreOrder(svcImportPorts, simplifiedSvcPorts) {
r.Log.Debug("ServiceImport ports need update", "ServiceImport Ports", svcImport.Spec.Ports, "imported ports", importedSvcPorts)
serviceImportPorts := make([]v1alpha1.ServicePort, 0)
for _, port := range importedSvcPorts {
serviceImportPorts = append(serviceImportPorts, PortToServiceImportPort(*port))
}
svcImport.Spec.Ports = serviceImportPorts
updateRequired = true
}
if updateRequired {
if err := r.Client.Update(ctx, svcImport); err != nil {
return err
}
r.Log.Info("updated ServiceImport",
"namespace", svcImport.Namespace, "name", svcImport.Name,
"IP", svcImport.Spec.IPs, "ports", svcImport.Spec.Ports)
}
return nil
}