#229 Handle extra Jenkins master pod annotations

This commit is contained in:
Tomasz Sęk 2019-12-16 15:19:13 +01:00
parent 471470969c
commit e9f5df2eb3
No known key found for this signature in database
GPG Key ID: DC356D23F6A644D0
2 changed files with 72 additions and 7 deletions

View File

@ -76,7 +76,7 @@ func (r *ReconcileJenkinsBaseConfiguration) Reconcile() (reconcile.Result, jenki
}
r.logger.V(log.VDebug).Info("Jenkins master pod is present")
stopReconcileLoop, err := r.detectJenkinsMasterPodStartingIssues(metaObject)
stopReconcileLoop, err := r.detectJenkinsMasterPodStartingIssues()
if err != nil {
return reconcile.Result{}, nil, err
}
@ -84,7 +84,7 @@ func (r *ReconcileJenkinsBaseConfiguration) Reconcile() (reconcile.Result, jenki
return reconcile.Result{Requeue: false}, nil, nil
}
result, err = r.waitForJenkins(metaObject)
result, err = r.waitForJenkins()
if err != nil {
return reconcile.Result{}, nil, err
}
@ -93,7 +93,7 @@ func (r *ReconcileJenkinsBaseConfiguration) Reconcile() (reconcile.Result, jenki
}
r.logger.V(log.VDebug).Info("Jenkins master pod is ready")
jenkinsClient, err := r.ensureJenkinsClient(metaObject)
jenkinsClient, err := r.ensureJenkinsClient()
if err != nil {
return reconcile.Result{}, nil, err
}
@ -538,7 +538,7 @@ func (r *ReconcileJenkinsBaseConfiguration) checkForPodRecreation(currentJenkins
}
if len(r.Configuration.Jenkins.Spec.Master.Annotations) > 0 &&
!reflect.DeepEqual(r.Configuration.Jenkins.Spec.Master.Annotations, currentJenkinsMasterPod.ObjectMeta.Annotations) {
!comparePodAnnotations(r.Configuration.Jenkins.Spec.Master.Annotations, currentJenkinsMasterPod.ObjectMeta.Annotations) {
messages = append(messages, "Jenkins pod annotations have changed")
verbose = append(verbose, fmt.Sprintf("Jenkins pod annotations have changed, actual '%+v' required '%+v'",
currentJenkinsMasterPod.ObjectMeta.Annotations, r.Configuration.Jenkins.Spec.Master.Annotations))
@ -657,6 +657,20 @@ func (r *ReconcileJenkinsBaseConfiguration) compareContainers(expected corev1.Co
return messages, verbose
}
func comparePodAnnotations(expected, actual map[string]string) bool {
for expectedKey, expectedValue := range expected {
actualValue, found := actual[expectedKey]
if !found {
return false
}
if expectedValue != actualValue {
return false
}
}
return true
}
func compareEnv(expected, actual []corev1.EnvVar) bool {
var actualEnv []corev1.EnvVar
for _, env := range actual {
@ -696,7 +710,7 @@ func (r *ReconcileJenkinsBaseConfiguration) compareVolumes(actualPod corev1.Pod)
)
}
func (r *ReconcileJenkinsBaseConfiguration) detectJenkinsMasterPodStartingIssues(meta metav1.ObjectMeta) (stopReconcileLoop bool, err error) {
func (r *ReconcileJenkinsBaseConfiguration) detectJenkinsMasterPodStartingIssues() (stopReconcileLoop bool, err error) {
jenkinsMasterPod, err := r.getJenkinsMasterPod()
if err != nil {
return false, err
@ -744,7 +758,7 @@ func (r *ReconcileJenkinsBaseConfiguration) filterEvents(source corev1.EventList
return events
}
func (r *ReconcileJenkinsBaseConfiguration) waitForJenkins(meta metav1.ObjectMeta) (reconcile.Result, error) {
func (r *ReconcileJenkinsBaseConfiguration) waitForJenkins() (reconcile.Result, error) {
jenkinsMasterPod, err := r.getJenkinsMasterPod()
if err != nil {
return reconcile.Result{}, err
@ -785,7 +799,7 @@ func (r *ReconcileJenkinsBaseConfiguration) waitForJenkins(meta metav1.ObjectMet
return reconcile.Result{}, nil
}
func (r *ReconcileJenkinsBaseConfiguration) ensureJenkinsClient(meta metav1.ObjectMeta) (jenkinsclient.Jenkins, error) {
func (r *ReconcileJenkinsBaseConfiguration) ensureJenkinsClient() (jenkinsclient.Jenkins, error) {
jenkinsURL, err := jenkinsclient.BuildJenkinsAPIUrl(
r.Configuration.Jenkins.ObjectMeta.Namespace, resources.GetJenkinsHTTPServiceName(r.Configuration.Jenkins), r.Configuration.Jenkins.Spec.Service.Port, r.local, r.minikube)

View File

@ -647,3 +647,54 @@ func Test_compareEnv(t *testing.T) {
assert.False(t, got)
})
}
func TestComparePodAnnotations(t *testing.T) {
t.Run("empty", func(t *testing.T) {
expectedAnnotations := map[string]string{}
actualAnnotations := map[string]string{}
got := comparePodAnnotations(expectedAnnotations, actualAnnotations)
assert.True(t, got)
})
t.Run("the same", func(t *testing.T) {
expectedAnnotations := map[string]string{"one": "two"}
actualAnnotations := expectedAnnotations
got := comparePodAnnotations(expectedAnnotations, actualAnnotations)
assert.True(t, got)
})
t.Run("one extra annotation in pod", func(t *testing.T) {
expectedAnnotations := map[string]string{"one": "two"}
actualAnnotations := map[string]string{"one": "two", "three": "four"}
got := comparePodAnnotations(expectedAnnotations, actualAnnotations)
assert.True(t, got)
})
t.Run("one missing annotation", func(t *testing.T) {
expectedAnnotations := map[string]string{"one": "two"}
actualAnnotations := map[string]string{"three": "four"}
got := comparePodAnnotations(expectedAnnotations, actualAnnotations)
assert.False(t, got)
})
t.Run("one value is different", func(t *testing.T) {
expectedAnnotations := map[string]string{"one": "two"}
actualAnnotations := map[string]string{"one": "three"}
got := comparePodAnnotations(expectedAnnotations, actualAnnotations)
assert.False(t, got)
})
t.Run("one missing annotation and one value is different", func(t *testing.T) {
expectedAnnotations := map[string]string{"one": "two", "missing": "something"}
actualAnnotations := map[string]string{"one": "three"}
got := comparePodAnnotations(expectedAnnotations, actualAnnotations)
assert.False(t, got)
})
}