fix(reconcile): ensure backup reconciliation succeeds during bats tests
* now stdout and stderr from Exec calls are properly returned so output of backup jobs can be checked * now runs backup reconciliation before seed jobs reconciliation * backups would never be performed during bats tests because of errors and/or requeuing requests from ensureSeedJobs
This commit is contained in:
		
							parent
							
								
									d8a0d7ff32
								
							
						
					
					
						commit
						d2b654fb40
					
				|  | @ -24,6 +24,7 @@ is_backup_not_exist() { | ||||||
| 
 | 
 | ||||||
| # Check if we have any backup | # Check if we have any backup | ||||||
| if is_backup_not_exist "${BACKUP_DIR}"; then | if is_backup_not_exist "${BACKUP_DIR}"; then | ||||||
|  |   _log "No backups exist in ${BACKUP_DIR}" | ||||||
|   echo "-1" |   echo "-1" | ||||||
|   exit 0 |   exit 0 | ||||||
| fi | fi | ||||||
|  | @ -32,6 +33,7 @@ fi | ||||||
| latest=$(find "${BACKUP_DIR}"/*.tar.* -maxdepth 0 -exec basename {} \; | sort -g | tail -n 1) | latest=$(find "${BACKUP_DIR}"/*.tar.* -maxdepth 0 -exec basename {} \; | sort -g | tail -n 1) | ||||||
| 
 | 
 | ||||||
| if [[ "${latest}" == "" ]]; then | if [[ "${latest}" == "" ]]; then | ||||||
|  |   _log "Could not get the latest backup." | ||||||
|   echo "-1" |   echo "-1" | ||||||
| else | else | ||||||
|   echo "${latest%%.*}" |   echo "${latest%%.*}" | ||||||
|  |  | ||||||
|  | @ -149,7 +149,7 @@ func (bar *BackupAndRestore) Restore(jenkinsClient jenkinsclient.Jenkins) error | ||||||
| 
 | 
 | ||||||
| 		backupNumberString := strings.TrimSuffix(backupNumberRaw.String(), "\n") | 		backupNumberString := strings.TrimSuffix(backupNumberRaw.String(), "\n") | ||||||
| 		if backupNumberString == noBackup { | 		if backupNumberString == noBackup { | ||||||
| 			bar.logger.V(log.VDebug).Info("Skipping restore backup, get latest action returned -1") | 			bar.logger.V(log.VDebug).Info("Skipping restore backup, get latest action returned -1 (no backups found)") | ||||||
| 			jenkins.Status.LastBackup = 0 | 			jenkins.Status.LastBackup = 0 | ||||||
| 			jenkins.Status.PendingBackup = 1 | 			jenkins.Status.PendingBackup = 1 | ||||||
| 			return bar.Client.Status().Update(context.TODO(), jenkins) | 			return bar.Client.Status().Update(context.TODO(), jenkins) | ||||||
|  | @ -209,7 +209,7 @@ func (bar *BackupAndRestore) Restore(jenkinsClient jenkinsclient.Jenkins) error | ||||||
| func (bar *BackupAndRestore) Backup(setBackupDoneBeforePodDeletion bool) error { | func (bar *BackupAndRestore) Backup(setBackupDoneBeforePodDeletion bool) error { | ||||||
| 	jenkins := bar.Configuration.Jenkins | 	jenkins := bar.Configuration.Jenkins | ||||||
| 	if len(jenkins.Spec.Backup.ContainerName) == 0 || jenkins.Spec.Backup.Action.Exec == nil { | 	if len(jenkins.Spec.Backup.ContainerName) == 0 || jenkins.Spec.Backup.Action.Exec == nil { | ||||||
| 		bar.logger.V(log.VDebug).Info("Skipping restore backup, backup restore not configured") | 		bar.logger.V(log.VDebug).Info("Skipping backup, backup creation not configured") | ||||||
| 		return nil | 		return nil | ||||||
| 	} | 	} | ||||||
| 	if jenkins.Status.PendingBackup == jenkins.Status.LastBackup { | 	if jenkins.Status.PendingBackup == jenkins.Status.LastBackup { | ||||||
|  |  | ||||||
|  | @ -165,7 +165,7 @@ func (c *Configuration) Exec(podName, containerName string, command []string) (s | ||||||
| 		return stdout, stderr, stackerr.Wrapf(err, "pod exec error operation on stream: stdout '%s' stderr '%s'", stdout.String(), stderr.String()) | 		return stdout, stderr, stackerr.Wrapf(err, "pod exec error operation on stream: stdout '%s' stderr '%s'", stdout.String(), stderr.String()) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return bytes.Buffer{}, bytes.Buffer{}, nil | 	return stdout, stderr, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // GetJenkinsMasterContainer returns the Jenkins master container from the CR.
 | // GetJenkinsMasterContainer returns the Jenkins master container from the CR.
 | ||||||
|  |  | ||||||
|  | @ -60,6 +60,14 @@ func (r *reconcileUserConfiguration) ReconcileOthers() (reconcile.Result, error) | ||||||
| 		return reconcile.Result{}, err | 		return reconcile.Result{}, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	if err := backupAndRestore.Backup(false); err != nil { | ||||||
|  | 		return reconcile.Result{}, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if err := backupAndRestore.EnsureBackupTrigger(); err != nil { | ||||||
|  | 		return reconcile.Result{}, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	result, err := r.ensureSeedJobs() | 	result, err := r.ensureSeedJobs() | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return reconcile.Result{}, err | 		return reconcile.Result{}, err | ||||||
|  | @ -68,13 +76,6 @@ func (r *reconcileUserConfiguration) ReconcileOthers() (reconcile.Result, error) | ||||||
| 		return result, nil | 		return result, nil | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if err := backupAndRestore.Backup(false); err != nil { |  | ||||||
| 		return reconcile.Result{}, err |  | ||||||
| 	} |  | ||||||
| 	if err := backupAndRestore.EnsureBackupTrigger(); err != nil { |  | ||||||
| 		return reconcile.Result{}, err |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return reconcile.Result{}, nil | 	return reconcile.Result{}, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -89,7 +89,11 @@ setup() { | ||||||
| @test "2.8  Helm: check backup" { | @test "2.8  Helm: check backup" { | ||||||
|   [[ ! -f "chart/jenkins-operator/deploy.tmp" ]] && skip "Jenkins helm chart have not been deployed correctly" |   [[ ! -f "chart/jenkins-operator/deploy.tmp" ]] && skip "Jenkins helm chart have not been deployed correctly" | ||||||
|   sleep 120 |   sleep 120 | ||||||
|   run ${KUBECTL} logs -l app.kubernetes.io/name=jenkins-operator --tail 10000 | 
 | ||||||
|  |   # use --tail -1 to get all logs and reduce flakiness | ||||||
|  |   # using -l to select a label usually sets --tail 10 | ||||||
|  |   run ${KUBECTL} logs -l app.kubernetes.io/name=jenkins-operator --tail -1 | ||||||
|  | 
 | ||||||
|   assert_success |   assert_success | ||||||
|   assert_output --partial "Performing backup '1'" |   assert_output --partial "Performing backup '1'" | ||||||
|   assert_output --partial "Backup completed '1', updating status" |   assert_output --partial "Backup completed '1', updating status" | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ _common_setup() { | ||||||
|     bats_load_library bats-support |     bats_load_library bats-support | ||||||
|     bats_load_library bats-assert |     bats_load_library bats-assert | ||||||
|     bats_load_library bats-file |     bats_load_library bats-file | ||||||
|     bats_load_library bats-detik/detik.bash |     bats_load_library bats-detik/lib/detik.bash | ||||||
| 
 | 
 | ||||||
|     CONTEXT="kind-jenkins" |     CONTEXT="kind-jenkins" | ||||||
|     export DETIK_CLIENT_NAME="kubectl" |     export DETIK_CLIENT_NAME="kubectl" | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue