Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 9e72a30

Browse files
committed
feat(coderd): add endpoint to list provisioner jobs
Closes #15190 Updates #15084 Supercedes #15940
1 parent a252d13 commit 9e72a30

26 files changed

+1509
-197
lines changed

cli/testdata/coder_list_--output_json.golden

+6-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,12 @@
4343
"scope": "organization"
4444
},
4545
"queue_position": 0,
46-
"queue_size": 0
46+
"queue_size": 0,
47+
"organization_id": "===========[first org ID]===========",
48+
"input": {
49+
"workspace_build_id": "========[workspace build ID]========"
50+
},
51+
"type": "workspace_build"
4752
},
4853
"reason": "initiator",
4954
"resources": [],

coderd/apidoc/docs.go

+108
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/apidoc/swagger.json

+104
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/coderd.go

+3
Original file line numberDiff line numberDiff line change
@@ -1010,6 +1010,9 @@ func New(options *Options) *API {
10101010
r.Route("/provisionerdaemons", func(r chi.Router) {
10111011
r.Get("/", api.provisionerDaemons)
10121012
})
1013+
r.Route("/provisionerjobs", func(r chi.Router) {
1014+
r.Get("/", api.provisionerJobs)
1015+
})
10131016
})
10141017
})
10151018
r.Route("/templates", func(r chi.Router) {

coderd/database/dbauthz/dbauthz.go

+5
Original file line numberDiff line numberDiff line change
@@ -1988,6 +1988,11 @@ func (q *querier) GetProvisionerJobsByIDsWithQueuePosition(ctx context.Context,
19881988
return q.db.GetProvisionerJobsByIDsWithQueuePosition(ctx, ids)
19891989
}
19901990

1991+
// TODO: we need to add a provisioner job resource
1992+
func (q *querier) GetProvisionerJobsByOrganizationAndStatusWithQueuePositionAndProvisioner(ctx context.Context, arg database.GetProvisionerJobsByOrganizationAndStatusWithQueuePositionAndProvisionerParams) ([]database.GetProvisionerJobsByOrganizationAndStatusWithQueuePositionAndProvisionerRow, error) {
1993+
return q.db.GetProvisionerJobsByOrganizationAndStatusWithQueuePositionAndProvisioner(ctx, arg)
1994+
}
1995+
19911996
// TODO: We need to create a ProvisionerJob resource type
19921997
func (q *querier) GetProvisionerJobsCreatedAfter(ctx context.Context, createdAt time.Time) ([]database.ProvisionerJob, error) {
19931998
// if err := q.authorizeContext(ctx, policy.ActionRead, rbac.ResourceSystem); err != nil {

coderd/database/dbauthz/dbauthz_test.go

+35
Original file line numberDiff line numberDiff line change
@@ -3257,6 +3257,41 @@ func (s *MethodTestSuite) TestExtraMethods() {
32573257
LastSeenAt: sql.NullTime{Time: dbtime.Now(), Valid: true},
32583258
}).Asserts(rbac.ResourceProvisionerDaemon, policy.ActionUpdate)
32593259
}))
3260+
s.Run("GetProvisionerJobsByOrganizationAndStatusWithQueuePositionAndProvisioner", s.Subtest(func(db database.Store, check *expects) {
3261+
org := dbgen.Organization(s.T(), db, database.Organization{})
3262+
tags := database.StringMap(map[string]string{
3263+
provisionersdk.TagScope: provisionersdk.ScopeOrganization,
3264+
})
3265+
t := dbgen.Template(s.T(), db, database.Template{})
3266+
tv := dbgen.TemplateVersion(s.T(), db, database.TemplateVersion{TemplateID: uuid.NullUUID{UUID: t.ID, Valid: true}})
3267+
w := dbgen.Workspace(s.T(), db, database.WorkspaceTable{OrganizationID: org.ID, TemplateID: t.ID})
3268+
wb := dbgen.WorkspaceBuild(s.T(), db, database.WorkspaceBuild{WorkspaceID: w.ID, TemplateVersionID: tv.ID})
3269+
j1, err := db.InsertProvisionerJob(context.Background(), database.InsertProvisionerJobParams{
3270+
OrganizationID: org.ID,
3271+
Type: database.ProvisionerJobTypeTemplateVersionImport,
3272+
Input: []byte(`{"template_version_id":"` + tv.ID.String() + `"}`),
3273+
Tags: tags,
3274+
Provisioner: database.ProvisionerTypeEcho,
3275+
StorageMethod: database.ProvisionerStorageMethodFile,
3276+
})
3277+
s.NoError(err, "insert provisioner job")
3278+
j2, err := db.InsertProvisionerJob(context.Background(), database.InsertProvisionerJobParams{
3279+
OrganizationID: org.ID,
3280+
Type: database.ProvisionerJobTypeWorkspaceBuild,
3281+
Input: []byte(`{"workspace_build_id":"` + wb.ID.String() + `"}`),
3282+
Tags: tags,
3283+
Provisioner: database.ProvisionerTypeEcho,
3284+
StorageMethod: database.ProvisionerStorageMethodFile,
3285+
})
3286+
s.NoError(err, "insert provisioner job")
3287+
ds, err := db.GetProvisionerJobsByOrganizationAndStatusWithQueuePositionAndProvisioner(context.Background(), database.GetProvisionerJobsByOrganizationAndStatusWithQueuePositionAndProvisionerParams{
3288+
OrganizationID: uuid.NullUUID{Valid: true, UUID: org.ID},
3289+
})
3290+
s.NoError(err, "get provisioner jobs by org")
3291+
check.Args(database.GetProvisionerJobsByOrganizationAndStatusWithQueuePositionAndProvisionerParams{
3292+
OrganizationID: uuid.NullUUID{Valid: true, UUID: org.ID},
3293+
}).Asserts(j1, policy.ActionRead, j2, policy.ActionRead).Returns(ds)
3294+
}))
32603295
}
32613296

32623297
func (s *MethodTestSuite) TestTailnetFunctions() {

0 commit comments

Comments
 (0)