From e2725728ab5e49a811820d643ce1a3f3c55cd118 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Wed, 23 Apr 2025 08:42:01 -0500 Subject: [PATCH 1/3] chore: db column for some tfstate used in dynamic params --- coderd/database/dump.sql | 5 ++++- coderd/database/models.go | 2 ++ coderd/database/queries.sql.go | 9 +++++++-- .../database/queries/templateversionterraformvalues.sql | 2 ++ 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/coderd/database/dump.sql b/coderd/database/dump.sql index 83d998b2b9a3e..2503137a2f806 100644 --- a/coderd/database/dump.sql +++ b/coderd/database/dump.sql @@ -1409,9 +1409,12 @@ 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_plan jsonb NOT NULL, + tfstate bytea ); +COMMENT ON COLUMN template_version_terraform_values.tfstate IS 'Tarball of the relevant tfstate directory files for dynamic parameters. Not all files are included.'; + CREATE TABLE template_version_variables ( template_version_id uuid NOT NULL, name text NOT NULL, diff --git a/coderd/database/models.go b/coderd/database/models.go index f817ff2712d54..3d88f3f29cc17 100644 --- a/coderd/database/models.go +++ b/coderd/database/models.go @@ -3207,6 +3207,8 @@ 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"` + // Tarball of the relevant tfstate directory files for dynamic parameters. Not all files are included. + Tfstate []byte `db:"tfstate" json:"tfstate"` } type TemplateVersionVariable struct { diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index 60416b1a35730..7c6af73bf9aa4 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -11463,7 +11463,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.template_version_id, template_version_terraform_values.updated_at, template_version_terraform_values.cached_plan, template_version_terraform_values.tfstate FROM template_version_terraform_values WHERE @@ -11473,7 +11473,12 @@ 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) + err := row.Scan( + &i.TemplateVersionID, + &i.UpdatedAt, + &i.CachedPlan, + &i.Tfstate, + ) return i, err } diff --git a/coderd/database/queries/templateversionterraformvalues.sql b/coderd/database/queries/templateversionterraformvalues.sql index 61d5e23cf5c5c..0a8c5f6885d5f 100644 --- a/coderd/database/queries/templateversionterraformvalues.sql +++ b/coderd/database/queries/templateversionterraformvalues.sql @@ -11,11 +11,13 @@ INSERT INTO template_version_terraform_values ( template_version_id, cached_plan, + tfstate, updated_at ) VALUES ( (select id from template_versions where job_id = @job_id), @cached_plan, + @tfstate, @updated_at ); From 8ef603a35c605e6df873f549f2f3d0b0c55a7bb3 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Wed, 23 Apr 2025 08:42:35 -0500 Subject: [PATCH 2/3] fixup! chore: db column for some tfstate used in dynamic params --- .../database/migrations/000318_template_module_data.down.sql | 2 ++ coderd/database/migrations/000318_template_module_data.up.sql | 4 ++++ 2 files changed, 6 insertions(+) create mode 100644 coderd/database/migrations/000318_template_module_data.down.sql create mode 100644 coderd/database/migrations/000318_template_module_data.up.sql diff --git a/coderd/database/migrations/000318_template_module_data.down.sql b/coderd/database/migrations/000318_template_module_data.down.sql new file mode 100644 index 0000000000000..954c50aeddfe2 --- /dev/null +++ b/coderd/database/migrations/000318_template_module_data.down.sql @@ -0,0 +1,2 @@ +ALTER TABLE template_version_terraform_values + DROP COLUMN IF EXISTS modules; diff --git a/coderd/database/migrations/000318_template_module_data.up.sql b/coderd/database/migrations/000318_template_module_data.up.sql new file mode 100644 index 0000000000000..304cae0e5902a --- /dev/null +++ b/coderd/database/migrations/000318_template_module_data.up.sql @@ -0,0 +1,4 @@ +ALTER TABLE template_version_terraform_values + ADD COLUMN IF NOT EXISTS tfstate bytea DEFAULT null; + +COMMENT ON COLUMN template_version_terraform_values.tfstate IS 'Tarball of the relevant tfstate directory files for dynamic parameters. Not all files are included.' From 3d29475556e2d6c79939e96403fe76f9bd5fc088 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Wed, 23 Apr 2025 09:03:38 -0500 Subject: [PATCH 3/3] gen --- coderd/database/queries.sql.go | 12 ++++++++++-- coderd/provisionerdserver/provisionerdserver.go | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index 7c6af73bf9aa4..6e3dc584492b1 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -11487,24 +11487,32 @@ INSERT INTO template_version_terraform_values ( template_version_id, cached_plan, + tfstate, updated_at ) VALUES ( (select id from template_versions where job_id = $1), $2, - $3 + $3, + $4 ) ` type InsertTemplateVersionTerraformValuesByJobIDParams struct { JobID uuid.UUID `db:"job_id" json:"job_id"` CachedPlan json.RawMessage `db:"cached_plan" json:"cached_plan"` + Tfstate []byte `db:"tfstate" json:"tfstate"` 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.UpdatedAt) + _, err := q.db.ExecContext(ctx, insertTemplateVersionTerraformValuesByJobID, + arg.JobID, + arg.CachedPlan, + arg.Tfstate, + arg.UpdatedAt, + ) return err } diff --git a/coderd/provisionerdserver/provisionerdserver.go b/coderd/provisionerdserver/provisionerdserver.go index 78f597fa55369..204a6bc29277c 100644 --- a/coderd/provisionerdserver/provisionerdserver.go +++ b/coderd/provisionerdserver/provisionerdserver.go @@ -1428,6 +1428,7 @@ func (s *server) CompleteJob(ctx context.Context, completed *proto.CompletedJob) err := s.Database.InsertTemplateVersionTerraformValuesByJobID(ctx, database.InsertTemplateVersionTerraformValuesByJobIDParams{ JobID: jobID, CachedPlan: jobType.TemplateImport.Plan, + Tfstate: nil, UpdatedAt: now, }) if err != nil {