50 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
package resources
 | 
						|
 | 
						|
import (
 | 
						|
	corev1 "k8s.io/api/core/v1"
 | 
						|
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						|
	"k8s.io/apimachinery/pkg/util/intstr"
 | 
						|
)
 | 
						|
 | 
						|
func buildServiceTypeMeta() metav1.TypeMeta {
 | 
						|
	return metav1.TypeMeta{
 | 
						|
		Kind:       "Service",
 | 
						|
		APIVersion: "v1",
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// NewService builds the Kubernetes service resource
 | 
						|
func NewService(meta *metav1.ObjectMeta, minikube bool) *corev1.Service {
 | 
						|
	service := &corev1.Service{
 | 
						|
		TypeMeta:   buildServiceTypeMeta(),
 | 
						|
		ObjectMeta: *meta,
 | 
						|
		Spec: corev1.ServiceSpec{
 | 
						|
			Selector: meta.Labels,
 | 
						|
			// The first port have to be Jenkins http port because when run with minikube
 | 
						|
			// command 'minikube service' returns endpoints in the same sequence
 | 
						|
			Ports: []corev1.ServicePort{
 | 
						|
				{
 | 
						|
					Name:       httpPortName,
 | 
						|
					Port:       httpPortInt32,
 | 
						|
					TargetPort: intstr.FromInt(HTTPPortInt),
 | 
						|
				},
 | 
						|
				{
 | 
						|
					Name:       slavePortName,
 | 
						|
					Port:       slavePortInt32,
 | 
						|
					TargetPort: intstr.FromInt(slavePortInt),
 | 
						|
				},
 | 
						|
			},
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	if minikube {
 | 
						|
		// When running locally with minikube cluster Jenkins Service have to be exposed via node port
 | 
						|
		// to allow communication operator -> Jenkins API
 | 
						|
		service.Spec.Type = corev1.ServiceTypeNodePort
 | 
						|
	} else {
 | 
						|
		service.Spec.Type = corev1.ServiceTypeClusterIP
 | 
						|
	}
 | 
						|
 | 
						|
	return service
 | 
						|
}
 |