func newService()

in pkg/resources/statefulset/service.go [17:68]


func newService(ndb *v1.NdbCluster, ports []int32, nodeType string, headLess, loadBalancer bool) *corev1.Service {

	// Default Service Type is ClusterIP
	var clusterIP string
	serviceType := corev1.ServiceTypeClusterIP
	if loadBalancer {
		// create a LoadBalancer
		serviceType = corev1.ServiceTypeLoadBalancer
	} else if headLess {
		// create a headless service
		clusterIP = corev1.ClusterIPNone
	}

	serviceResourceLabel := nodeType + "-service"

	// Label for the Service Resource
	serviceLabel := ndb.GetCompleteLabels(map[string]string{
		constants.ClusterResourceTypeLabel: serviceResourceLabel,
	})

	// Label Selector for the pods
	selectorLabel := ndb.GetCompleteLabels(map[string]string{
		constants.ClusterNodeTypeLabel: nodeType,
	})

	var servicePorts []corev1.ServicePort
	for i, port := range ports {
		servicePorts = append(servicePorts, corev1.ServicePort{
			Name: fmt.Sprintf("%s-port-%d", serviceResourceLabel, i),
			Port: port,
		})
	}

	// build a Service
	svc := &corev1.Service{
		ObjectMeta: metav1.ObjectMeta{
			Labels:          serviceLabel,
			Name:            ndb.GetServiceName(nodeType),
			Namespace:       ndb.GetNamespace(),
			OwnerReferences: ndb.GetOwnerReferences(),
		},
		Spec: corev1.ServiceSpec{
			PublishNotReadyAddresses: true,
			Ports:                    servicePorts,
			Selector:                 selectorLabel,
			ClusterIP:                clusterIP,
			Type:                     serviceType,
		},
	}

	return svc
}