mirror of
https://github.com/coder/coder.git
synced 2025-07-15 22:20:27 +00:00
This reverts commit ae3d90b057
.
This commit is contained in:
@ -12,19 +12,21 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/open-policy-agent/opa/topdown"
|
||||
"golang.org/x/xerrors"
|
||||
|
||||
"github.com/open-policy-agent/opa/topdown"
|
||||
|
||||
"cdr.dev/slog"
|
||||
|
||||
"github.com/coder/coder/v2/coderd/prebuilds"
|
||||
"github.com/coder/coder/v2/coderd/rbac/policy"
|
||||
"github.com/coder/coder/v2/coderd/rbac/rolestore"
|
||||
|
||||
"github.com/coder/coder/v2/coderd/database"
|
||||
"github.com/coder/coder/v2/coderd/database/dbtime"
|
||||
"github.com/coder/coder/v2/coderd/httpapi/httpapiconstraints"
|
||||
"github.com/coder/coder/v2/coderd/httpmw/loggermw"
|
||||
"github.com/coder/coder/v2/coderd/prebuilds"
|
||||
"github.com/coder/coder/v2/coderd/rbac"
|
||||
"github.com/coder/coder/v2/coderd/rbac/policy"
|
||||
"github.com/coder/coder/v2/coderd/rbac/rolestore"
|
||||
"github.com/coder/coder/v2/coderd/util/slice"
|
||||
"github.com/coder/coder/v2/provisionersdk"
|
||||
)
|
||||
@ -345,7 +347,6 @@ var (
|
||||
rbac.ResourceNotificationPreference.Type: {policy.ActionCreate, policy.ActionUpdate, policy.ActionDelete},
|
||||
rbac.ResourceNotificationTemplate.Type: {policy.ActionCreate, policy.ActionUpdate, policy.ActionDelete},
|
||||
rbac.ResourceCryptoKey.Type: {policy.ActionCreate, policy.ActionUpdate, policy.ActionDelete},
|
||||
rbac.ResourceFile.Type: {policy.ActionCreate, policy.ActionRead},
|
||||
}),
|
||||
Org: map[string][]rbac.Permission{},
|
||||
User: []rbac.Permission{},
|
||||
|
@ -999,10 +999,9 @@ func TemplateVersionTerraformValues(t testing.TB, db database.Store, orig databa
|
||||
t.Helper()
|
||||
|
||||
params := database.InsertTemplateVersionTerraformValuesByJobIDParams{
|
||||
JobID: takeFirst(orig.JobID, uuid.New()),
|
||||
CachedPlan: takeFirstSlice(orig.CachedPlan, []byte("{}")),
|
||||
CachedModuleFiles: orig.CachedModuleFiles,
|
||||
UpdatedAt: takeFirst(orig.UpdatedAt, dbtime.Now()),
|
||||
JobID: takeFirst(orig.JobID, uuid.New()),
|
||||
CachedPlan: takeFirstSlice(orig.CachedPlan, []byte("{}")),
|
||||
UpdatedAt: takeFirst(orig.UpdatedAt, dbtime.Now()),
|
||||
}
|
||||
|
||||
err := db.InsertTemplateVersionTerraformValuesByJobID(genCtx, params)
|
||||
|
@ -9315,7 +9315,6 @@ func (q *FakeQuerier) InsertTemplateVersionTerraformValuesByJobID(_ context.Cont
|
||||
row := database.TemplateVersionTerraformValue{
|
||||
TemplateVersionID: templateVersion.ID,
|
||||
CachedPlan: arg.CachedPlan,
|
||||
CachedModuleFiles: arg.CachedModuleFiles,
|
||||
UpdatedAt: arg.UpdatedAt,
|
||||
}
|
||||
q.templateVersionTerraformValues = append(q.templateVersionTerraformValues, row)
|
||||
|
6
coderd/database/dump.sql
generated
6
coderd/database/dump.sql
generated
@ -1440,8 +1440,7 @@ CREATE TABLE template_version_presets (
|
||||
CREATE TABLE template_version_terraform_values (
|
||||
template_version_id uuid NOT NULL,
|
||||
updated_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
cached_plan jsonb NOT NULL,
|
||||
cached_module_files uuid
|
||||
cached_plan jsonb NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE template_version_variables (
|
||||
@ -2851,9 +2850,6 @@ ALTER TABLE ONLY template_version_preset_parameters
|
||||
ALTER TABLE ONLY template_version_presets
|
||||
ADD CONSTRAINT template_version_presets_template_version_id_fkey FOREIGN KEY (template_version_id) REFERENCES template_versions(id) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY template_version_terraform_values
|
||||
ADD CONSTRAINT template_version_terraform_values_cached_module_files_fkey FOREIGN KEY (cached_module_files) REFERENCES files(id);
|
||||
|
||||
ALTER TABLE ONLY template_version_terraform_values
|
||||
ADD CONSTRAINT template_version_terraform_values_template_version_id_fkey FOREIGN KEY (template_version_id) REFERENCES template_versions(id) ON DELETE CASCADE;
|
||||
|
||||
|
@ -46,7 +46,6 @@ const (
|
||||
ForeignKeyTemplateVersionParametersTemplateVersionID ForeignKeyConstraint = "template_version_parameters_template_version_id_fkey" // ALTER TABLE ONLY template_version_parameters ADD CONSTRAINT template_version_parameters_template_version_id_fkey FOREIGN KEY (template_version_id) REFERENCES template_versions(id) ON DELETE CASCADE;
|
||||
ForeignKeyTemplateVersionPresetParametTemplateVersionPresetID ForeignKeyConstraint = "template_version_preset_paramet_template_version_preset_id_fkey" // ALTER TABLE ONLY template_version_preset_parameters ADD CONSTRAINT template_version_preset_paramet_template_version_preset_id_fkey FOREIGN KEY (template_version_preset_id) REFERENCES template_version_presets(id) ON DELETE CASCADE;
|
||||
ForeignKeyTemplateVersionPresetsTemplateVersionID ForeignKeyConstraint = "template_version_presets_template_version_id_fkey" // ALTER TABLE ONLY template_version_presets ADD CONSTRAINT template_version_presets_template_version_id_fkey FOREIGN KEY (template_version_id) REFERENCES template_versions(id) ON DELETE CASCADE;
|
||||
ForeignKeyTemplateVersionTerraformValuesCachedModuleFiles ForeignKeyConstraint = "template_version_terraform_values_cached_module_files_fkey" // ALTER TABLE ONLY template_version_terraform_values ADD CONSTRAINT template_version_terraform_values_cached_module_files_fkey FOREIGN KEY (cached_module_files) REFERENCES files(id);
|
||||
ForeignKeyTemplateVersionTerraformValuesTemplateVersionID ForeignKeyConstraint = "template_version_terraform_values_template_version_id_fkey" // ALTER TABLE ONLY template_version_terraform_values ADD CONSTRAINT template_version_terraform_values_template_version_id_fkey FOREIGN KEY (template_version_id) REFERENCES template_versions(id) ON DELETE CASCADE;
|
||||
ForeignKeyTemplateVersionVariablesTemplateVersionID ForeignKeyConstraint = "template_version_variables_template_version_id_fkey" // ALTER TABLE ONLY template_version_variables ADD CONSTRAINT template_version_variables_template_version_id_fkey FOREIGN KEY (template_version_id) REFERENCES template_versions(id) ON DELETE CASCADE;
|
||||
ForeignKeyTemplateVersionWorkspaceTagsTemplateVersionID ForeignKeyConstraint = "template_version_workspace_tags_template_version_id_fkey" // ALTER TABLE ONLY template_version_workspace_tags ADD CONSTRAINT template_version_workspace_tags_template_version_id_fkey FOREIGN KEY (template_version_id) REFERENCES template_versions(id) ON DELETE CASCADE;
|
||||
|
@ -1 +0,0 @@
|
||||
ALTER TABLE template_version_terraform_values DROP COLUMN cached_module_files;
|
@ -1 +0,0 @@
|
||||
ALTER TABLE template_version_terraform_values ADD COLUMN cached_module_files uuid references files(id);
|
@ -3224,7 +3224,6 @@ type TemplateVersionTerraformValue struct {
|
||||
TemplateVersionID uuid.UUID `db:"template_version_id" json:"template_version_id"`
|
||||
UpdatedAt time.Time `db:"updated_at" json:"updated_at"`
|
||||
CachedPlan json.RawMessage `db:"cached_plan" json:"cached_plan"`
|
||||
CachedModuleFiles uuid.NullUUID `db:"cached_module_files" json:"cached_module_files"`
|
||||
}
|
||||
|
||||
type TemplateVersionVariable struct {
|
||||
|
@ -11698,7 +11698,7 @@ func (q *sqlQuerier) UpdateTemplateVersionExternalAuthProvidersByJobID(ctx conte
|
||||
|
||||
const getTemplateVersionTerraformValues = `-- name: GetTemplateVersionTerraformValues :one
|
||||
SELECT
|
||||
template_version_terraform_values.template_version_id, template_version_terraform_values.updated_at, template_version_terraform_values.cached_plan, template_version_terraform_values.cached_module_files
|
||||
template_version_terraform_values.template_version_id, template_version_terraform_values.updated_at, template_version_terraform_values.cached_plan
|
||||
FROM
|
||||
template_version_terraform_values
|
||||
WHERE
|
||||
@ -11708,12 +11708,7 @@ WHERE
|
||||
func (q *sqlQuerier) GetTemplateVersionTerraformValues(ctx context.Context, templateVersionID uuid.UUID) (TemplateVersionTerraformValue, error) {
|
||||
row := q.db.QueryRowContext(ctx, getTemplateVersionTerraformValues, templateVersionID)
|
||||
var i TemplateVersionTerraformValue
|
||||
err := row.Scan(
|
||||
&i.TemplateVersionID,
|
||||
&i.UpdatedAt,
|
||||
&i.CachedPlan,
|
||||
&i.CachedModuleFiles,
|
||||
)
|
||||
err := row.Scan(&i.TemplateVersionID, &i.UpdatedAt, &i.CachedPlan)
|
||||
return i, err
|
||||
}
|
||||
|
||||
@ -11722,32 +11717,24 @@ INSERT INTO
|
||||
template_version_terraform_values (
|
||||
template_version_id,
|
||||
cached_plan,
|
||||
cached_module_files,
|
||||
updated_at
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
(select id from template_versions where job_id = $1),
|
||||
$2,
|
||||
$3,
|
||||
$4
|
||||
$3
|
||||
)
|
||||
`
|
||||
|
||||
type InsertTemplateVersionTerraformValuesByJobIDParams struct {
|
||||
JobID uuid.UUID `db:"job_id" json:"job_id"`
|
||||
CachedPlan json.RawMessage `db:"cached_plan" json:"cached_plan"`
|
||||
CachedModuleFiles uuid.NullUUID `db:"cached_module_files" json:"cached_module_files"`
|
||||
UpdatedAt time.Time `db:"updated_at" json:"updated_at"`
|
||||
JobID uuid.UUID `db:"job_id" json:"job_id"`
|
||||
CachedPlan json.RawMessage `db:"cached_plan" json:"cached_plan"`
|
||||
UpdatedAt time.Time `db:"updated_at" json:"updated_at"`
|
||||
}
|
||||
|
||||
func (q *sqlQuerier) InsertTemplateVersionTerraformValuesByJobID(ctx context.Context, arg InsertTemplateVersionTerraformValuesByJobIDParams) error {
|
||||
_, err := q.db.ExecContext(ctx, insertTemplateVersionTerraformValuesByJobID,
|
||||
arg.JobID,
|
||||
arg.CachedPlan,
|
||||
arg.CachedModuleFiles,
|
||||
arg.UpdatedAt,
|
||||
)
|
||||
_, err := q.db.ExecContext(ctx, insertTemplateVersionTerraformValuesByJobID, arg.JobID, arg.CachedPlan, arg.UpdatedAt)
|
||||
return err
|
||||
}
|
||||
|
||||
|
@ -11,13 +11,11 @@ INSERT INTO
|
||||
template_version_terraform_values (
|
||||
template_version_id,
|
||||
cached_plan,
|
||||
cached_module_files,
|
||||
updated_at
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
(select id from template_versions where job_id = @job_id),
|
||||
@cached_plan,
|
||||
@cached_module_files,
|
||||
@updated_at
|
||||
);
|
||||
|
@ -2,9 +2,7 @@ package provisionerdserver
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/sha256"
|
||||
"database/sql"
|
||||
"encoding/hex"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
@ -52,10 +50,6 @@ import (
|
||||
sdkproto "github.com/coder/coder/v2/provisionersdk/proto"
|
||||
)
|
||||
|
||||
const (
|
||||
tarMimeType = "application/x-tar"
|
||||
)
|
||||
|
||||
const (
|
||||
// DefaultAcquireJobLongPollDur is the time the (deprecated) AcquireJob rpc waits to try to obtain a job before
|
||||
// canceling and returning an empty job.
|
||||
@ -1432,59 +1426,11 @@ func (s *server) CompleteJob(ctx context.Context, completed *proto.CompletedJob)
|
||||
return nil, xerrors.Errorf("update template version external auth providers: %w", err)
|
||||
}
|
||||
|
||||
plan := jobType.TemplateImport.Plan
|
||||
moduleFiles := jobType.TemplateImport.ModuleFiles
|
||||
// If there is a plan, or a module files archive we need to insert a
|
||||
// template_version_terraform_values row.
|
||||
if len(plan) > 0 || len(moduleFiles) > 0 {
|
||||
// ...but the plan and the module files archive are both optional! So
|
||||
// we need to fallback to a valid JSON object if the plan was omitted.
|
||||
if len(plan) == 0 {
|
||||
plan = []byte("{}")
|
||||
}
|
||||
|
||||
// ...and we only want to insert a files row if an archive was provided.
|
||||
var fileID uuid.NullUUID
|
||||
if len(moduleFiles) > 0 {
|
||||
hashBytes := sha256.Sum256(moduleFiles)
|
||||
hash := hex.EncodeToString(hashBytes[:])
|
||||
|
||||
// nolint:gocritic // Requires reading "system" files
|
||||
file, err := s.Database.GetFileByHashAndCreator(dbauthz.AsSystemRestricted(ctx), database.GetFileByHashAndCreatorParams{Hash: hash, CreatedBy: uuid.Nil})
|
||||
switch {
|
||||
case err == nil:
|
||||
// This set of modules is already cached, which means we can reuse them
|
||||
fileID = uuid.NullUUID{
|
||||
Valid: true,
|
||||
UUID: file.ID,
|
||||
}
|
||||
case !xerrors.Is(err, sql.ErrNoRows):
|
||||
return nil, xerrors.Errorf("check for cached modules: %w", err)
|
||||
default:
|
||||
// nolint:gocritic // Requires creating a "system" file
|
||||
file, err = s.Database.InsertFile(dbauthz.AsSystemRestricted(ctx), database.InsertFileParams{
|
||||
ID: uuid.New(),
|
||||
Hash: hash,
|
||||
CreatedBy: uuid.Nil,
|
||||
CreatedAt: dbtime.Now(),
|
||||
Mimetype: tarMimeType,
|
||||
Data: moduleFiles,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, xerrors.Errorf("insert template version terraform modules: %w", err)
|
||||
}
|
||||
fileID = uuid.NullUUID{
|
||||
Valid: true,
|
||||
UUID: file.ID,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
err = s.Database.InsertTemplateVersionTerraformValuesByJobID(ctx, database.InsertTemplateVersionTerraformValuesByJobIDParams{
|
||||
JobID: jobID,
|
||||
UpdatedAt: now,
|
||||
CachedPlan: plan,
|
||||
CachedModuleFiles: fileID,
|
||||
if len(jobType.TemplateImport.Plan) > 0 {
|
||||
err := s.Database.InsertTemplateVersionTerraformValuesByJobID(ctx, database.InsertTemplateVersionTerraformValuesByJobIDParams{
|
||||
JobID: jobID,
|
||||
CachedPlan: jobType.TemplateImport.Plan,
|
||||
UpdatedAt: now,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, xerrors.Errorf("insert template version terraform data: %w", err)
|
||||
|
Reference in New Issue
Block a user