func()

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
}