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

Commitcca4519

Browse files
feat: enable setting max port share level during template creation (#14366)
1 parent2bef175 commitcca4519

File tree

9 files changed

+77
-2
lines changed

9 files changed

+77
-2
lines changed

‎coderd/apidoc/docs.go

Lines changed: 8 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: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/templates.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ func (api *API) notifyTemplateDeleted(ctx context.Context, template database.Tem
163163
func (api*API)postTemplateByOrganization(rw http.ResponseWriter,r*http.Request) {
164164
var (
165165
ctx=r.Context()
166+
portSharer=*api.PortSharer.Load()
166167
createTemplate codersdk.CreateTemplateRequest
167168
organization=httpmw.OrganizationParam(r)
168169
apiKey=httpmw.APIKey(r)
@@ -309,6 +310,7 @@ func (api *API) postTemplateByOrganization(rw http.ResponseWriter, r *http.Reque
309310
validErrs []codersdk.ValidationError
310311
autostopRequirementDaysOfWeekParseduint8
311312
autostartRequirementDaysOfWeekParseduint8
313+
maxPortShareLevel=database.AppSharingLevelOwner// default
312314
)
313315
ifdefaultTTL<0 {
314316
validErrs=append(validErrs, codersdk.ValidationError{Field:"default_ttl_ms",Detail:"Must be a positive integer."})
@@ -329,6 +331,14 @@ func (api *API) postTemplateByOrganization(rw http.ResponseWriter, r *http.Reque
329331
validErrs=append(validErrs, codersdk.ValidationError{Field:"autostart_requirement.days_of_week",Detail:err.Error()})
330332
}
331333
}
334+
ifcreateTemplate.MaxPortShareLevel!=nil {
335+
err=portSharer.ValidateTemplateMaxLevel(*createTemplate.MaxPortShareLevel)
336+
iferr!=nil {
337+
validErrs=append(validErrs, codersdk.ValidationError{Field:"max_port_share_level",Detail:err.Error()})
338+
}else {
339+
maxPortShareLevel=database.AppSharingLevel(*createTemplate.MaxPortShareLevel)
340+
}
341+
}
332342

333343
ifautostopRequirementWeeks<0 {
334344
validErrs=append(validErrs, codersdk.ValidationError{Field:"autostop_requirement.weeks",Detail:"Must be a positive integer."})
@@ -386,7 +396,7 @@ func (api *API) postTemplateByOrganization(rw http.ResponseWriter, r *http.Reque
386396
DisplayName:createTemplate.DisplayName,
387397
Icon:createTemplate.Icon,
388398
AllowUserCancelWorkspaceJobs:allowUserCancelWorkspaceJobs,
389-
MaxPortSharingLevel:database.AppSharingLevelOwner,
399+
MaxPortSharingLevel:maxPortShareLevel,
390400
})
391401
iferr!=nil {
392402
returnxerrors.Errorf("insert template: %s",err)

‎coderd/templates_test.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,44 @@ func TestPostTemplateByOrganization(t *testing.T) {
401401
require.EqualValues(t,1,got.AutostopRequirement.Weeks)
402402
})
403403
})
404+
405+
t.Run("MaxPortShareLevel",func(t*testing.T) {
406+
t.Parallel()
407+
408+
t.Run("OK",func(t*testing.T) {
409+
client:=coderdtest.New(t,nil)
410+
user:=coderdtest.CreateFirstUser(t,client)
411+
version:=coderdtest.CreateTemplateVersion(t,client,user.OrganizationID,nil)
412+
413+
ctx,cancel:=context.WithTimeout(context.Background(),testutil.WaitLong)
414+
defercancel()
415+
416+
got,err:=client.CreateTemplate(ctx,user.OrganizationID, codersdk.CreateTemplateRequest{
417+
Name:"testing",
418+
VersionID:version.ID,
419+
})
420+
require.NoError(t,err)
421+
require.Equal(t,codersdk.WorkspaceAgentPortShareLevelPublic,got.MaxPortShareLevel)
422+
})
423+
424+
t.Run("EnterpriseLevelError",func(t*testing.T) {
425+
client:=coderdtest.New(t,nil)
426+
user:=coderdtest.CreateFirstUser(t,client)
427+
version:=coderdtest.CreateTemplateVersion(t,client,user.OrganizationID,nil)
428+
429+
ctx,cancel:=context.WithTimeout(context.Background(),testutil.WaitLong)
430+
defercancel()
431+
432+
_,err:=client.CreateTemplate(ctx,user.OrganizationID, codersdk.CreateTemplateRequest{
433+
Name:"testing",
434+
VersionID:version.ID,
435+
MaxPortShareLevel:ptr.Ref(codersdk.WorkspaceAgentPortShareLevelPublic),
436+
})
437+
varapiErr*codersdk.Error
438+
require.ErrorAs(t,err,&apiErr)
439+
require.Equal(t,http.StatusBadRequest,apiErr.StatusCode())
440+
})
441+
})
404442
}
405443

406444
funcTestTemplatesByOrganization(t*testing.T) {

‎codersdk/organizations.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,10 @@ type CreateTemplateRequest struct {
184184
// RequireActiveVersion mandates that workspaces are built with the active
185185
// template version.
186186
RequireActiveVersionbool`json:"require_active_version"`
187+
188+
// MaxPortShareLevel allows optionally specifying the maximum port share level
189+
// for workspaces created from the template.
190+
MaxPortShareLevel*WorkspaceAgentPortShareLevel`json:"max_port_share_level"`
187191
}
188192

189193
// CreateWorkspaceRequest provides options for creating a new workspace.

‎docs/reference/api/schemas.md

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

‎docs/reference/api/templates.md

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

‎enterprise/coderd/templates_test.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,10 @@ func TestTemplates(t *testing.T) {
132132
},
133133
}},
134134
})
135-
template:=coderdtest.CreateTemplate(t,client,user.OrganizationID,version.ID)
135+
template:=coderdtest.CreateTemplate(t,client,user.OrganizationID,version.ID,func(ctr*codersdk.CreateTemplateRequest) {
136+
ctr.MaxPortShareLevel=ptr.Ref(codersdk.WorkspaceAgentPortShareLevelPublic)
137+
})
138+
require.Equal(t,template.MaxPortShareLevel,codersdk.WorkspaceAgentPortShareLevelPublic)
136139
coderdtest.AwaitTemplateVersionJobCompleted(t,client,version.ID)
137140
ws:=coderdtest.CreateWorkspace(t,client,template.ID)
138141
coderdtest.AwaitWorkspaceBuildJobCompleted(t,client,ws.LatestBuild.ID)

‎site/src/api/typesGenerated.ts

Lines changed: 1 addition & 0 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