Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit36ff30a

Browse files
committed
feat(coderd): implement task to build/agent/app linking
1 parent956b1d1 commit36ff30a

File tree

37 files changed

+898
-270
lines changed

37 files changed

+898
-270
lines changed

‎coderd/apidoc/docs.go‎

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/apidoc/swagger.json‎

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/database/dbauthz/dbauthz.go‎

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,9 @@ var (
219219
rbac.ResourceUser.Type: {policy.ActionRead,policy.ActionReadPersonal,policy.ActionUpdatePersonal},
220220
rbac.ResourceWorkspaceDormant.Type: {policy.ActionDelete,policy.ActionRead,policy.ActionUpdate,policy.ActionWorkspaceStop},
221221
rbac.ResourceWorkspace.Type: {policy.ActionDelete,policy.ActionRead,policy.ActionUpdate,policy.ActionWorkspaceStart,policy.ActionWorkspaceStop,policy.ActionCreateAgent},
222-
rbac.ResourceApiKey.Type: {policy.WildcardSymbol},
222+
// Provisionerd needs to read and update tasks associated with workspaces.
223+
rbac.ResourceTask.Type: {policy.ActionRead,policy.ActionUpdate},
224+
rbac.ResourceApiKey.Type: {policy.WildcardSymbol},
223225
// When org scoped provisioner credentials are implemented,
224226
// this can be reduced to read a specific org.
225227
rbac.ResourceOrganization.Type: {policy.ActionRead},
@@ -2882,8 +2884,12 @@ func (q *querier) GetTailnetTunnelPeerIDs(ctx context.Context, srcID uuid.UUID)
28822884
returnq.db.GetTailnetTunnelPeerIDs(ctx,srcID)
28832885
}
28842886

2885-
func (*querier)GetTaskByID(_ context.Context,_ uuid.UUID) (database.Task,error) {
2886-
panic("not implemented")
2887+
func (q*querier)GetTaskByID(ctx context.Context,id uuid.UUID) (database.Task,error) {
2888+
returnfetch(q.log,q.auth,q.db.GetTaskByID)(ctx,id)
2889+
}
2890+
2891+
func (q*querier)GetTaskByWorkspaceID(ctx context.Context,workspaceID uuid.UUID) (database.Task,error) {
2892+
returnfetch(q.log,q.auth,q.db.GetTaskByWorkspaceID)(ctx,workspaceID)
28872893
}
28882894

28892895
func (q*querier)GetTelemetryItem(ctx context.Context,keystring) (database.TelemetryItem,error) {
@@ -4111,12 +4117,15 @@ func (q *querier) InsertReplica(ctx context.Context, arg database.InsertReplicaP
41114117
returnq.db.InsertReplica(ctx,arg)
41124118
}
41134119

4114-
func (*querier)InsertTask(_ context.Context,_ database.InsertTaskParams) (database.TaskTable,error) {
4115-
panic("not implemented")
4116-
}
4120+
func (q*querier)InsertTask(ctx context.Context,arg database.InsertTaskParams) (database.TaskTable,error) {
4121+
// Ensure the actor can access the specified template version (and thus its template).
4122+
if_,err:=q.GetTemplateVersionByID(ctx,arg.TemplateVersionID);err!=nil {
4123+
return database.TaskTable{},err
4124+
}
4125+
4126+
obj:=rbac.ResourceTask.WithOwner(arg.OwnerID.String()).InOrg(arg.OrganizationID)
41174127

4118-
func (*querier)InsertTaskWorkspaceApp(_ context.Context,_ database.InsertTaskWorkspaceAppParams) (database.TaskWorkspaceApp,error) {
4119-
panic("not implemented")
4128+
returninsert(q.log,q.auth,obj,q.db.InsertTask)(ctx,arg)
41204129
}
41214130

41224131
func (q*querier)InsertTelemetryItemIfNotExists(ctx context.Context,arg database.InsertTelemetryItemIfNotExistsParams)error {
@@ -5677,6 +5686,18 @@ func (q *querier) UpsertTailnetTunnel(ctx context.Context, arg database.UpsertTa
56775686
returnq.db.UpsertTailnetTunnel(ctx,arg)
56785687
}
56795688

5689+
func (q*querier)UpsertTaskWorkspaceApp(ctx context.Context,arg database.UpsertTaskWorkspaceAppParams) (database.TaskWorkspaceApp,error) {
5690+
// Fetch the task to derive the RBAC object and authorize update on it.
5691+
task,err:=q.db.GetTaskByID(ctx,arg.TaskID)
5692+
iferr!=nil {
5693+
return database.TaskWorkspaceApp{},err
5694+
}
5695+
iferr:=q.authorizeContext(ctx,policy.ActionUpdate,task);err!=nil {
5696+
return database.TaskWorkspaceApp{},err
5697+
}
5698+
returnq.db.UpsertTaskWorkspaceApp(ctx,arg)
5699+
}
5700+
56805701
func (q*querier)UpsertTelemetryItem(ctx context.Context,arg database.UpsertTelemetryItemParams)error {
56815702
iferr:=q.authorizeContext(ctx,policy.ActionUpdate,rbac.ResourceSystem);err!=nil {
56825703
returnerr

‎coderd/database/dbauthz/dbauthz_test.go‎

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2314,6 +2314,53 @@ func (s *MethodTestSuite) TestWorkspacePortSharing() {
23142314
}))
23152315
}
23162316

2317+
func (s*MethodTestSuite)TestTasks() {
2318+
s.Run("GetTaskByID",s.Mocked(func(dbm*dbmock.MockStore,faker*gofakeit.Faker,check*expects) {
2319+
task:=testutil.Fake(s.T(),faker, database.Task{})
2320+
dbm.EXPECT().GetTaskByID(gomock.Any(),task.ID).Return(task,nil).AnyTimes()
2321+
check.Args(task.ID).Asserts(task,policy.ActionRead).Returns(task)
2322+
}))
2323+
s.Run("InsertTask",s.Mocked(func(dbm*dbmock.MockStore,faker*gofakeit.Faker,check*expects) {
2324+
tpl:=testutil.Fake(s.T(),faker, database.Template{})
2325+
tv:=testutil.Fake(s.T(),faker, database.TemplateVersion{
2326+
TemplateID: uuid.NullUUID{UUID:tpl.ID,Valid:true},
2327+
OrganizationID:tpl.OrganizationID,
2328+
})
2329+
2330+
arg:=testutil.Fake(s.T(),faker, database.InsertTaskParams{
2331+
OrganizationID:tpl.OrganizationID,
2332+
TemplateVersionID:tv.ID,
2333+
})
2334+
2335+
dbm.EXPECT().GetTemplateVersionByID(gomock.Any(),tv.ID).Return(tv,nil).AnyTimes()
2336+
dbm.EXPECT().GetTemplateByID(gomock.Any(),tpl.ID).Return(tpl,nil).AnyTimes()
2337+
dbm.EXPECT().InsertTask(gomock.Any(),arg).Return(database.TaskTable{},nil).AnyTimes()
2338+
2339+
check.Args(arg).Asserts(
2340+
tpl,policy.ActionRead,
2341+
rbac.ResourceTask.InOrg(arg.OrganizationID).WithOwner(arg.OwnerID.String()),policy.ActionCreate,
2342+
).Returns(database.TaskTable{})
2343+
}))
2344+
s.Run("UpsertTaskWorkspaceApp",s.Mocked(func(dbm*dbmock.MockStore,faker*gofakeit.Faker,check*expects) {
2345+
task:=testutil.Fake(s.T(),faker, database.Task{})
2346+
arg:= database.UpsertTaskWorkspaceAppParams{
2347+
TaskID:task.ID,
2348+
WorkspaceBuildNumber:1,
2349+
}
2350+
2351+
dbm.EXPECT().GetTaskByID(gomock.Any(),task.ID).Return(task,nil).AnyTimes()
2352+
dbm.EXPECT().UpsertTaskWorkspaceApp(gomock.Any(),arg).Return(database.TaskWorkspaceApp{},nil).AnyTimes()
2353+
2354+
check.Args(arg).Asserts(task,policy.ActionUpdate).Returns(database.TaskWorkspaceApp{})
2355+
}))
2356+
s.Run("GetTaskByWorkspaceID",s.Mocked(func(dbm*dbmock.MockStore,faker*gofakeit.Faker,check*expects) {
2357+
task:=testutil.Fake(s.T(),faker, database.Task{})
2358+
task.WorkspaceID= uuid.NullUUID{UUID:uuid.New(),Valid:true}
2359+
dbm.EXPECT().GetTaskByWorkspaceID(gomock.Any(),task.WorkspaceID.UUID).Return(task,nil).AnyTimes()
2360+
check.Args(task.WorkspaceID.UUID).Asserts(task,policy.ActionRead).Returns(task)
2361+
}))
2362+
}
2363+
23172364
func (s*MethodTestSuite)TestProvisionerKeys() {
23182365
s.Run("InsertProvisionerKey",s.Mocked(func(dbm*dbmock.MockStore,faker*gofakeit.Faker,check*expects) {
23192366
org:=testutil.Fake(s.T(),faker, database.Organization{})

‎coderd/database/dbgen/dbgen.go‎

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1578,8 +1578,13 @@ func Task(t testing.TB, db database.Store, orig database.TaskTable) database.Tas
15781578
funcTaskWorkspaceApp(t testing.TB,db database.Store,orig database.TaskWorkspaceApp) database.TaskWorkspaceApp {
15791579
t.Helper()
15801580

1581-
app,err:=db.InsertTaskWorkspaceApp(genCtx,database.InsertTaskWorkspaceAppParams(orig))
1582-
require.NoError(t,err,"failed to insert task workspace app")
1581+
app,err:=db.UpsertTaskWorkspaceApp(genCtx, database.UpsertTaskWorkspaceAppParams{
1582+
TaskID:orig.TaskID,
1583+
WorkspaceBuildNumber:orig.WorkspaceBuildNumber,
1584+
WorkspaceAgentID:orig.WorkspaceAgentID,
1585+
WorkspaceAppID:orig.WorkspaceAppID,
1586+
})
1587+
require.NoError(t,err,"failed to upsert task workspace app")
15831588

15841589
returnapp
15851590
}

‎coderd/database/dbmetrics/querymetrics.go‎

Lines changed: 14 additions & 7 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/database/dbmock/dbmock.go‎

Lines changed: 30 additions & 15 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp