Fix up some kubernetes service reconciling code organization.
When the endpoint reconcilers got split out of pkg/controlplane, GetMasterServiceUpdateIfNeeded() got moved to pkg/controlplane/reconcilers, even though it needs to be kept in sync with CreateOrUpdateMasterServiceIfNeeded() which stayed in pkg/controlplane. (And everything else in pkg/controlplane/reconcilers is about the Endpoints not the Service anyway.) So move it back. On the flip side, the implementation of masterCountEndpointReconciler got moved to pkg/controlplane/reconcilers, but its unit tests didn't. So belatedly fix that.
This commit is contained in:
@@ -327,7 +327,7 @@ func (c *Controller) CreateOrUpdateMasterServiceIfNeeded(serviceName string, ser
|
||||
if s, err := c.ServiceClient.Services(metav1.NamespaceDefault).Get(context.TODO(), serviceName, metav1.GetOptions{}); err == nil {
|
||||
// The service already exists.
|
||||
if reconcile {
|
||||
if svc, updated := reconcilers.GetMasterServiceUpdateIfNeeded(s, servicePorts, serviceType); updated {
|
||||
if svc, updated := getMasterServiceUpdateIfNeeded(s, servicePorts, serviceType); updated {
|
||||
klog.Warningf("Resetting master service %q to %#v", serviceName, svc)
|
||||
_, err := c.ServiceClient.Services(metav1.NamespaceDefault).Update(context.TODO(), svc, metav1.UpdateOptions{})
|
||||
return err
|
||||
@@ -359,3 +359,34 @@ func (c *Controller) CreateOrUpdateMasterServiceIfNeeded(serviceName string, ser
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
// getMasterServiceUpdateIfNeeded sets service attributes for the given apiserver service.
|
||||
func getMasterServiceUpdateIfNeeded(svc *corev1.Service, servicePorts []corev1.ServicePort, serviceType corev1.ServiceType) (s *corev1.Service, updated bool) {
|
||||
// Determine if the service is in the format we expect
|
||||
// (servicePorts are present and service type matches)
|
||||
formatCorrect := checkServiceFormat(svc, servicePorts, serviceType)
|
||||
if formatCorrect {
|
||||
return svc, false
|
||||
}
|
||||
svc.Spec.Ports = servicePorts
|
||||
svc.Spec.Type = serviceType
|
||||
return svc, true
|
||||
}
|
||||
|
||||
// Determine if the service is in the correct format
|
||||
// getMasterServiceUpdateIfNeeded expects (servicePorts are correct
|
||||
// and service type matches).
|
||||
func checkServiceFormat(s *corev1.Service, ports []corev1.ServicePort, serviceType corev1.ServiceType) (formatCorrect bool) {
|
||||
if s.Spec.Type != serviceType {
|
||||
return false
|
||||
}
|
||||
if len(ports) != len(s.Spec.Ports) {
|
||||
return false
|
||||
}
|
||||
for i, port := range ports {
|
||||
if port != s.Spec.Ports[i] {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
Reference in New Issue
Block a user