Fixed targetPort value
Made the targetPort in Jenkins pod a fixed value. Previously users encountered issue with changing values. Added test comparing expected and actual targetPort values.
This commit is contained in:
		
							parent
							
								
									89c4fc860f
								
							
						
					
					
						commit
						ea5ad56012
					
				|  | @ -13,6 +13,7 @@ import ( | |||
| 	jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/client" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/configuration" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/configuration/base/resources" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/constants" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/groovy" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/log" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/notifications/reason" | ||||
|  | @ -175,12 +176,12 @@ func (r *ReconcileJenkinsBaseConfiguration) ensureResourcesRequiredForJenkinsPod | |||
| 	r.logger.V(log.VDebug).Info("Extra role bindings are present") | ||||
| 
 | ||||
| 	httpServiceName := resources.GetJenkinsHTTPServiceName(r.Configuration.Jenkins) | ||||
| 	if err := r.createService(metaObject, httpServiceName, r.Configuration.Jenkins.Spec.Service); err != nil { | ||||
| 	if err := r.createService(metaObject, httpServiceName, r.Configuration.Jenkins.Spec.Service, constants.DefaultHTTPPortInt32); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	r.logger.V(log.VDebug).Info("Jenkins HTTP Service is present") | ||||
| 
 | ||||
| 	if err := r.createService(metaObject, resources.GetJenkinsSlavesServiceName(r.Configuration.Jenkins), r.Configuration.Jenkins.Spec.SlaveService); err != nil { | ||||
| 	if err := r.createService(metaObject, resources.GetJenkinsSlavesServiceName(r.Configuration.Jenkins), r.Configuration.Jenkins.Spec.SlaveService, constants.DefaultSlavePortInt32); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	r.logger.V(log.VDebug).Info("Jenkins slave Service is present") | ||||
|  |  | |||
|  | @ -9,6 +9,7 @@ import ( | |||
| 	stackerr "github.com/pkg/errors" | ||||
| 
 | ||||
| 	corev1 "k8s.io/api/core/v1" | ||||
| 	"k8s.io/apimachinery/pkg/util/intstr" | ||||
| 
 | ||||
| 	"net" | ||||
| 	"strings" | ||||
|  | @ -18,7 +19,7 @@ import ( | |||
| const ServiceKind = "Service" | ||||
| 
 | ||||
| // UpdateService returns new service with override fields from config
 | ||||
| func UpdateService(actual corev1.Service, config v1alpha2.Service) corev1.Service { | ||||
| func UpdateService(actual corev1.Service, config v1alpha2.Service, targetPort int32) corev1.Service { | ||||
| 	actual.ObjectMeta.Annotations = config.Annotations | ||||
| 	for key, value := range config.Labels { | ||||
| 		actual.ObjectMeta.Labels[key] = value | ||||
|  | @ -30,6 +31,7 @@ func UpdateService(actual corev1.Service, config v1alpha2.Service) corev1.Servic | |||
| 		actual.Spec.Ports = []corev1.ServicePort{{}} | ||||
| 	} | ||||
| 	actual.Spec.Ports[0].Port = config.Port | ||||
| 	actual.Spec.Ports[0].TargetPort = intstr.IntOrString{IntVal: targetPort, Type: intstr.Int} | ||||
| 	if config.NodePort != 0 { | ||||
| 		actual.Spec.Ports[0].NodePort = config.NodePort | ||||
| 	} | ||||
|  |  | |||
|  | @ -13,7 +13,7 @@ import ( | |||
| 	"k8s.io/apimachinery/pkg/types" | ||||
| ) | ||||
| 
 | ||||
| func (r *ReconcileJenkinsBaseConfiguration) createService(meta metav1.ObjectMeta, name string, config v1alpha2.Service) error { | ||||
| func (r *ReconcileJenkinsBaseConfiguration) createService(meta metav1.ObjectMeta, name string, config v1alpha2.Service, targetPort int32) error { | ||||
| 	service := corev1.Service{} | ||||
| 	err := r.Client.Get(context.TODO(), types.NamespacedName{Name: name, Namespace: meta.Namespace}, &service) | ||||
| 	if err != nil && apierrors.IsNotFound(err) { | ||||
|  | @ -26,7 +26,7 @@ func (r *ReconcileJenkinsBaseConfiguration) createService(meta metav1.ObjectMeta | |||
| 			Spec: corev1.ServiceSpec{ | ||||
| 				Selector: meta.Labels, | ||||
| 			}, | ||||
| 		}, config) | ||||
| 		}, config, targetPort) | ||||
| 		if err = r.CreateResource(&service); err != nil { | ||||
| 			return stackerr.WithStack(err) | ||||
| 		} | ||||
|  | @ -35,6 +35,6 @@ func (r *ReconcileJenkinsBaseConfiguration) createService(meta metav1.ObjectMeta | |||
| 	} | ||||
| 
 | ||||
| 	service.Spec.Selector = meta.Labels // make sure that user won't break service by hand
 | ||||
| 	service = resources.UpdateService(service, config) | ||||
| 	service = resources.UpdateService(service, config, targetPort) | ||||
| 	return stackerr.WithStack(r.UpdateResource(&service)) | ||||
| } | ||||
|  |  | |||
|  | @ -10,6 +10,7 @@ import ( | |||
| 	jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/client" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/configuration/base" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/configuration/base/resources" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/constants" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/groovy" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/plugins" | ||||
| 
 | ||||
|  | @ -20,6 +21,7 @@ import ( | |||
| 	corev1 "k8s.io/api/core/v1" | ||||
| 	"k8s.io/apimachinery/pkg/api/resource" | ||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||
| 	"k8s.io/apimachinery/pkg/util/intstr" | ||||
| ) | ||||
| 
 | ||||
| const e2e = "e2e" | ||||
|  | @ -92,6 +94,7 @@ func TestConfiguration(t *testing.T) { | |||
| 	createKubernetesCredentialsProviderSecret(t, namespace, mySeedJob) | ||||
| 	waitForJenkinsBaseConfigurationToComplete(t, jenkins) | ||||
| 	verifyJenkinsMasterPodAttributes(t, jenkins) | ||||
| 	verifyServices(t, jenkins) | ||||
| 	jenkinsClient, cleanUpFunc := verifyJenkinsAPIConnection(t, jenkins, namespace) | ||||
| 	defer cleanUpFunc() | ||||
| 	verifyPlugins(t, jenkinsClient, jenkins) | ||||
|  | @ -370,6 +373,13 @@ if (!"%s".equals(Jenkins.instance.systemMessage)) { | |||
| 	assert.NoError(t, err, logs) | ||||
| } | ||||
| 
 | ||||
| func verifyServices(t *testing.T, jenkins *v1alpha2.Jenkins) { | ||||
| 	jenkinsHTTPService := getJenkinsService(t, jenkins, "http") | ||||
| 	jenkinsSlaveService := getJenkinsService(t, jenkins, "slave") | ||||
| 	assert.Equal(t, intstr.IntOrString{IntVal: constants.DefaultHTTPPortInt32, Type: intstr.Int}, jenkinsHTTPService.Spec.Ports[0].TargetPort) | ||||
| 	assert.Equal(t, intstr.IntOrString{IntVal: constants.DefaultSlavePortInt32, Type: intstr.Int}, jenkinsSlaveService.Spec.Ports[0].TargetPort) | ||||
| } | ||||
| 
 | ||||
| func assertMapContainsElementsFromAnotherMap(t *testing.T, expected map[string]string, actual map[string]string) { | ||||
| 	for key, expectedValue := range expected { | ||||
| 		actualValue, keyExists := actual[key] | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ package e2e | |||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"fmt" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" | ||||
|  | @ -16,6 +17,7 @@ import ( | |||
| 	corev1 "k8s.io/api/core/v1" | ||||
| 	rbacv1 "k8s.io/api/rbac/v1" | ||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||
| 	"k8s.io/apimachinery/pkg/fields" | ||||
| 	"k8s.io/apimachinery/pkg/labels" | ||||
| 	"k8s.io/apimachinery/pkg/types" | ||||
| 	"k8s.io/apimachinery/pkg/util/intstr" | ||||
|  | @ -236,3 +238,16 @@ func restartJenkinsMasterPod(t *testing.T, jenkins *v1alpha2.Jenkins) { | |||
| 	} | ||||
| 	t.Log("Jenkins master pod has been restarted") | ||||
| } | ||||
| 
 | ||||
| func getJenkinsService(t *testing.T, jenkins *v1alpha2.Jenkins, serviceKind string) *corev1.Service { | ||||
| 	serviceName := constants.OperatorName + "-" + serviceKind + "-" + jenkins.ObjectMeta.Name | ||||
| 	lo := metav1.ListOptions{ | ||||
| 		FieldSelector: fields.SelectorFromSet(fields.Set{"metadata.name": serviceName}).String(), | ||||
| 	} | ||||
| 	serviceList, err := framework.Global.KubeClient.CoreV1().Services(jenkins.Namespace).List(lo) | ||||
| 
 | ||||
| 	require.NoError(t, err) | ||||
| 	require.Equal(t, 1, len(serviceList.Items), fmt.Sprintf("'%s' service not found", serviceName)) | ||||
| 
 | ||||
| 	return &serviceList.Items[0] | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue