in pkg/controllers/service_controller.go [51:91]
func (svcCtrl *serviceControl) ensureService(
ctx context.Context, sc *SyncContext,
ndbSfset statefulset.NdbStatefulSetInterface) (*corev1.Service, error) {
nc := sc.ndb
serviceName := nc.GetServiceName(ndbSfset.GetTypeName())
svc, err := svcCtrl.serviceLister.Services(nc.Namespace).Get(serviceName)
if err == nil {
// Service exists already
if err = sc.isOwnedByNdbCluster(svc); err != nil {
// But it is not owned by the NdbCluster resource
klog.Errorf(
"Attempting to create service %q failed as it exists already but not owned by NdbCluster resource %q",
serviceName, getNamespacedName(nc))
return nil, err
}
// Service already exists and is owned by nc
return svc, nil
}
if !apierrors.IsNotFound(err) {
// Error other than NotFound
klog.Errorf("Error getting Service %q from serviceLister : %s", serviceName, err)
return nil, err
}
// Service not found - create it
svc = ndbSfset.NewGoverningService(nc)
klog.Infof("Creating a new Service %q for NdbCluster resource %q", getNamespacedName(svc), getNamespacedName(sc.ndb))
svc, err = svcCtrl.getServiceInterface(sc.ndb.Namespace).Create(ctx, svc, metav1.CreateOptions{})
if err != nil && !apierrors.IsAlreadyExists(err) {
// Create failed. Ignore AlreadyExists error as it
// might have been caused due to an outdated cache read.
klog.Errorf("Error creating Service %q : %s", getNamespacedName(svc), err)
return nil, err
}
return svc, nil
}