func()

in app/registry/backup_schedule.go [17:77]


func (a *App) prepareBackupSchedule(ctx *gin.Context, r *registry, values *Values,
	secrets map[string]map[string]interface{}, mrActions *[]string) (bool, error) {
	globalRaw, ok := values.OriginalYaml[globalIndex]
	if !ok {
		globalRaw = make(map[string]interface{})
	}
	globalDict := globalRaw.(map[string]interface{})

	if r.BackupScheduleEnabled == "" && values.Global.RegistryBackup.Enabled {
		values.Global.RegistryBackup.Enabled = false
		globalDict[registryBackupIndex] = values.Global.RegistryBackup
		values.OriginalYaml[globalIndex] = globalDict

		*mrActions = append(*mrActions, MRActionBackupSchedule)
		return true, nil
	}

	if r.BackupScheduleEnabled != "" {
		days, err := strconv.ParseInt(r.CronScheduleDays, 10, 64)
		if err != nil {
			return false, fmt.Errorf("wrong backup days: %w", err)
		}

		valuesChanged, err := a.registryBackupValuesChanged(values, r, int(days))
		if err != nil {
			return false, fmt.Errorf("unable to check if backup values changed, %w", err)
		}

		if !valuesChanged {
			return false, nil
		}

		values.Global.RegistryBackup.ExpiresInDays = int(days)
		values.Global.RegistryBackup.Schedule = r.CronSchedule
		values.Global.RegistryBackup.Enabled = true

		values.Global.RegistryBackup.OBC.CronExpression = r.OBCCronExpression
		values.Global.RegistryBackup.OBC.BackupBucket = r.OBCBackupBucket
		values.Global.RegistryBackup.OBC.Endpoint = r.OBCEndpoint

		if r.OBCLogin != "" && r.OBCPassword != "" {
			vaultPath := a.vaultRegistryPathKey(r.Name, fmt.Sprintf("%s-%s", "buckets-backup",
				time.Now().Format("20060201T150405Z")))
			values.Global.RegistryBackup.OBC.Credentials = vaultPath

			secrets[vaultPath] = map[string]interface{}{
				a.Config.BackupBucketAccessKeyID:     r.OBCLogin,
				a.Config.BackupBucketSecretAccessKey: r.OBCPassword,
			}
		}

		globalDict[registryBackupIndex] = values.Global.RegistryBackup
		values.OriginalYaml[globalIndex] = globalDict

		*mrActions = append(*mrActions, MRActionBackupSchedule)

		return true, nil
	}

	return false, nil
}