diff --git a/changelogs/unreleased/8139-blackpiglet b/changelogs/unreleased/8139-blackpiglet new file mode 100644 index 000000000..1d23f2c3b --- /dev/null +++ b/changelogs/unreleased/8139-blackpiglet @@ -0,0 +1 @@ +Add resource modifier for velero restore describe CLI diff --git a/pkg/cmd/util/output/restore_describer.go b/pkg/cmd/util/output/restore_describer.go index 103ad12d8..55363b4b6 100644 --- a/pkg/cmd/util/output/restore_describer.go +++ b/pkg/cmd/util/output/restore_describer.go @@ -27,6 +27,7 @@ import ( "github.com/vmware-tanzu/velero/internal/volume" + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kbclient "sigs.k8s.io/controller-runtime/pkg/client" @@ -39,7 +40,15 @@ import ( "github.com/vmware-tanzu/velero/pkg/util/results" ) -func DescribeRestore(ctx context.Context, kbClient kbclient.Client, restore *velerov1api.Restore, podVolumeRestores []velerov1api.PodVolumeRestore, details bool, insecureSkipTLSVerify bool, caCertFile string) string { +func DescribeRestore( + ctx context.Context, + kbClient kbclient.Client, + restore *velerov1api.Restore, + podVolumeRestores []velerov1api.PodVolumeRestore, + details bool, + insecureSkipTLSVerify bool, + caCertFile string, +) string { return Describe(func(d *Describer) { d.DescribeMetadata(restore.ObjectMeta) @@ -196,6 +205,11 @@ func DescribeRestore(ctx context.Context, kbClient kbclient.Client, restore *vel d.Println() d.Printf("Preserve Service NodePorts:\t%s\n", BoolPointerString(restore.Spec.PreserveNodePorts, "false", "true", "auto")) + if restore.Spec.ResourceModifier != nil { + d.Println() + DescribeResourceModifier(d, restore.Spec.ResourceModifier) + } + describeUploaderConfigForRestore(d, restore.Spec) d.Println() @@ -472,3 +486,10 @@ func describeRestoreResourceList(ctx context.Context, kbClient kbclient.Client, d.Printf("\t%s:\n\t\t- %s\n", gvk, strings.Join(resourceList[gvk], "\n\t\t- ")) } } + +// DescribeResourceModifier describes resource policies in human-readable format +func DescribeResourceModifier(d *Describer, resModifier *v1.TypedLocalObjectReference) { + d.Printf("Resource modifier:\n") + d.Printf("\tType:\t%s\n", resModifier.Kind) + d.Printf("\tName:\t%s\n", resModifier.Name) +} diff --git a/pkg/cmd/util/output/restore_describer_test.go b/pkg/cmd/util/output/restore_describer_test.go index 1a1e0100a..94e15c61c 100644 --- a/pkg/cmd/util/output/restore_describer_test.go +++ b/pkg/cmd/util/output/restore_describer_test.go @@ -2,15 +2,16 @@ package output import ( "bytes" + "fmt" "testing" "text/tabwriter" "time" - "github.com/vmware-tanzu/velero/internal/volume" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + v1 "k8s.io/api/core/v1" + "github.com/vmware-tanzu/velero/internal/volume" velerov1api "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" "github.com/vmware-tanzu/velero/pkg/builder" "github.com/vmware-tanzu/velero/pkg/itemoperation" @@ -389,3 +390,28 @@ CSI Snapshot Restores: }) } } + +func TestDescribeResourceModifier(t *testing.T) { + d := &Describer{ + Prefix: "", + out: &tabwriter.Writer{}, + buf: &bytes.Buffer{}, + } + + d.out.Init(d.buf, 0, 8, 2, ' ', 0) + + DescribeResourceModifier(d, &v1.TypedLocalObjectReference{ + APIGroup: &v1.SchemeGroupVersion.Group, + Kind: "ConfigMap", + Name: "resourceModifier", + }) + d.out.Flush() + + expectOutput := `Resource modifier: + Type: ConfigMap + Name: resourceModifier +` + + fmt.Println(d.buf.String()) + require.Equal(t, expectOutput, d.buf.String()) +}