diff --git a/cli/provisioners.go b/cli/provisioners.go index 08d96493b87aa..5dd3a703619e5 100644 --- a/cli/provisioners.go +++ b/cli/provisioners.go @@ -39,6 +39,7 @@ func (r *RootCmd) provisionerList() *serpent.Command { cliui.TableFormat([]provisionerDaemonRow{}, []string{"name", "organization", "status", "key name", "created at", "last seen at", "version", "tags"}), cliui.JSONFormat(), ) + limit int64 ) cmd := &serpent.Command{ @@ -57,7 +58,9 @@ func (r *RootCmd) provisionerList() *serpent.Command { return xerrors.Errorf("current organization: %w", err) } - daemons, err := client.OrganizationProvisionerDaemons(ctx, org.ID, nil) + daemons, err := client.OrganizationProvisionerDaemons(ctx, org.ID, &codersdk.OrganizationProvisionerDaemonsOptions{ + Limit: int(limit), + }) if err != nil { return xerrors.Errorf("list provisioner daemons: %w", err) } @@ -86,6 +89,17 @@ func (r *RootCmd) provisionerList() *serpent.Command { }, } + cmd.Options = append(cmd.Options, []serpent.Option{ + { + Flag: "limit", + FlagShorthand: "l", + Env: "CODER_PROVISIONER_LIST_LIMIT", + Description: "Limit the number of provisioners returned.", + Default: "50", + Value: serpent.Int64Of(&limit), + }, + }...) + orgContext.AttachOptions(cmd) formatter.AttachOptions(&cmd.Options) diff --git a/cli/testdata/coder_provisioner_list_--help.golden b/cli/testdata/coder_provisioner_list_--help.golden index 111eb8315b162..ac889fb6dcf58 100644 --- a/cli/testdata/coder_provisioner_list_--help.golden +++ b/cli/testdata/coder_provisioner_list_--help.golden @@ -14,6 +14,9 @@ OPTIONS: -c, --column [id|organization id|created at|last seen at|name|version|api version|tags|key name|status|current job id|current job status|current job template name|current job template icon|current job template display name|previous job id|previous job status|previous job template name|previous job template icon|previous job template display name|organization] (default: name,organization,status,key name,created at,last seen at,version,tags) Columns to display in table output. + -l, --limit int, $CODER_PROVISIONER_LIST_LIMIT (default: 50) + Limit the number of provisioners returned. + -o, --output table|json (default: table) Output format. diff --git a/coderd/database/dbmem/dbmem.go b/coderd/database/dbmem/dbmem.go index 058aed631887e..23913a55bf0c8 100644 --- a/coderd/database/dbmem/dbmem.go +++ b/coderd/database/dbmem/dbmem.go @@ -4073,7 +4073,7 @@ func (q *FakeQuerier) GetProvisionerDaemonsWithStatusByOrganization(ctx context. } slices.SortFunc(rows, func(a, b database.GetProvisionerDaemonsWithStatusByOrganizationRow) int { - return a.ProvisionerDaemon.CreatedAt.Compare(b.ProvisionerDaemon.CreatedAt) + return b.ProvisionerDaemon.CreatedAt.Compare(a.ProvisionerDaemon.CreatedAt) }) if arg.Limit.Valid && arg.Limit.Int32 > 0 && len(rows) > int(arg.Limit.Int32) { diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index 0e2bc0e37f375..9c9ead1b6746e 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -5845,7 +5845,7 @@ WHERE AND (COALESCE(array_length($3::uuid[], 1), 0) = 0 OR pd.id = ANY($3::uuid[])) AND ($4::tagset = 'null'::tagset OR provisioner_tagset_contains(pd.tags::tagset, $4::tagset)) ORDER BY - pd.created_at ASC + pd.created_at DESC LIMIT $5::int ` diff --git a/coderd/database/queries/provisionerdaemons.sql b/coderd/database/queries/provisionerdaemons.sql index ab1668e537d6c..4f7c7a8b2200a 100644 --- a/coderd/database/queries/provisionerdaemons.sql +++ b/coderd/database/queries/provisionerdaemons.sql @@ -111,7 +111,7 @@ WHERE AND (COALESCE(array_length(@ids::uuid[], 1), 0) = 0 OR pd.id = ANY(@ids::uuid[])) AND (@tags::tagset = 'null'::tagset OR provisioner_tagset_contains(pd.tags::tagset, @tags::tagset)) ORDER BY - pd.created_at ASC + pd.created_at DESC LIMIT sqlc.narg('limit')::int; diff --git a/coderd/provisionerdaemons_test.go b/coderd/provisionerdaemons_test.go index d6d1138f7a912..249da9d6bc922 100644 --- a/coderd/provisionerdaemons_test.go +++ b/coderd/provisionerdaemons_test.go @@ -159,8 +159,8 @@ func TestProvisionerDaemons(t *testing.T) { }) require.NoError(t, err) require.Len(t, daemons, 2) - require.Equal(t, pd1.ID, daemons[0].ID) - require.Equal(t, pd2.ID, daemons[1].ID) + require.Equal(t, pd1.ID, daemons[1].ID) + require.Equal(t, pd2.ID, daemons[0].ID) }) t.Run("Tags", func(t *testing.T) { diff --git a/docs/reference/cli/provisioner_list.md b/docs/reference/cli/provisioner_list.md index 93718ddd01ea8..4aadb22064755 100644 --- a/docs/reference/cli/provisioner_list.md +++ b/docs/reference/cli/provisioner_list.md @@ -15,6 +15,16 @@ coder provisioner list [flags] ## Options +### -l, --limit + +| | | +|-------------|--------------------------------------------| +| Type | int | +| Environment | $CODER_PROVISIONER_LIST_LIMIT | +| Default | 50 | + +Limit the number of provisioners returned. + ### -O, --org | | | diff --git a/enterprise/cli/testdata/coder_provisioner_list_--help.golden b/enterprise/cli/testdata/coder_provisioner_list_--help.golden index 111eb8315b162..ac889fb6dcf58 100644 --- a/enterprise/cli/testdata/coder_provisioner_list_--help.golden +++ b/enterprise/cli/testdata/coder_provisioner_list_--help.golden @@ -14,6 +14,9 @@ OPTIONS: -c, --column [id|organization id|created at|last seen at|name|version|api version|tags|key name|status|current job id|current job status|current job template name|current job template icon|current job template display name|previous job id|previous job status|previous job template name|previous job template icon|previous job template display name|organization] (default: name,organization,status,key name,created at,last seen at,version,tags) Columns to display in table output. + -l, --limit int, $CODER_PROVISIONER_LIST_LIMIT (default: 50) + Limit the number of provisioners returned. + -o, --output table|json (default: table) Output format.