mirror of
https://github.com/coder/coder.git
synced 2025-07-06 15:41:45 +00:00
adds support for workspace presets to the coderd database. Support in the API and web frontend will be added in subsequent pull requests. This is the smallest meaningful contribution that I could get passing tests for.
* Add workspace preset tables to the database in a migration * Add queries to manipulate workspace presets to the database * Generate db related code for the newly added queries * Implement new methods to satisfy the Querier interface in dbauthz, dbmem, dbmock and querymetrics * Implement the required tests for dbauthz * Update the audit table to track changes to the new column in workspace builds
This commit is contained in:
@ -0,0 +1,25 @@
|
||||
-- Recreate the view to exclude the new column.
|
||||
DROP VIEW workspace_build_with_user;
|
||||
|
||||
ALTER TABLE workspace_builds
|
||||
DROP COLUMN template_version_preset_id;
|
||||
|
||||
DROP TABLE template_version_preset_parameters;
|
||||
|
||||
DROP TABLE template_version_presets;
|
||||
|
||||
CREATE VIEW
|
||||
workspace_build_with_user
|
||||
AS
|
||||
SELECT
|
||||
workspace_builds.*,
|
||||
coalesce(visible_users.avatar_url, '') AS initiator_by_avatar_url,
|
||||
coalesce(visible_users.username, '') AS initiator_by_username
|
||||
FROM
|
||||
workspace_builds
|
||||
LEFT JOIN
|
||||
visible_users
|
||||
ON
|
||||
workspace_builds.initiator_id = visible_users.id;
|
||||
|
||||
COMMENT ON VIEW workspace_build_with_user IS 'Joins in the username + avatar url of the initiated by user.';
|
@ -0,0 +1,49 @@
|
||||
CREATE TABLE template_version_presets
|
||||
(
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
template_version_id UUID NOT NULL,
|
||||
-- TODO (sasswart): TEXT vs VARCHAR? Check with Mr Kopping.
|
||||
-- TODO (sasswart): A comment on the presets RFC mentioned that we may need to
|
||||
-- aggregate presets by name because we want statistics for related presets across
|
||||
-- template versions. This makes me uncomfortable. It couples constraints to a user
|
||||
-- facing field that could be avoided.
|
||||
name TEXT NOT NULL,
|
||||
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
-- TODO (sasswart): What do we need updated_at for? Is it worth it to have a history table?
|
||||
-- TODO (sasswart): Will auditing have any relevance to presets?
|
||||
updated_at TIMESTAMP WITH TIME ZONE,
|
||||
FOREIGN KEY (template_version_id) REFERENCES template_versions (id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE template_version_preset_parameters
|
||||
(
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
template_version_preset_id UUID NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
-- TODO (sasswart): would it be beneficial to allow presets to still offer a choice for values?
|
||||
-- This would allow an operator to avoid having to create many similar templates where only one or
|
||||
-- a few values are different.
|
||||
value TEXT NOT NULL,
|
||||
FOREIGN KEY (template_version_preset_id) REFERENCES template_version_presets (id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
ALTER TABLE workspace_builds
|
||||
ADD COLUMN template_version_preset_id UUID NULL;
|
||||
|
||||
-- Recreate the view to include the new column.
|
||||
DROP VIEW workspace_build_with_user;
|
||||
CREATE VIEW
|
||||
workspace_build_with_user
|
||||
AS
|
||||
SELECT
|
||||
workspace_builds.*,
|
||||
coalesce(visible_users.avatar_url, '') AS initiator_by_avatar_url,
|
||||
coalesce(visible_users.username, '') AS initiator_by_username
|
||||
FROM
|
||||
workspace_builds
|
||||
LEFT JOIN
|
||||
visible_users
|
||||
ON
|
||||
workspace_builds.initiator_id = visible_users.id;
|
||||
|
||||
COMMENT ON VIEW workspace_build_with_user IS 'Joins in the username + avatar url of the initiated by user.';
|
33
coderd/database/migrations/testdata/fixtures/000288_workspace_parameter_presets.up.sql
vendored
Normal file
33
coderd/database/migrations/testdata/fixtures/000288_workspace_parameter_presets.up.sql
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
-- Organization
|
||||
INSERT INTO organizations (id, name, description, display_name, created_at, updated_at)
|
||||
VALUES ('d3fd38d2-ffc3-4ec2-8cfc-9c8dab6d9a74', 'Test Org', 'Test Organization', 'Test Org', now(), now());
|
||||
|
||||
-- User
|
||||
INSERT INTO users (id, email, username, created_at, updated_at, status, rbac_roles, login_type, hashed_password)
|
||||
VALUES ('1f573504-f7a0-4498-8b81-2e1939f3c4a2', 'test@coder.com', 'testuser', now(), now(), 'active', '{}', 'password', 'password');
|
||||
|
||||
-- Template
|
||||
INSERT INTO templates (id, created_by, organization_id, created_at, updated_at, deleted, name, provisioner, active_version_id, description)
|
||||
VALUES ('0bd0713b-176a-4864-a58b-546a1b021025', '1f573504-f7a0-4498-8b81-2e1939f3c4a2', 'd3fd38d2-ffc3-4ec2-8cfc-9c8dab6d9a74', now(), now(), false, 'test-template', 'terraform', null, 'Test template');
|
||||
|
||||
-- Template Version
|
||||
INSERT INTO template_versions (id, template_id, organization_id, created_by, created_at, updated_at, name, job_id, readme, message)
|
||||
VALUES ('f1276e15-01cd-406d-8ea5-64f113a79601', '0bd0713b-176a-4864-a58b-546a1b021025', 'd3fd38d2-ffc3-4ec2-8cfc-9c8dab6d9a74', '1f573504-f7a0-4498-8b81-2e1939f3c4a2', now(), now(), 'test-version', null, '', '');
|
||||
|
||||
-- Workspace
|
||||
INSERT INTO workspaces (id, organization_id, owner_id, template_id, created_at, updated_at, name, deleted, automatic_updates)
|
||||
VALUES ('8cb0b7c4-47b5-4bfc-ad92-88ccc61f3c12', 'd3fd38d2-ffc3-4ec2-8cfc-9c8dab6d9a74', '1f573504-f7a0-4498-8b81-2e1939f3c4a2', '0bd0713b-176a-4864-a58b-546a1b021025', now(), now(), 'test-workspace', false, 'never');
|
||||
|
||||
-- Provisioner Job
|
||||
INSERT INTO provisioner_jobs (id, organization_id, created_at, updated_at, status, worker_id, error, started_at)
|
||||
VALUES ('50ebe702-82e5-4053-859d-c24a3b742b57', 'd3fd38d2-ffc3-4ec2-8cfc-9c8dab6d9a74', now(), now(), 'pending', null, null, null);
|
||||
|
||||
-- Workspace Build
|
||||
INSERT INTO workspace_builds (id, workspace_id, template_version_id, initiator_id, job_id, created_at, updated_at, transition, reason)
|
||||
VALUES ('83b28647-743c-4649-b226-f2be697ca06c', '8cb0b7c4-47b5-4bfc-ad92-88ccc61f3c12', 'f1276e15-01cd-406d-8ea5-64f113a79601', '1f573504-f7a0-4498-8b81-2e1939f3c4a2', '50ebe702-82e5-4053-859d-c24a3b742b57', now(), now(), 'start', 'initiator');
|
||||
|
||||
-- Template Version Presets
|
||||
INSERT INTO template_version_presets (id, template_version_id, name, created_at, updated_at, description)
|
||||
VALUES
|
||||
('575a0fbb-cc3e-4709-ae9f-d1a3f365909c', 'f1276e15-01cd-406d-8ea5-64f113a79601', 'test', now(), now(), 'Test preset'),
|
||||
('2c76596d-436d-42eb-a38c-8d5a70497030', 'f1276e15-01cd-406d-8ea5-64f113a79601', 'test', now(), now(), 'Test preset');
|
Reference in New Issue
Block a user