Skip to content

Commit 90f9fb1

Browse files
committed
handle metadata fields in provisionerd and API
1 parent 589a4fc commit 90f9fb1

13 files changed

+370
-33
lines changed

coderd/database/databasefake/databasefake.go

Lines changed: 75 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -26,21 +26,22 @@ func New() database.Store {
2626
organizations: make([]database.Organization, 0),
2727
users: make([]database.User, 0),
2828

29-
auditLogs: make([]database.AuditLog, 0),
30-
files: make([]database.File, 0),
31-
gitSSHKey: make([]database.GitSSHKey, 0),
32-
parameterSchemas: make([]database.ParameterSchema, 0),
33-
parameterValues: make([]database.ParameterValue, 0),
34-
provisionerDaemons: make([]database.ProvisionerDaemon, 0),
35-
provisionerJobAgents: make([]database.WorkspaceAgent, 0),
36-
provisionerJobLogs: make([]database.ProvisionerJobLog, 0),
37-
provisionerJobResources: make([]database.WorkspaceResource, 0),
38-
provisionerJobs: make([]database.ProvisionerJob, 0),
39-
templateVersions: make([]database.TemplateVersion, 0),
40-
templates: make([]database.Template, 0),
41-
workspaceBuilds: make([]database.WorkspaceBuild, 0),
42-
workspaceApps: make([]database.WorkspaceApp, 0),
43-
workspaces: make([]database.Workspace, 0),
29+
auditLogs: make([]database.AuditLog, 0),
30+
files: make([]database.File, 0),
31+
gitSSHKey: make([]database.GitSSHKey, 0),
32+
parameterSchemas: make([]database.ParameterSchema, 0),
33+
parameterValues: make([]database.ParameterValue, 0),
34+
provisionerDaemons: make([]database.ProvisionerDaemon, 0),
35+
provisionerJobAgents: make([]database.WorkspaceAgent, 0),
36+
provisionerJobLogs: make([]database.ProvisionerJobLog, 0),
37+
provisionerJobResources: make([]database.WorkspaceResource, 0),
38+
provisionerJobResourceMetadata: make([]database.WorkspaceResourceMetadatum, 0),
39+
provisionerJobs: make([]database.ProvisionerJob, 0),
40+
templateVersions: make([]database.TemplateVersion, 0),
41+
templates: make([]database.Template, 0),
42+
workspaceBuilds: make([]database.WorkspaceBuild, 0),
43+
workspaceApps: make([]database.WorkspaceApp, 0),
44+
workspaces: make([]database.Workspace, 0),
4445
},
4546
}
4647
}
@@ -74,21 +75,22 @@ type data struct {
7475
users []database.User
7576

7677
// New tables
77-
auditLogs []database.AuditLog
78-
files []database.File
79-
gitSSHKey []database.GitSSHKey
80-
parameterSchemas []database.ParameterSchema
81-
parameterValues []database.ParameterValue
82-
provisionerDaemons []database.ProvisionerDaemon
83-
provisionerJobAgents []database.WorkspaceAgent
84-
provisionerJobLogs []database.ProvisionerJobLog
85-
provisionerJobResources []database.WorkspaceResource
86-
provisionerJobs []database.ProvisionerJob
87-
templateVersions []database.TemplateVersion
88-
templates []database.Template
89-
workspaceBuilds []database.WorkspaceBuild
90-
workspaceApps []database.WorkspaceApp
91-
workspaces []database.Workspace
78+
auditLogs []database.AuditLog
79+
files []database.File
80+
gitSSHKey []database.GitSSHKey
81+
parameterSchemas []database.ParameterSchema
82+
parameterValues []database.ParameterValue
83+
provisionerDaemons []database.ProvisionerDaemon
84+
provisionerJobAgents []database.WorkspaceAgent
85+
provisionerJobLogs []database.ProvisionerJobLog
86+
provisionerJobResources []database.WorkspaceResource
87+
provisionerJobResourceMetadata []database.WorkspaceResourceMetadatum
88+
provisionerJobs []database.ProvisionerJob
89+
templateVersions []database.TemplateVersion
90+
templates []database.Template
91+
workspaceBuilds []database.WorkspaceBuild
92+
workspaceApps []database.WorkspaceApp
93+
workspaces []database.Workspace
9294

9395
deploymentID string
9496
}
@@ -1316,6 +1318,34 @@ func (q *fakeQuerier) GetWorkspaceResourcesCreatedAfter(_ context.Context, after
13161318
return resources, nil
13171319
}
13181320

1321+
func (q *fakeQuerier) GetWorkspaceResourceMetadataByResourceID(_ context.Context, id uuid.UUID) ([]database.WorkspaceResourceMetadatum, error) {
1322+
q.mutex.RLock()
1323+
defer q.mutex.RUnlock()
1324+
1325+
metadata := make([]database.WorkspaceResourceMetadatum, 0)
1326+
for _, metadatum := range q.provisionerJobResourceMetadata {
1327+
if metadatum.WorkspaceResourceID.String() == id.String() {
1328+
metadata = append(metadata, metadatum)
1329+
}
1330+
}
1331+
return metadata, nil
1332+
}
1333+
1334+
func (q *fakeQuerier) GetWorkspaceResourceMetadataByResourceIDs(_ context.Context, ids []uuid.UUID) ([]database.WorkspaceResourceMetadatum, error) {
1335+
q.mutex.RLock()
1336+
defer q.mutex.RUnlock()
1337+
1338+
metadata := make([]database.WorkspaceResourceMetadatum, 0)
1339+
for _, metadatum := range q.provisionerJobResourceMetadata {
1340+
for _, id := range ids {
1341+
if metadatum.WorkspaceResourceID.String() == id.String() {
1342+
metadata = append(metadata, metadatum)
1343+
}
1344+
}
1345+
}
1346+
return metadata, nil
1347+
}
1348+
13191349
func (q *fakeQuerier) GetProvisionerJobsByIDs(_ context.Context, ids []uuid.UUID) ([]database.ProvisionerJob, error) {
13201350
q.mutex.RLock()
13211351
defer q.mutex.RUnlock()
@@ -1644,6 +1674,21 @@ func (q *fakeQuerier) InsertWorkspaceResource(_ context.Context, arg database.In
16441674
return resource, nil
16451675
}
16461676

1677+
func (q *fakeQuerier) InsertWorkspaceResourceMetadata(_ context.Context, arg database.InsertWorkspaceResourceMetadataParams) (database.WorkspaceResourceMetadatum, error) {
1678+
q.mutex.Lock()
1679+
defer q.mutex.Unlock()
1680+
1681+
//nolint:gosimple
1682+
metadatum := database.WorkspaceResourceMetadatum{
1683+
WorkspaceResourceID: arg.WorkspaceResourceID,
1684+
Key: arg.Key,
1685+
Value: arg.Value,
1686+
Sensitive: arg.Sensitive,
1687+
}
1688+
q.provisionerJobResourceMetadata = append(q.provisionerJobResourceMetadata, metadatum)
1689+
return metadatum, nil
1690+
}
1691+
16471692
func (q *fakeQuerier) InsertUser(_ context.Context, arg database.InsertUserParams) (database.User, error) {
16481693
q.mutex.Lock()
16491694
defer q.mutex.Unlock()

coderd/database/dump.sql

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
DROP TABLE IF EXISTS workspace_resource_metadata;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CREATE TABLE IF NOT EXISTS workspace_resource_metadata (
2+
workspace_resource_id uuid NOT NULL,
3+
key varchar(1024) NOT NULL,
4+
value varchar(65536),
5+
sensitive boolean NOT NULL,
6+
PRIMARY KEY (workspace_resource_id, key),
7+
FOREIGN KEY (workspace_resource_id) REFERENCES workspace_resources (id) ON DELETE CASCADE
8+
);

coderd/database/models.go

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

coderd/database/querier.go

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

coderd/database/queries.sql.go

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

coderd/database/queries/workspaceresources.sql

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,25 @@ INSERT INTO
2222
workspace_resources (id, created_at, job_id, transition, type, name)
2323
VALUES
2424
($1, $2, $3, $4, $5, $6) RETURNING *;
25+
26+
-- name: GetWorkspaceResourceMetadataByResourceID :many
27+
SELECT
28+
*
29+
FROM
30+
workspace_resource_metadata
31+
WHERE
32+
workspace_resource_id = $1;
33+
34+
-- name: GetWorkspaceResourceMetadataByResourceIDs :many
35+
SELECT
36+
*
37+
FROM
38+
workspace_resource_metadata
39+
WHERE
40+
workspace_resource_id = ANY(@ids :: uuid [ ]);
41+
42+
-- name: InsertWorkspaceResourceMetadata :one
43+
INSERT INTO
44+
workspace_resource_metadata (workspace_resource_id, key, value, sensitive)
45+
VALUES
46+
($1, $2, $3, $4) RETURNING *;

coderd/provisionerdaemons.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -829,6 +829,25 @@ func insertWorkspaceResource(ctx context.Context, db database.Store, jobID uuid.
829829
snapshot.WorkspaceApps = append(snapshot.WorkspaceApps, telemetry.ConvertWorkspaceApp(dbApp))
830830
}
831831
}
832+
833+
for _, metadatum := range protoResource.Metadata {
834+
var value sql.NullString
835+
if !metadatum.IsNull {
836+
value.String = metadatum.Value
837+
value.Valid = true
838+
}
839+
840+
_, err := db.InsertWorkspaceResourceMetadata(ctx, database.InsertWorkspaceResourceMetadataParams{
841+
WorkspaceResourceID: resource.ID,
842+
Key: metadatum.Key,
843+
Value: value,
844+
Sensitive: metadatum.Sensitive,
845+
})
846+
if err != nil {
847+
return xerrors.Errorf("insert metadata: %w", err)
848+
}
849+
}
850+
832851
return nil
833852
}
834853

0 commit comments

Comments
 (0)