From 32a6245e0f0af0fd43dc2d04863d47224acdbe7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20S=C4=99k?= Date: Tue, 12 Nov 2019 09:32:18 +0100 Subject: [PATCH] Fix minor issues --- .../backuprestore/backuprestore.go | 6 ++++ .../jenkins/configuration/base/reconcile.go | 32 +++++++++---------- .../jenkins/configuration/configuration.go | 8 +++++ .../jenkins/notifications/reason/reason.go | 12 +++++-- 4 files changed, 38 insertions(+), 20 deletions(-) diff --git a/pkg/controller/jenkins/configuration/backuprestore/backuprestore.go b/pkg/controller/jenkins/configuration/backuprestore/backuprestore.go index bf067de8..0ad43ffd 100644 --- a/pkg/controller/jenkins/configuration/backuprestore/backuprestore.go +++ b/pkg/controller/jenkins/configuration/backuprestore/backuprestore.go @@ -244,6 +244,12 @@ func (bar *BackupAndRestore) StopBackupTrigger() { triggers.stop(bar.logger, bar.jenkins.Namespace, bar.jenkins.Name) } +//IsBackupTriggerEnabled returns true if the backup trigger is enabled +func (bar *BackupAndRestore) IsBackupTriggerEnabled() bool { + _, enabled := triggers.get(bar.jenkins.Namespace, bar.jenkins.Name) + return enabled +} + func (bar *BackupAndRestore) startBackupTrigger() { bar.logger.Info("Starting backup trigger") ticker := time.NewTicker(time.Duration(bar.jenkins.Spec.Backup.Interval) * time.Second) diff --git a/pkg/controller/jenkins/configuration/base/reconcile.go b/pkg/controller/jenkins/configuration/base/reconcile.go index 259e0a61..af2e0f7b 100644 --- a/pkg/controller/jenkins/configuration/base/reconcile.go +++ b/pkg/controller/jenkins/configuration/base/reconcile.go @@ -433,9 +433,15 @@ func (r *ReconcileJenkinsBaseConfiguration) ensureJenkinsMasterPod(meta metav1.O return reconcile.Result{}, stackerr.WithStack(err) } - if currentJenkinsMasterPod != nil && isPodTerminating(*currentJenkinsMasterPod) && r.Configuration.Jenkins.Status.UserConfigurationCompletedTime != nil { + if currentJenkinsMasterPod == nil { + return reconcile.Result{Requeue: true}, nil + } + + if r.IsJenkinsTerminating(*currentJenkinsMasterPod) && r.Configuration.Jenkins.Status.UserConfigurationCompletedTime != nil { backupAndRestore := backuprestore.New(r.Client, r.ClientSet, r.logger, r.Configuration.Jenkins, *r.config) - backupAndRestore.StopBackupTrigger() + if backupAndRestore.IsBackupTriggerEnabled() { + backupAndRestore.StopBackupTrigger() + } if r.Configuration.Jenkins.Spec.Backup.MakeBackupBeforePodDeletion { if r.Configuration.Jenkins.Status.LastBackup == r.Configuration.Jenkins.Status.PendingBackup && !r.Configuration.Jenkins.Status.BackupDoneBeforePodDeletion { r.Configuration.Jenkins.Status.PendingBackup = r.Configuration.Jenkins.Status.PendingBackup + 1 @@ -452,10 +458,6 @@ func (r *ReconcileJenkinsBaseConfiguration) ensureJenkinsMasterPod(meta metav1.O return reconcile.Result{Requeue: true}, nil } - if currentJenkinsMasterPod == nil { - return reconcile.Result{Requeue: true}, nil - } - restartReason := r.checkForPodRecreation(*currentJenkinsMasterPod, userAndPasswordHash) if restartReason.HasMessages() { for _, msg := range restartReason.Verbose() { @@ -481,10 +483,6 @@ func (r *ReconcileJenkinsBaseConfiguration) calculateUserAndPasswordHash() (stri return base64.StdEncoding.EncodeToString(hash.Sum(nil)), nil } -func isPodTerminating(pod corev1.Pod) bool { - return pod.ObjectMeta.DeletionTimestamp != nil -} - func (r *ReconcileJenkinsBaseConfiguration) checkForPodRecreation(currentJenkinsMasterPod corev1.Pod, userAndPasswordHash string) reason.Reason { var messages []string var verbose []string @@ -578,7 +576,7 @@ func (r *ReconcileJenkinsBaseConfiguration) checkForPodRecreation(currentJenkins verbose = append(verbose, verboseMessages...) } - return reason.NewPodRestart(reason.KubernetesSource, messages, verbose...) + return reason.NewPodRestart(reason.OperatorSource, messages, verbose...) } func (r *ReconcileJenkinsBaseConfiguration) compareContainers(expected corev1.Container, actual corev1.Container) (messages []string, verbose []string) { @@ -713,17 +711,17 @@ func (r *ReconcileJenkinsBaseConfiguration) detectJenkinsMasterPodStartingIssues func (r *ReconcileJenkinsBaseConfiguration) filterEvents(source corev1.EventList, jenkinsMasterPod corev1.Pod) []string { events := []string{} - for _, event := range source.Items { - if r.Configuration.Jenkins.Status.ProvisionStartTime.UTC().After(event.LastTimestamp.UTC()) { + for _, eventItem := range source.Items { + if r.Configuration.Jenkins.Status.ProvisionStartTime.UTC().After(eventItem.LastTimestamp.UTC()) { continue } - if event.Type == corev1.EventTypeNormal { + if eventItem.Type == corev1.EventTypeNormal { continue } - if !strings.HasPrefix(event.ObjectMeta.Name, jenkinsMasterPod.Name) { + if !strings.HasPrefix(eventItem.ObjectMeta.Name, jenkinsMasterPod.Name) { continue } - events = append(events, fmt.Sprintf("Message: %s Subobject: %s", event.Message, event.InvolvedObject.FieldPath)) + events = append(events, fmt.Sprintf("Message: %s Subobject: %s", eventItem.Message, eventItem.InvolvedObject.FieldPath)) } return events @@ -735,7 +733,7 @@ func (r *ReconcileJenkinsBaseConfiguration) waitForJenkins(meta metav1.ObjectMet return reconcile.Result{}, err } - if jenkinsMasterPod.ObjectMeta.DeletionTimestamp != nil { + if r.IsJenkinsTerminating(*jenkinsMasterPod) { r.logger.V(log.VDebug).Info("Jenkins master pod is terminating") return reconcile.Result{Requeue: true, RequeueAfter: time.Second * 5}, nil } diff --git a/pkg/controller/jenkins/configuration/configuration.go b/pkg/controller/jenkins/configuration/configuration.go index c4155d4b..c05db7d0 100644 --- a/pkg/controller/jenkins/configuration/configuration.go +++ b/pkg/controller/jenkins/configuration/configuration.go @@ -35,6 +35,10 @@ func (c *Configuration) RestartJenkinsMasterPod(reason reason.Reason) error { return err } + if c.IsJenkinsTerminating(*currentJenkinsMasterPod) { + return nil + } + *c.Notifications <- event.Event{ Jenkins: *c.Jenkins, Phase: event.PhaseBase, @@ -55,6 +59,10 @@ func (c *Configuration) getJenkinsMasterPod() (*corev1.Pod, error) { return currentJenkinsMasterPod, nil } +func (c *Configuration) IsJenkinsTerminating(pod corev1.Pod) bool { + return pod.ObjectMeta.DeletionTimestamp != nil +} + // CreateResource is creating kubernetes resource and references it to Jenkins CR func (c *Configuration) CreateResource(obj metav1.Object) error { runtimeObj, ok := obj.(runtime.Object) diff --git a/pkg/controller/jenkins/notifications/reason/reason.go b/pkg/controller/jenkins/notifications/reason/reason.go index f19a54e0..3992ee5c 100644 --- a/pkg/controller/jenkins/notifications/reason/reason.go +++ b/pkg/controller/jenkins/notifications/reason/reason.go @@ -72,13 +72,19 @@ func NewUndefined(source Source, short []string, verbose ...string) *Undefined { // NewPodRestart returns new instance of PodRestart func NewPodRestart(source Source, short []string, verbose ...string) *PodRestart { - restartPodMessage := "Jenkins master pod restarted by:" + restartPodMessage := fmt.Sprintf("Jenkins master pod restarted by %s:", source) if len(short) == 1 { - short[0] = fmt.Sprintf("%s %s", restartPodMessage, short[0]) + short = []string{fmt.Sprintf("%s %s", restartPodMessage, short[0])} } else if len(short) > 1 { short = append([]string{restartPodMessage}, short...) } + if len(verbose) == 1 { + verbose = []string{fmt.Sprintf("%s %s", restartPodMessage, verbose[0])} + } else if len(verbose) > 1 { + verbose = append([]string{restartPodMessage}, verbose...) + } + return &PodRestart{ Undefined{ source: source, @@ -138,7 +144,7 @@ func NewBaseConfigurationComplete(source Source, short []string, verbose ...stri Undefined{ source: source, short: short, - verbose: verbose, + verbose: checkIfVerboseEmpty(short, verbose), }, } }