Skip to content

Commit b60f2f6

Browse files
committed
Persisting presets defined with prebuilds to DB
Signed-off-by: Danny Kopping <danny@coder.com>
1 parent 0ba8f89 commit b60f2f6

20 files changed

+896
-650
lines changed

coderd/database/dbauthz/dbauthz.go

+7
Original file line numberDiff line numberDiff line change
@@ -3150,6 +3150,13 @@ func (q *querier) InsertPresetParameters(ctx context.Context, arg database.Inser
31503150
return q.db.InsertPresetParameters(ctx, arg)
31513151
}
31523152

3153+
func (q *querier) InsertPresetPrebuild(ctx context.Context, arg database.InsertPresetPrebuildParams) (database.TemplateVersionPresetPrebuild, error) {
3154+
if err := q.authorizeContext(ctx, policy.ActionCreate, rbac.ResourceSystem); err != nil {
3155+
return database.TemplateVersionPresetPrebuild{}, err
3156+
}
3157+
return q.db.InsertPresetPrebuild(ctx, arg)
3158+
}
3159+
31533160
// TODO: We need to create a ProvisionerJob resource type
31543161
func (q *querier) InsertProvisionerJob(ctx context.Context, arg database.InsertProvisionerJobParams) (database.ProvisionerJob, error) {
31553162
// if err := q.authorizeContext(ctx, policy.ActionCreate, rbac.ResourceSystem); err != nil {

coderd/database/dbmem/dbmem.go

+9
Original file line numberDiff line numberDiff line change
@@ -8195,6 +8195,15 @@ func (q *FakeQuerier) InsertPresetParameters(_ context.Context, arg database.Ins
81958195
return presetParameters, nil
81968196
}
81978197

8198+
func (q *FakeQuerier) InsertPresetPrebuild(ctx context.Context, arg database.InsertPresetPrebuildParams) (database.TemplateVersionPresetPrebuild, error) {
8199+
err := validateDatabaseType(arg)
8200+
if err != nil {
8201+
return database.TemplateVersionPresetPrebuild{}, err
8202+
}
8203+
8204+
panic("not implemented")
8205+
}
8206+
81988207
func (q *FakeQuerier) InsertProvisionerJob(_ context.Context, arg database.InsertProvisionerJobParams) (database.ProvisionerJob, error) {
81998208
if err := validateDatabaseType(arg); err != nil {
82008209
return database.ProvisionerJob{}, err

coderd/database/dbmetrics/querymetrics.go

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

coderd/database/dbmock/dbmock.go

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

coderd/database/querier.go

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

coderd/database/queries.sql.go

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

coderd/database/queries/prebuilds.sql

+6
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ GROUP BY t.using_active_version, t.template_id, t.template_version_id, p.count,
7272
p.template_version_id, t.deleted, t.deprecated;
7373

7474
-- name: ClaimPrebuild :one
75+
-- TODO: rewrite to use named CTE instead?
7576
UPDATE workspaces w
7677
SET owner_id = @new_user_id::uuid,
7778
name = @new_name::text,
@@ -87,3 +88,8 @@ WHERE w.id IN (SELECT p.id
8788
ORDER BY random()
8889
LIMIT 1 FOR UPDATE OF p SKIP LOCKED)
8990
RETURNING w.id, w.name;
91+
92+
-- name: InsertPresetPrebuild :one
93+
INSERT INTO template_version_preset_prebuilds (id, preset_id, desired_instances, invalidate_after_secs)
94+
VALUES (@id::uuid, @preset_id::uuid, @desired_instances::int, @invalidate_after_secs::int)
95+
RETURNING *;

coderd/provisionerdserver/provisionerdserver.go

+15-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"encoding/json"
77
"errors"
88
"fmt"
9-
"github.com/coder/coder/v2/coderd/agentapi"
109
"net/http"
1110
"net/url"
1211
"reflect"
@@ -16,6 +15,8 @@ import (
1615
"sync/atomic"
1716
"time"
1817

18+
"github.com/coder/coder/v2/coderd/agentapi"
19+
1920
"github.com/google/uuid"
2021
"github.com/sqlc-dev/pqtype"
2122
semconv "go.opentelemetry.io/otel/semconv/v1.14.0"
@@ -28,6 +29,8 @@ import (
2829

2930
"cdr.dev/slog"
3031

32+
"github.com/coder/quartz"
33+
3134
"github.com/coder/coder/v2/coderd/apikey"
3235
"github.com/coder/coder/v2/coderd/audit"
3336
"github.com/coder/coder/v2/coderd/database"
@@ -47,7 +50,6 @@ import (
4750
"github.com/coder/coder/v2/provisionerd/proto"
4851
"github.com/coder/coder/v2/provisionersdk"
4952
sdkproto "github.com/coder/coder/v2/provisionersdk/proto"
50-
"github.com/coder/quartz"
5153
)
5254

5355
const (
@@ -1882,6 +1884,17 @@ func InsertWorkspacePresetAndParameters(ctx context.Context, db database.Store,
18821884
if err != nil {
18831885
return xerrors.Errorf("insert preset and parameters: %w", err)
18841886
}
1887+
if protoPreset.Prebuild != nil {
1888+
_, err := db.InsertPresetPrebuild(ctx, database.InsertPresetPrebuildParams{
1889+
ID: uuid.New(),
1890+
PresetID: dbPreset.ID,
1891+
DesiredInstances: protoPreset.Prebuild.Instances,
1892+
InvalidateAfterSecs: 0, // TODO: implement cache invalidation
1893+
})
1894+
if err != nil {
1895+
return xerrors.Errorf("insert preset prebuild: %w", err)
1896+
}
1897+
}
18851898
return nil
18861899
}
18871900

provisioner/terraform/resources.go

+7
Original file line numberDiff line numberDiff line change
@@ -836,6 +836,13 @@ func ConvertState(ctx context.Context, modules []*tfjson.StateModule, rawGraph s
836836
Name: preset.Name,
837837
Parameters: presetParameters,
838838
}
839+
// TODO: more than 1 allowable?
840+
if len(preset.Prebuild) == 1 {
841+
protoPreset.Prebuild = &proto.Prebuild{
842+
Instances: int32(preset.Prebuild[0].Instances),
843+
}
844+
}
845+
839846
if slice.Contains(duplicatedPresetNames, preset.Name) {
840847
duplicatedPresetNames = append(duplicatedPresetNames, preset.Name)
841848
}

provisionerd/proto/provisionerd.pb.go

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

0 commit comments

Comments
 (0)