Skip to content

Commit a5b7723

Browse files
committed
working API and dashboard
1 parent 71e9fe8 commit a5b7723

21 files changed

+181
-29
lines changed

coderd/apidoc/docs.go

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

coderd/apidoc/swagger.json

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

coderd/database/dbfake/databasefake.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2615,7 +2615,6 @@ func (q *fakeQuerier) InsertTemplate(_ context.Context, arg database.InsertTempl
26152615
Provisioner: arg.Provisioner,
26162616
ActiveVersionID: arg.ActiveVersionID,
26172617
Description: arg.Description,
2618-
DefaultTTL: arg.DefaultTTL,
26192618
CreatedBy: arg.CreatedBy,
26202619
UserACL: arg.UserACL,
26212620
GroupACL: arg.GroupACL,

coderd/database/dbgen/generator.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ func Template(t testing.TB, db database.Store, seed database.Template) database.
6060
Provisioner: takeFirst(seed.Provisioner, database.ProvisionerTypeEcho),
6161
ActiveVersionID: takeFirst(seed.ActiveVersionID, uuid.New()),
6262
Description: takeFirst(seed.Description, namesgenerator.GetRandomName(1)),
63-
DefaultTTL: takeFirst(seed.DefaultTTL, 3600),
6463
CreatedBy: takeFirst(seed.CreatedBy, uuid.New()),
6564
Icon: takeFirst(seed.Icon, namesgenerator.GetRandomName(1)),
6665
UserACL: seed.UserACL,

coderd/database/modelqueries.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ func (q *sqlQuerier) GetAuthorizedTemplates(ctx context.Context, arg GetTemplate
7777
&i.GroupACL,
7878
&i.DisplayName,
7979
&i.AllowUserCancelWorkspaceJobs,
80+
&i.MaxTTL,
8081
); err != nil {
8182
return nil, err
8283
}

coderd/database/queries.sql.go

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

coderd/database/queries/templates.sql

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ INSERT INTO
6767
provisioner,
6868
active_version_id,
6969
description,
70-
default_ttl,
7170
created_by,
7271
icon,
7372
user_acl,
@@ -76,7 +75,7 @@ INSERT INTO
7675
allow_user_cancel_workspace_jobs
7776
)
7877
VALUES
79-
($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15) RETURNING *;
78+
($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) RETURNING *;
8079

8180
-- name: UpdateTemplateActiveVersionByID :exec
8281
UPDATE

coderd/templates.go

Lines changed: 42 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -213,16 +213,31 @@ func (api *API) postTemplateByOrganization(rw http.ResponseWriter, r *http.Reque
213213
return
214214
}
215215

216-
var ttl time.Duration
216+
var (
217+
defaultTTL time.Duration
218+
maxTTL time.Duration
219+
)
217220
if createTemplate.DefaultTTLMillis != nil {
218-
ttl = time.Duration(*createTemplate.DefaultTTLMillis) * time.Millisecond
221+
defaultTTL = time.Duration(*createTemplate.DefaultTTLMillis) * time.Millisecond
222+
}
223+
if createTemplate.MaxTTLMillis != nil {
224+
maxTTL = time.Duration(*createTemplate.MaxTTLMillis) * time.Millisecond
225+
}
226+
227+
var validErrs []codersdk.ValidationError
228+
if defaultTTL < 0 {
229+
validErrs = append(validErrs, codersdk.ValidationError{Field: "default_ttl_ms", Detail: "Must be a positive integer."})
230+
}
231+
if maxTTL < 0 {
232+
validErrs = append(validErrs, codersdk.ValidationError{Field: "max_ttl_ms", Detail: "Must be a positive integer."})
233+
}
234+
if maxTTL != 0 && defaultTTL > maxTTL {
235+
validErrs = append(validErrs, codersdk.ValidationError{Field: "default_ttl_ms", Detail: "Must be less than or equal to max_ttl_ms if max_ttl_ms is set."})
219236
}
220-
if ttl < 0 {
237+
if len(validErrs) > 0 {
221238
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
222-
Message: "Invalid create template request.",
223-
Validations: []codersdk.ValidationError{
224-
{Field: "default_ttl_ms", Detail: "Must be a positive integer."},
225-
},
239+
Message: "Invalid create template request.",
240+
Validations: validErrs,
226241
})
227242
return
228243
}
@@ -245,7 +260,6 @@ func (api *API) postTemplateByOrganization(rw http.ResponseWriter, r *http.Reque
245260
Provisioner: importJob.Provisioner,
246261
ActiveVersionID: templateVersion.ID,
247262
Description: createTemplate.Description,
248-
DefaultTTL: int64(ttl),
249263
CreatedBy: apiKey.UserID,
250264
UserACL: database.TemplateACL{},
251265
GroupACL: database.TemplateACL{
@@ -259,6 +273,17 @@ func (api *API) postTemplateByOrganization(rw http.ResponseWriter, r *http.Reque
259273
return xerrors.Errorf("insert template: %s", err)
260274
}
261275

276+
if defaultTTL != 0 || maxTTL != 0 {
277+
dbTemplate, err = (*api.TemplateScheduleStore.Load()).SetTemplateScheduleOptions(ctx, tx, dbTemplate, provisionerdserver.TemplateScheduleOptions{
278+
UserSchedulingEnabled: true,
279+
DefaultTTL: defaultTTL,
280+
MaxTTL: maxTTL,
281+
})
282+
if err != nil {
283+
return xerrors.Errorf("set template schedule options: %s", err)
284+
}
285+
}
286+
262287
templateAudit.New = dbTemplate
263288

264289
err = tx.UpdateTemplateVersionByID(ctx, database.UpdateTemplateVersionByIDParams{
@@ -453,6 +478,12 @@ func (api *API) patchTemplateMeta(rw http.ResponseWriter, r *http.Request) {
453478
if req.DefaultTTLMillis < 0 {
454479
validErrs = append(validErrs, codersdk.ValidationError{Field: "default_ttl_ms", Detail: "Must be a positive integer."})
455480
}
481+
if req.MaxTTLMillis < 0 {
482+
validErrs = append(validErrs, codersdk.ValidationError{Field: "max_ttl_ms", Detail: "Must be a positive integer."})
483+
}
484+
if req.MaxTTLMillis != 0 && req.DefaultTTLMillis > req.MaxTTLMillis {
485+
validErrs = append(validErrs, codersdk.ValidationError{Field: "default_ttl_ms", Detail: "Must be less than or equal to max_ttl_ms if max_ttl_ms is set."})
486+
}
456487

457488
if len(validErrs) > 0 {
458489
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
@@ -469,7 +500,8 @@ func (api *API) patchTemplateMeta(rw http.ResponseWriter, r *http.Request) {
469500
req.DisplayName == template.DisplayName &&
470501
req.Icon == template.Icon &&
471502
req.AllowUserCancelWorkspaceJobs == template.AllowUserCancelWorkspaceJobs &&
472-
req.DefaultTTLMillis == time.Duration(template.DefaultTTL).Milliseconds() {
503+
req.DefaultTTLMillis == time.Duration(template.DefaultTTL).Milliseconds() &&
504+
req.MaxTTLMillis == time.Duration(template.MaxTTL).Milliseconds() {
473505
return nil
474506
}
475507

@@ -647,6 +679,7 @@ func (api *API) convertTemplate(
647679
Description: template.Description,
648680
Icon: template.Icon,
649681
DefaultTTLMillis: time.Duration(template.DefaultTTL).Milliseconds(),
682+
MaxTTLMillis: time.Duration(template.MaxTTL).Milliseconds(),
650683
CreatedByID: template.CreatedBy,
651684
CreatedByName: createdByName,
652685
AllowUserCancelWorkspaceJobs: template.AllowUserCancelWorkspaceJobs,

0 commit comments

Comments
 (0)