diff --git a/pkg/cmd/cli/restore/logs.go b/pkg/cmd/cli/restore/logs.go index ae40440cc..2b6f6a14e 100644 --- a/pkg/cmd/cli/restore/logs.go +++ b/pkg/cmd/cli/restore/logs.go @@ -50,7 +50,10 @@ func NewLogsCommand(f client.Factory) *cobra.Command { cmd.Exit("Error checking for restore %q: %v", restoreName, err) } - if restore.Status.Phase != v1.RestorePhaseCompleted && restore.Status.Phase != v1.RestorePhaseFailed { + switch restore.Status.Phase { + case v1.RestorePhaseCompleted, v1.RestorePhaseFailed, v1.RestorePhasePartiallyFailed: + // terminal phases, don't exit. + default: cmd.Exit("Logs for restore %q are not available until it's finished processing. Please wait "+ "until the restore has a phase of Completed or Failed and try again.", restoreName) } diff --git a/pkg/cmd/util/output/restore_describer.go b/pkg/cmd/util/output/restore_describer.go index cbeed3fe7..8bc26cbe4 100644 --- a/pkg/cmd/util/output/restore_describer.go +++ b/pkg/cmd/util/output/restore_describer.go @@ -19,6 +19,7 @@ package output import ( "bytes" "encoding/json" + "fmt" "sort" "strings" @@ -35,7 +36,17 @@ func DescribeRestore(restore *v1.Restore, podVolumeRestores []v1.PodVolumeRestor d.DescribeMetadata(restore.ObjectMeta) d.Println() - d.Printf("Phase:\t%s\n", restore.Status.Phase) + phase := restore.Status.Phase + if phase == "" { + phase = v1.RestorePhaseNew + } + + resultsNote := "" + if phase == v1.RestorePhaseFailed || phase == v1.RestorePhasePartiallyFailed { + resultsNote = fmt.Sprintf(" (run velero restore describe %s or velero restore logs %s for more information)", restore.Name, restore.Name) + } + + d.Printf("Phase:\t%s%s\n", restore.Status.Phase, resultsNote) if len(restore.Status.ValidationErrors) > 0 { d.Println()