Fix minor issues

This commit is contained in:
Tomasz Sęk 2019-11-12 09:32:18 +01:00
parent ab65db22d3
commit 32a6245e0f
No known key found for this signature in database
GPG Key ID: DC356D23F6A644D0
4 changed files with 38 additions and 20 deletions

View File

@ -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)

View File

@ -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
}

View File

@ -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)

View File

@ -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),
},
}
}