Skip to content

Commit

Permalink
Add pagination support for spire-server entry show command (#3135)
Browse files Browse the repository at this point in the history
Signed-off-by: Ryuma Yoshida <ryumyosh@zlab.co.jp>
  • Loading branch information
ryysud committed Jun 8, 2022
1 parent eec0a7c commit aaec611
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 7 deletions.
25 changes: 19 additions & 6 deletions cmd/spire-server/cli/entry/show.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ import (
"golang.org/x/net/context"
)

const listEntriesRequestPageSize = 500

// NewShowCommand creates a new "show" subcommand for "entry" command.
func NewShowCommand() cli.Command {
return newShowCommand(common_cli.DefaultEnv)
Expand Down Expand Up @@ -158,14 +160,25 @@ func (c *showCommand) fetchEntries(ctx context.Context, client entryv1.EntryClie
}
}

resp, err := client.ListEntries(ctx, &entryv1.ListEntriesRequest{
Filter: filter,
})
if err != nil {
return nil, fmt.Errorf("error fetching entries: %w", err)
pageToken := ""
var entries []*types.Entry

for {
resp, err := client.ListEntries(ctx, &entryv1.ListEntriesRequest{
PageSize: listEntriesRequestPageSize,
PageToken: pageToken,
Filter: filter,
})
if err != nil {
return nil, fmt.Errorf("error fetching entries: %w", err)
}
entries = append(entries, resp.Entries...)
if pageToken = resp.NextPageToken; pageToken == "" {
break
}
}

return resp.Entries, nil
return entries, nil
}

// fetchByEntryID uses the configured EntryID to fetch the appropriate registration entry
Expand Down
16 changes: 15 additions & 1 deletion cmd/spire-server/cli/entry/show_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,8 @@ func TestShow(t *testing.T) {
{
name: "List all entries (empty filter)",
expListReq: &entryv1.ListEntriesRequest{
Filter: &entryv1.ListEntriesRequest_Filter{},
PageSize: listEntriesRequestPageSize,
Filter: &entryv1.ListEntriesRequest_Filter{},
},
fakeListResp: fakeRespAll,
expOut: fmt.Sprintf("Found 4 entries\n%s%s%s%s",
Expand Down Expand Up @@ -92,6 +93,7 @@ func TestShow(t *testing.T) {
name: "List by parentID",
args: []string{"-parentID", "spiffe://example.org/father"},
expListReq: &entryv1.ListEntriesRequest{
PageSize: listEntriesRequestPageSize,
Filter: &entryv1.ListEntriesRequest_Filter{
ByParentId: &types.SPIFFEID{TrustDomain: "example.org", Path: "/father"},
},
Expand All @@ -111,6 +113,7 @@ func TestShow(t *testing.T) {
name: "List by SPIFFE ID",
args: []string{"-spiffeID", "spiffe://example.org/daughter"},
expListReq: &entryv1.ListEntriesRequest{
PageSize: listEntriesRequestPageSize,
Filter: &entryv1.ListEntriesRequest_Filter{
BySpiffeId: &types.SPIFFEID{TrustDomain: "example.org", Path: "/daughter"},
},
Expand All @@ -130,6 +133,7 @@ func TestShow(t *testing.T) {
name: "List by selectors: default matcher",
args: []string{"-selector", "foo:bar", "-selector", "bar:baz"},
expListReq: &entryv1.ListEntriesRequest{
PageSize: listEntriesRequestPageSize,
Filter: &entryv1.ListEntriesRequest_Filter{
BySelectors: &types.SelectorMatch{
Selectors: []*types.Selector{
Expand All @@ -149,6 +153,7 @@ func TestShow(t *testing.T) {
name: "List by selectors: exact matcher",
args: []string{"-selector", "foo:bar", "-selector", "bar:baz", "-matchSelectorsOn", "exact"},
expListReq: &entryv1.ListEntriesRequest{
PageSize: listEntriesRequestPageSize,
Filter: &entryv1.ListEntriesRequest_Filter{
BySelectors: &types.SelectorMatch{
Selectors: []*types.Selector{
Expand All @@ -168,6 +173,7 @@ func TestShow(t *testing.T) {
name: "List by selectors: superset matcher",
args: []string{"-selector", "foo:bar", "-selector", "bar:baz", "-matchSelectorsOn", "superset"},
expListReq: &entryv1.ListEntriesRequest{
PageSize: listEntriesRequestPageSize,
Filter: &entryv1.ListEntriesRequest_Filter{
BySelectors: &types.SelectorMatch{
Selectors: []*types.Selector{
Expand All @@ -187,6 +193,7 @@ func TestShow(t *testing.T) {
name: "List by selectors: subset matcher",
args: []string{"-selector", "foo:bar", "-selector", "bar:baz", "-matchSelectorsOn", "subset"},
expListReq: &entryv1.ListEntriesRequest{
PageSize: listEntriesRequestPageSize,
Filter: &entryv1.ListEntriesRequest_Filter{
BySelectors: &types.SelectorMatch{
Selectors: []*types.Selector{
Expand All @@ -206,6 +213,7 @@ func TestShow(t *testing.T) {
name: "List by selectors: Any matcher",
args: []string{"-selector", "foo:bar", "-selector", "bar:baz", "-matchSelectorsOn", "any"},
expListReq: &entryv1.ListEntriesRequest{
PageSize: listEntriesRequestPageSize,
Filter: &entryv1.ListEntriesRequest_Filter{
BySelectors: &types.SelectorMatch{
Selectors: []*types.Selector{
Expand Down Expand Up @@ -235,6 +243,7 @@ func TestShow(t *testing.T) {
name: "Server error",
args: []string{"-spiffeID", "spiffe://example.org/daughter"},
expListReq: &entryv1.ListEntriesRequest{
PageSize: listEntriesRequestPageSize,
Filter: &entryv1.ListEntriesRequest_Filter{
BySpiffeId: &types.SPIFFEID{TrustDomain: "example.org", Path: "/daughter"},
},
Expand All @@ -246,6 +255,7 @@ func TestShow(t *testing.T) {
name: "List by Federates With: default matcher",
args: []string{"-federatesWith", "spiffe://domain.test"},
expListReq: &entryv1.ListEntriesRequest{
PageSize: listEntriesRequestPageSize,
Filter: &entryv1.ListEntriesRequest_Filter{
ByFederatesWith: &types.FederatesWithMatch{
TrustDomains: []string{"spiffe://domain.test"},
Expand All @@ -262,6 +272,7 @@ func TestShow(t *testing.T) {
name: "List by Federates With: exact matcher",
args: []string{"-federatesWith", "spiffe://domain.test", "-matchFederatesWithOn", "exact"},
expListReq: &entryv1.ListEntriesRequest{
PageSize: listEntriesRequestPageSize,
Filter: &entryv1.ListEntriesRequest_Filter{
ByFederatesWith: &types.FederatesWithMatch{
TrustDomains: []string{"spiffe://domain.test"},
Expand All @@ -278,6 +289,7 @@ func TestShow(t *testing.T) {
name: "List by Federates With: Any matcher",
args: []string{"-federatesWith", "spiffe://domain.test", "-matchFederatesWithOn", "any"},
expListReq: &entryv1.ListEntriesRequest{
PageSize: listEntriesRequestPageSize,
Filter: &entryv1.ListEntriesRequest_Filter{
ByFederatesWith: &types.FederatesWithMatch{
TrustDomains: []string{"spiffe://domain.test"},
Expand All @@ -294,6 +306,7 @@ func TestShow(t *testing.T) {
name: "List by Federates With: superset matcher",
args: []string{"-federatesWith", "spiffe://domain.test", "-matchFederatesWithOn", "superset"},
expListReq: &entryv1.ListEntriesRequest{
PageSize: listEntriesRequestPageSize,
Filter: &entryv1.ListEntriesRequest_Filter{
ByFederatesWith: &types.FederatesWithMatch{
TrustDomains: []string{"spiffe://domain.test"},
Expand All @@ -310,6 +323,7 @@ func TestShow(t *testing.T) {
name: "List by Federates With: subset matcher",
args: []string{"-federatesWith", "spiffe://domain.test", "-matchFederatesWithOn", "subset"},
expListReq: &entryv1.ListEntriesRequest{
PageSize: listEntriesRequestPageSize,
Filter: &entryv1.ListEntriesRequest_Filter{
ByFederatesWith: &types.FederatesWithMatch{
TrustDomains: []string{"spiffe://domain.test"},
Expand Down

0 comments on commit aaec611

Please sign in to comment.