Skip to content

Commit 8af9ad2

Browse files
authored
Internal pagination when fetching resources for CLI dump (rancher#4588)
1 parent ae7f223 commit 8af9ad2

6 files changed

Lines changed: 551 additions & 118 deletions

File tree

e2e/single-cluster/cli_dump_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212

1313
. "github.com/onsi/ginkgo/v2"
1414
. "github.com/onsi/gomega"
15+
1516
"github.com/rancher/fleet/e2e/testenv"
1617
"github.com/rancher/fleet/internal/cmd/cli/dump"
1718
)

integrationtests/cli/dump/suite_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010

1111
. "github.com/onsi/ginkgo/v2"
1212
. "github.com/onsi/gomega"
13+
1314
corev1 "k8s.io/api/core/v1"
1415
"k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/scheme"
1516
"k8s.io/client-go/rest"

internal/cmd/builder.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@ func Command(obj Runnable, cmd cobra.Command) *cobra.Command {
108108

109109
flags := c.PersistentFlags()
110110
switch fieldType.Type.Kind() {
111+
case reflect.Int64:
112+
flags.Int64VarP((*int64)(unsafe.Pointer(v.Addr().Pointer())), name, alias, int64(defInt), usage)
111113
case reflect.Int:
112114
flags.IntVarP((*int)(unsafe.Pointer(v.Addr().Pointer())), name, alias, defInt, usage)
113115
case reflect.String:
@@ -151,6 +153,11 @@ func Command(obj Runnable, cmd cobra.Command) *cobra.Command {
151153
if err == nil && fv == defInt {
152154
_ = flags.Set(name, v)
153155
}
156+
case reflect.Int64:
157+
fv, err := flags.GetInt64(name)
158+
if err == nil && fv == int64(defInt) {
159+
_ = flags.Set(name, v)
160+
}
154161
default:
155162
// unsupported
156163
}

internal/cmd/cli/dump.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"os"
66

77
"github.com/spf13/cobra"
8+
89
ctrl "sigs.k8s.io/controller-runtime"
910
"sigs.k8s.io/controller-runtime/pkg/log"
1011
"sigs.k8s.io/controller-runtime/pkg/log/zap"
@@ -34,6 +35,7 @@ func NewDump() *cobra.Command {
3435
type Dump struct {
3536
FleetClient
3637
DumpPath string `usage:"Destination path for the dump" short:"p"`
38+
FetchLimit int64 `usage:"Limit number of items per resource that are fetched at once (0 means no limit)" short:"l" default:"500"`
3739
WithSecrets bool `usage:"Include secrets with full data"`
3840
WithSecretsMetadata bool `usage:"Include secrets with metadata only"`
3941
WithContent bool `usage:"Include Content resources with full data"`
@@ -68,10 +70,15 @@ func (d *Dump) Run(cmd *cobra.Command, args []string) error {
6870
return err
6971
}
7072

73+
if d.FetchLimit < 0 {
74+
return fmt.Errorf("fetch limit must be non-negative, got %d", d.FetchLimit)
75+
}
76+
7177
ctrl.SetLogger(zap.New(zap.UseFlagOptions(&zopts)))
7278
ctx := log.IntoContext(cmd.Context(), ctrl.Log)
7379

7480
opts := dump.Options{
81+
FetchLimit: d.FetchLimit,
7582
WithSecrets: d.WithSecrets,
7683
WithSecretsMetadata: d.WithSecretsMetadata,
7784
WithContent: d.WithContent,

0 commit comments

Comments
 (0)