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.
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: