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"
|
jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/client"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/configuration"
|
"github.com/jenkinsci/kubernetes-operator/pkg/configuration"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/configuration/base/resources"
|
"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/groovy"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/log"
|
"github.com/jenkinsci/kubernetes-operator/pkg/log"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/notifications/reason"
|
"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")
|
r.logger.V(log.VDebug).Info("Extra role bindings are present")
|
||||||
|
|
||||||
httpServiceName := resources.GetJenkinsHTTPServiceName(r.Configuration.Jenkins)
|
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
|
return err
|
||||||
}
|
}
|
||||||
r.logger.V(log.VDebug).Info("Jenkins HTTP Service is present")
|
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
|
return err
|
||||||
}
|
}
|
||||||
r.logger.V(log.VDebug).Info("Jenkins slave Service is present")
|
r.logger.V(log.VDebug).Info("Jenkins slave Service is present")
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import (
|
||||||
stackerr "github.com/pkg/errors"
|
stackerr "github.com/pkg/errors"
|
||||||
|
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
|
"k8s.io/apimachinery/pkg/util/intstr"
|
||||||
|
|
||||||
"net"
|
"net"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
@ -18,7 +19,7 @@ import (
|
||||||
const ServiceKind = "Service"
|
const ServiceKind = "Service"
|
||||||
|
|
||||||
// UpdateService returns new service with override fields from config
|
// 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
|
actual.ObjectMeta.Annotations = config.Annotations
|
||||||
for key, value := range config.Labels {
|
for key, value := range config.Labels {
|
||||||
actual.ObjectMeta.Labels[key] = value
|
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 = []corev1.ServicePort{{}}
|
||||||
}
|
}
|
||||||
actual.Spec.Ports[0].Port = config.Port
|
actual.Spec.Ports[0].Port = config.Port
|
||||||
|
actual.Spec.Ports[0].TargetPort = intstr.IntOrString{IntVal: targetPort, Type: intstr.Int}
|
||||||
if config.NodePort != 0 {
|
if config.NodePort != 0 {
|
||||||
actual.Spec.Ports[0].NodePort = config.NodePort
|
actual.Spec.Ports[0].NodePort = config.NodePort
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ import (
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"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{}
|
service := corev1.Service{}
|
||||||
err := r.Client.Get(context.TODO(), types.NamespacedName{Name: name, Namespace: meta.Namespace}, &service)
|
err := r.Client.Get(context.TODO(), types.NamespacedName{Name: name, Namespace: meta.Namespace}, &service)
|
||||||
if err != nil && apierrors.IsNotFound(err) {
|
if err != nil && apierrors.IsNotFound(err) {
|
||||||
|
|
@ -26,7 +26,7 @@ func (r *ReconcileJenkinsBaseConfiguration) createService(meta metav1.ObjectMeta
|
||||||
Spec: corev1.ServiceSpec{
|
Spec: corev1.ServiceSpec{
|
||||||
Selector: meta.Labels,
|
Selector: meta.Labels,
|
||||||
},
|
},
|
||||||
}, config)
|
}, config, targetPort)
|
||||||
if err = r.CreateResource(&service); err != nil {
|
if err = r.CreateResource(&service); err != nil {
|
||||||
return stackerr.WithStack(err)
|
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.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))
|
return stackerr.WithStack(r.UpdateResource(&service))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ import (
|
||||||
jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/client"
|
jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/client"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/configuration/base"
|
"github.com/jenkinsci/kubernetes-operator/pkg/configuration/base"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/configuration/base/resources"
|
"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/groovy"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/plugins"
|
"github.com/jenkinsci/kubernetes-operator/pkg/plugins"
|
||||||
|
|
||||||
|
|
@ -20,6 +21,7 @@ import (
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/api/resource"
|
"k8s.io/apimachinery/pkg/api/resource"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/apimachinery/pkg/util/intstr"
|
||||||
)
|
)
|
||||||
|
|
||||||
const e2e = "e2e"
|
const e2e = "e2e"
|
||||||
|
|
@ -92,6 +94,7 @@ func TestConfiguration(t *testing.T) {
|
||||||
createKubernetesCredentialsProviderSecret(t, namespace, mySeedJob)
|
createKubernetesCredentialsProviderSecret(t, namespace, mySeedJob)
|
||||||
waitForJenkinsBaseConfigurationToComplete(t, jenkins)
|
waitForJenkinsBaseConfigurationToComplete(t, jenkins)
|
||||||
verifyJenkinsMasterPodAttributes(t, jenkins)
|
verifyJenkinsMasterPodAttributes(t, jenkins)
|
||||||
|
verifyServices(t, jenkins)
|
||||||
jenkinsClient, cleanUpFunc := verifyJenkinsAPIConnection(t, jenkins, namespace)
|
jenkinsClient, cleanUpFunc := verifyJenkinsAPIConnection(t, jenkins, namespace)
|
||||||
defer cleanUpFunc()
|
defer cleanUpFunc()
|
||||||
verifyPlugins(t, jenkinsClient, jenkins)
|
verifyPlugins(t, jenkinsClient, jenkins)
|
||||||
|
|
@ -370,6 +373,13 @@ if (!"%s".equals(Jenkins.instance.systemMessage)) {
|
||||||
assert.NoError(t, err, logs)
|
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) {
|
func assertMapContainsElementsFromAnotherMap(t *testing.T, expected map[string]string, actual map[string]string) {
|
||||||
for key, expectedValue := range expected {
|
for key, expectedValue := range expected {
|
||||||
actualValue, keyExists := actual[key]
|
actualValue, keyExists := actual[key]
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ package e2e
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2"
|
||||||
|
|
@ -16,6 +17,7 @@ import (
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
rbacv1 "k8s.io/api/rbac/v1"
|
rbacv1 "k8s.io/api/rbac/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/apimachinery/pkg/fields"
|
||||||
"k8s.io/apimachinery/pkg/labels"
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
"k8s.io/apimachinery/pkg/util/intstr"
|
"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")
|
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