Skip to content

Commit e4ee7f9

Browse files
committed
More wiring
1 parent 99c5fde commit e4ee7f9

File tree

12 files changed

+693
-518
lines changed

12 files changed

+693
-518
lines changed

coderd/provisionerdserver/provisionerdserver.go

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -385,9 +385,22 @@ func (server *Server) UpdateJob(ctx context.Context, request *proto.UpdateJobReq
385385
return nil, xerrors.Errorf("get template version by job id: %w", err)
386386
}
387387

388+
var variableValues []*sdkproto.VariableValue
388389
for _, templateVariable := range request.TemplateVariables {
389390
server.Logger.Info(ctx, "insert template variable", slog.F("template_version_id", templateVersion.ID), slog.F("template_variable", templateVariable))
390391

392+
var value = templateVariable.DefaultValue
393+
for _, v := range request.VariableValues {
394+
if v.Name == templateVariable.Name {
395+
value = v.Value
396+
variableValues = append(variableValues, &sdkproto.VariableValue{
397+
Name: v.Name,
398+
Value: v.Value,
399+
})
400+
break
401+
}
402+
}
403+
391404
_, err = server.Database.InsertTemplateVersionVariable(ctx, database.InsertTemplateVersionVariableParams{
392405
TemplateVersionID: templateVersion.ID,
393406
Name: templateVariable.Name,
@@ -396,12 +409,17 @@ func (server *Server) UpdateJob(ctx context.Context, request *proto.UpdateJobReq
396409
DefaultValue: templateVariable.DefaultValue,
397410
Required: templateVariable.Required,
398411
Sensitive: templateVariable.Sensitive,
399-
// FIXME value
412+
Value: value,
400413
})
401414
if err != nil {
402415
return nil, xerrors.Errorf("insert parameter schema: %w", err)
403416
}
404417
}
418+
419+
return &proto.UpdateJobResponse{
420+
Canceled: job.CanceledAt.Valid,
421+
VariableValues: variableValues,
422+
}, nil
405423
}
406424

407425
if len(request.ParameterSchemas) > 0 {
@@ -1216,7 +1234,8 @@ func auditActionFromTransition(transition database.WorkspaceTransition) database
12161234
}
12171235

12181236
type TemplateVersionImportJob struct {
1219-
TemplateVersionID uuid.UUID `json:"template_version_id"`
1237+
TemplateVersionID uuid.UUID `json:"template_version_id"`
1238+
VariableValues []codersdk.VariableValue `json:"variable_values"`
12201239
}
12211240

12221241
// WorkspaceProvisionJob is the payload for the "workspace_provision" job type.

coderd/templateversions.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1311,6 +1311,7 @@ func (api *API) postTemplateVersionsByOrganization(rw http.ResponseWriter, r *ht
13111311
templateVersionID := uuid.New()
13121312
jobInput, err := json.Marshal(provisionerdserver.TemplateVersionImportJob{
13131313
TemplateVersionID: templateVersionID,
1314+
VariableValues: req.VariableValues,
13141315
})
13151316
if err != nil {
13161317
return xerrors.Errorf("marshal job input: %w", err)

codersdk/organizations.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,13 @@ type CreateTemplateVersionRequest struct {
5454
// ParameterValues allows for additional parameters to be provided
5555
// during the dry-run provision stage.
5656
ParameterValues []CreateParameterRequest `json:"parameter_values,omitempty"`
57+
58+
VariableValues []VariableValue `json:"variable_values,omitempty"`
59+
}
60+
61+
type VariableValue struct {
62+
Name string `json:"name"`
63+
Value string `json:"value"`
5764
}
5865

5966
// CreateTemplateRequest provides options when creating a template.

provisioner/terraform/provision.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ func (s *server) Provision(stream proto.DRPCProvisioner_ProvisionStream) error {
139139
}
140140
s.logger.Debug(ctx, "ran initialization")
141141

142-
env, err := provisionEnv(config, request.GetPlan().GetParameterValues(), request.GetPlan().GetRichParameterValues())
142+
env, err := provisionEnv(config, request.GetPlan().GetParameterValues(), request.GetPlan().GetVariableValues(), request.GetPlan().GetRichParameterValues())
143143
if err != nil {
144144
return err
145145
}
@@ -205,7 +205,7 @@ func planVars(plan *proto.Provision_Plan) ([]string, error) {
205205
return vars, nil
206206
}
207207

208-
func provisionEnv(config *proto.Provision_Config, params []*proto.ParameterValue, richParams []*proto.RichParameterValue) ([]string, error) {
208+
func provisionEnv(config *proto.Provision_Config, params []*proto.ParameterValue, variableValues []*proto.VariableValue, richParams []*proto.RichParameterValue) ([]string, error) {
209209
env := safeEnviron()
210210
env = append(env,
211211
"CODER_AGENT_URL="+config.Metadata.CoderUrl,
@@ -229,6 +229,9 @@ func provisionEnv(config *proto.Provision_Config, params []*proto.ParameterValue
229229
return nil, xerrors.Errorf("unsupported parameter type %q for %q", param.DestinationScheme, param.Name)
230230
}
231231
}
232+
for _, variable := range variableValues {
233+
env = append(env, fmt.Sprintf("%s=%s", variable.Name, variable.Value))
234+
}
232235
for _, param := range richParams {
233236
env = append(env, provider.ParameterEnvironmentVariable(param.Name)+"="+param.Value)
234237
}

provisionerd/proto/provisionerd.pb.go

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

provisionerd/proto/provisionerd.proto

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ message AcquiredJob {
2121
}
2222
message TemplateImport {
2323
provisioner.Provision.Metadata metadata = 1;
24+
repeated provisioner.VariableValue variable_values = 2;
2425
}
2526
message TemplateDryRun {
2627
repeated provisioner.ParameterValue parameter_values = 1;
@@ -100,14 +101,16 @@ message UpdateJobRequest {
100101
repeated Log logs = 2;
101102
repeated provisioner.ParameterSchema parameter_schemas = 3;
102103
repeated provisioner.TemplateVariable template_variables = 4;
103-
bytes readme = 5;
104+
repeated provisioner.VariableValue variable_values = 5;
105+
bytes readme = 6;
104106
}
105107

106108
message UpdateJobResponse {
107109
bool canceled = 1;
108110
// If parameter schemas are sent, the job will respond
109111
// with resolved parameter values.
110112
repeated provisioner.ParameterValue parameter_values = 2;
113+
repeated provisioner.VariableValue variable_values = 5;
111114
}
112115

113116
message CommitQuotaRequest {

provisionerd/proto/provisionerd_drpc.pb.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

provisionerd/runner/runner.go

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,9 @@ func (r *Runner) do(ctx context.Context) (*proto.CompletedJob, *proto.FailedJob)
416416
}
417417
switch jobType := r.job.Type.(type) {
418418
case *proto.AcquiredJob_TemplateImport_:
419-
r.logger.Debug(context.Background(), "acquired job is template import")
419+
r.logger.Info(context.Background(), "acquired job is template import",
420+
slog.F("variable_values", jobType.TemplateImport.VariableValues), // FIXME to be redacted
421+
)
420422

421423
failedJob := r.runReadmeParse(ctx)
422424
if failedJob != nil {
@@ -542,10 +544,14 @@ func (r *Runner) runTemplateImport(ctx context.Context) (*proto.CompletedJob, *p
542544
if err != nil {
543545
return nil, r.failedJobf("run parse: %s", err)
544546
}
547+
548+
// Once Terraform template variables are parsed, the runner can pass variables
549+
// to store in database and filter valid ones.
545550
updateResponse, err := r.update(ctx, &proto.UpdateJobRequest{
546551
JobId: r.job.JobId,
547552
ParameterSchemas: parameterSchemas,
548553
TemplateVariables: templateVariables,
554+
VariableValues: r.job.GetTemplateImport().GetVariableValues(),
549555
})
550556
if err != nil {
551557
return nil, r.failedJobf("update job: %s", err)
@@ -569,7 +575,7 @@ func (r *Runner) runTemplateImport(ctx context.Context) (*proto.CompletedJob, *p
569575
Stage: "Detecting persistent resources",
570576
CreatedAt: time.Now().UnixMilli(),
571577
})
572-
startResources, parameters, err := r.runTemplateImportProvision(ctx, updateResponse.ParameterValues, &sdkproto.Provision_Metadata{
578+
startResources, parameters, err := r.runTemplateImportProvision(ctx, updateResponse.ParameterValues, updateResponse.VariableValues, &sdkproto.Provision_Metadata{
573579
CoderUrl: r.job.GetTemplateImport().Metadata.CoderUrl,
574580
WorkspaceTransition: sdkproto.WorkspaceTransition_START,
575581
})
@@ -584,7 +590,7 @@ func (r *Runner) runTemplateImport(ctx context.Context) (*proto.CompletedJob, *p
584590
Stage: "Detecting ephemeral resources",
585591
CreatedAt: time.Now().UnixMilli(),
586592
})
587-
stopResources, _, err := r.runTemplateImportProvision(ctx, updateResponse.ParameterValues, &sdkproto.Provision_Metadata{
593+
stopResources, _, err := r.runTemplateImportProvision(ctx, updateResponse.ParameterValues, updateResponse.VariableValues, &sdkproto.Provision_Metadata{
588594
CoderUrl: r.job.GetTemplateImport().Metadata.CoderUrl,
589595
WorkspaceTransition: sdkproto.WorkspaceTransition_STOP,
590596
})
@@ -652,13 +658,13 @@ func (r *Runner) runTemplateImportParse(ctx context.Context) ([]*sdkproto.Parame
652658
// Performs a dry-run provision when importing a template.
653659
// This is used to detect resources that would be provisioned for a workspace in various states.
654660
// It doesn't define values for rich parameters as they're unknown during template import.
655-
func (r *Runner) runTemplateImportProvision(ctx context.Context, values []*sdkproto.ParameterValue, metadata *sdkproto.Provision_Metadata) ([]*sdkproto.Resource, []*sdkproto.RichParameter, error) {
656-
return r.runTemplateImportProvisionWithRichParameters(ctx, values, nil, metadata)
661+
func (r *Runner) runTemplateImportProvision(ctx context.Context, values []*sdkproto.ParameterValue, variableValues []*sdkproto.VariableValue, metadata *sdkproto.Provision_Metadata) ([]*sdkproto.Resource, []*sdkproto.RichParameter, error) {
662+
return r.runTemplateImportProvisionWithRichParameters(ctx, values, variableValues, nil, metadata)
657663
}
658664

659665
// Performs a dry-run provision with provided rich parameters.
660666
// This is used to detect resources that would be provisioned for a workspace in various states.
661-
func (r *Runner) runTemplateImportProvisionWithRichParameters(ctx context.Context, values []*sdkproto.ParameterValue, richParameterValues []*sdkproto.RichParameterValue, metadata *sdkproto.Provision_Metadata) ([]*sdkproto.Resource, []*sdkproto.RichParameter, error) {
667+
func (r *Runner) runTemplateImportProvisionWithRichParameters(ctx context.Context, values []*sdkproto.ParameterValue, variableValues []*sdkproto.VariableValue, richParameterValues []*sdkproto.RichParameterValue, metadata *sdkproto.Provision_Metadata) ([]*sdkproto.Resource, []*sdkproto.RichParameter, error) {
662668
ctx, span := r.startTrace(ctx, tracing.FuncName())
663669
defer span.End()
664670

@@ -697,6 +703,7 @@ func (r *Runner) runTemplateImportProvisionWithRichParameters(ctx context.Contex
697703
},
698704
ParameterValues: values,
699705
RichParameterValues: richParameterValues,
706+
VariableValues: variableValues,
700707
},
701708
},
702709
})
@@ -785,6 +792,7 @@ func (r *Runner) runTemplateDryRun(ctx context.Context) (*proto.CompletedJob, *p
785792
// Run the template import provision task since it's already a dry run.
786793
resources, _, err := r.runTemplateImportProvisionWithRichParameters(ctx,
787794
r.job.GetTemplateDryRun().GetParameterValues(),
795+
nil, // FIXME variable values
788796
r.job.GetTemplateDryRun().GetRichParameterValues(),
789797
metadata,
790798
)

0 commit comments

Comments
 (0)