Skip to content

Commit 022eec8

Browse files
committed
Add deprecated parameter schema
1 parent 367c913 commit 022eec8

File tree

16 files changed

+516
-397
lines changed

16 files changed

+516
-397
lines changed

coderd/provisionerdaemons.go

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -227,8 +227,8 @@ func (server *provisionerdServer) AcquireJob(ctx context.Context, _ *proto.Empty
227227
return nil, failJob(fmt.Sprintf("get owner: %s", err))
228228
}
229229

230-
// Compute parameters for the workspace to consume.
231-
parameters, err := parameter.Compute(ctx, server.Database, parameter.ComputeScope{
230+
// Compute deprecatedParameters for the workspace to consume.
231+
deprecatedParameters, err := parameter.Compute(ctx, server.Database, parameter.ComputeScope{
232232
TemplateImportJobID: templateVersion.JobID,
233233
TemplateID: uuid.NullUUID{
234234
UUID: template.ID,
@@ -244,18 +244,31 @@ func (server *provisionerdServer) AcquireJob(ctx context.Context, _ *proto.Empty
244244
}
245245

246246
// Convert types to their corresponding protobuf types.
247-
protoParameters := convertComputedParameterValues(parameters)
247+
deprecatedProtoParameters := convertComputedParameterValues(deprecatedParameters)
248248
transition, err := convertWorkspaceTransition(workspaceBuild.Transition)
249249
if err != nil {
250250
return nil, failJob(fmt.Sprintf("convert workspace transition: %s", err))
251251
}
252252

253+
protoParameters := make([]*sdkproto.ParameterValue, 0)
254+
parameters, err := server.Database.GetWorkspaceBuildParameters(ctx, workspaceBuild.ID)
255+
if err != nil {
256+
return nil, failJob(fmt.Sprintf("get workspace build parameters: %s", err))
257+
}
258+
for _, parameter := range parameters {
259+
protoParameters = append(protoParameters, &sdkproto.ParameterValue{
260+
Name: parameter.Name,
261+
Value: parameter.Value,
262+
})
263+
}
264+
253265
protoJob.Type = &proto.AcquiredJob_WorkspaceBuild_{
254266
WorkspaceBuild: &proto.AcquiredJob_WorkspaceBuild{
255-
WorkspaceBuildId: workspaceBuild.ID.String(),
256-
WorkspaceName: workspace.Name,
257-
State: workspaceBuild.ProvisionerState,
258-
ParameterValues: protoParameters,
267+
WorkspaceBuildId: workspaceBuild.ID.String(),
268+
WorkspaceName: workspace.Name,
269+
State: workspaceBuild.ProvisionerState,
270+
ParameterValues: protoParameters,
271+
DeprecatedParameterValues: deprecatedProtoParameters,
259272
Metadata: &sdkproto.Provision_Metadata{
260273
CoderUrl: server.AccessURL.String(),
261274
WorkspaceTransition: transition,
@@ -404,8 +417,8 @@ func (server *provisionerdServer) UpdateJob(ctx context.Context, request *proto.
404417
}
405418
}
406419

407-
if len(request.ParameterSchemas) > 0 {
408-
for index, protoParameter := range request.ParameterSchemas {
420+
if len(request.DeprecatedParameterSchemas) > 0 {
421+
for index, protoParameter := range request.DeprecatedParameterSchemas {
409422
validationTypeSystem, err := convertValidationTypeSystem(protoParameter.ValidationTypeSystem)
410423
if err != nil {
411424
return nil, xerrors.Errorf("convert validation type system for %q: %w", protoParameter.Name, err)
@@ -472,8 +485,8 @@ func (server *provisionerdServer) UpdateJob(ctx context.Context, request *proto.
472485
}
473486

474487
return &proto.UpdateJobResponse{
475-
Canceled: job.CanceledAt.Valid,
476-
ParameterValues: protoParameters,
488+
Canceled: job.CanceledAt.Valid,
489+
DeprecatedParameterValues: protoParameters,
477490
}, nil
478491
}
479492

coderd/workspacebuilds.go

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -481,21 +481,6 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
481481
}
482482

483483
workspaceBuildID := uuid.New()
484-
names := make([]string, 0, len(parameters))
485-
values := make([]string, 0, len(parameters))
486-
for _, param := range parameters {
487-
names = append(names, param.Name)
488-
values = append(values, param.Value)
489-
}
490-
err = db.InsertWorkspaceBuildParameters(ctx, database.InsertWorkspaceBuildParametersParams{
491-
WorkspaceBuildID: workspaceBuildID,
492-
Name: names,
493-
Value: values,
494-
})
495-
if err != nil {
496-
return xerrors.Errorf("insert workspace build parameter: %w", err)
497-
}
498-
499484
input, err := json.Marshal(workspaceProvisionJob{
500485
WorkspaceBuildID: workspaceBuildID,
501486
})
@@ -535,6 +520,21 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
535520
return xerrors.Errorf("insert workspace build: %w", err)
536521
}
537522

523+
names := make([]string, 0, len(parameters))
524+
values := make([]string, 0, len(parameters))
525+
for _, param := range parameters {
526+
names = append(names, param.Name)
527+
values = append(values, param.Value)
528+
}
529+
err = db.InsertWorkspaceBuildParameters(ctx, database.InsertWorkspaceBuildParametersParams{
530+
WorkspaceBuildID: workspaceBuildID,
531+
Name: names,
532+
Value: values,
533+
})
534+
if err != nil {
535+
return xerrors.Errorf("insert workspace build parameter: %w", err)
536+
}
537+
538538
return nil
539539
})
540540
if err != nil {

coderd/workspaces.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,22 @@ func (api *API) postWorkspacesByOrganization(rw http.ResponseWriter, r *http.Req
509509
if err != nil {
510510
return xerrors.Errorf("insert workspace build: %w", err)
511511
}
512+
513+
parameterNames := make([]string, 0, len(createWorkspace.Parameters))
514+
parameterValues := make([]string, 0, len(createWorkspace.Parameters))
515+
for _, param := range createWorkspace.Parameters {
516+
parameterNames = append(parameterNames, param.Name)
517+
parameterValues = append(parameterValues, param.Value)
518+
}
519+
err = db.InsertWorkspaceBuildParameters(ctx, database.InsertWorkspaceBuildParametersParams{
520+
WorkspaceBuildID: workspaceBuildID,
521+
Name: parameterNames,
522+
Value: parameterValues,
523+
})
524+
if err != nil {
525+
return xerrors.Errorf("insert workspace build parameter: %w", err)
526+
}
527+
512528
return nil
513529
})
514530
if err != nil {

codersdk/organizations.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,8 @@ type CreateWorkspaceRequest struct {
8484
TTLMillis *int64 `json:"ttl_ms,omitempty"`
8585
// DeprecatedParameterValues allows for additional parameters to be provided
8686
// during the initial provision.
87-
DeprecatedParameterValues []DeprecatedCreateParameterRequest `json:"parameter_values,omitempty"`
87+
DeprecatedParameterValues []DeprecatedCreateParameterRequest `json:"deprecated_parameter_values,omitempty"`
88+
Parameters []WorkspaceBuildParameter `json:"parameters"`
8889
}
8990

9091
func (c *Client) Organization(ctx context.Context, id uuid.UUID) (Organization, error) {

examples/templates/gcp-linux/main.tf

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,52 @@ terraform {
1111
}
1212
}
1313

14-
variable "project_id" {
14+
data "coder_parameter" "project_id" {
15+
name = "Project ID"
16+
icon = "/icon/folder.svg"
1517
description = "Which Google Compute Project should your workspace live in?"
18+
default = "something"
1619
}
1720

18-
variable "zone" {
19-
description = "What region should your workspace live in?"
20-
default = "us-central1-a"
21-
validation {
22-
condition = contains(["northamerica-northeast1-a", "us-central1-a", "us-west2-c", "europe-west4-b", "southamerica-east1-a"], var.zone)
23-
error_message = "Invalid zone!"
21+
data "coder_parameter" "region" {
22+
name = "Region"
23+
description = "Select a location for your workspace to live."
24+
icon = "/emojis/1f30e.png"
25+
option {
26+
name = "Toronto, Canada"
27+
value = "northamerica-northeast1-a"
28+
icon = "/emojis/1f1e8-1f1e6.png"
29+
}
30+
option {
31+
name = "Council Bluff, Iowa, USA"
32+
value = "us-central1-a"
33+
icon = "/emojis/1f920.png"
34+
}
35+
option {
36+
name = "Hamina, Finland"
37+
value = "europe-north1-a"
38+
icon = "/emojis/1f1eb-1f1ee.png"
39+
}
40+
option {
41+
name = "Warsaw, Poland"
42+
value = "europe-central2-a"
43+
icon = "/emojis/1f1f5-1f1f1.png"
44+
}
45+
option {
46+
name = "Madrid, Spain"
47+
value = "europe-southwest1-a"
48+
icon = "/emojis/1f1ea-1f1f8.png"
49+
}
50+
option {
51+
name = "London, England"
52+
value = "europe-west2-a"
53+
icon = "/emojis/1f1ec-1f1e7.png"
2454
}
2555
}
2656

2757
provider "google" {
28-
zone = var.zone
29-
project = var.project_id
58+
zone = data.coder_parameter.region.value
59+
project = data.coder_parameter.project_id.value
3060
}
3161

3262
data "google_compute_default_service_account" "default" {
@@ -38,7 +68,7 @@ data "coder_workspace" "me" {
3868
resource "google_compute_disk" "root" {
3969
name = "coder-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}-root"
4070
type = "pd-ssd"
41-
zone = var.zone
71+
zone = data.coder_parameter.region.value
4272
image = "debian-cloud/debian-11"
4373
lifecycle {
4474
ignore_changes = [image]
@@ -75,7 +105,7 @@ resource "coder_app" "code-server" {
75105
}
76106

77107
resource "google_compute_instance" "dev" {
78-
zone = var.zone
108+
zone = data.coder_parameter.region.value
79109
count = data.coder_workspace.me.start_count
80110
name = "coder-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}-root"
81111
machine_type = "e2-medium"

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ require (
7171
github.com/charmbracelet/lipgloss v0.6.0
7272
github.com/cli/safeexec v1.0.0
7373
github.com/coder/retry v1.3.0
74-
github.com/coder/terraform-provider-coder v0.4.16-0.20220929232427-aaa860cdfa3a
74+
github.com/coder/terraform-provider-coder v0.6.0
7575
github.com/coreos/go-oidc/v3 v3.4.0
7676
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf
7777
github.com/creack/pty v1.1.18

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -357,8 +357,8 @@ github.com/coder/ssh v0.0.0-20220811105153-fcea99919338 h1:tN5GKFT68YLVzJoA8AHui
357357
github.com/coder/ssh v0.0.0-20220811105153-fcea99919338/go.mod h1:ZSS+CUoKHDrqVakTfTWUlKSr9MtMFkC4UvtQKD7O914=
358358
github.com/coder/tailscale v1.1.1-0.20221015033036-5861cbbf7bf5 h1:WVH6e/qK3Wpl0wbmpORD2oQ1qLJborF3fsFHyO1ps0Y=
359359
github.com/coder/tailscale v1.1.1-0.20221015033036-5861cbbf7bf5/go.mod h1:5amxy08qijEa8bcTW2SeIy4MIqcmd7LMsuOxqOlj2Ak=
360-
github.com/coder/terraform-provider-coder v0.4.16-0.20220929232427-aaa860cdfa3a h1:AQRie9LF7kXw/BzrJtfX1lKQXlYqBmt1j+fSOXOQ6/I=
361-
github.com/coder/terraform-provider-coder v0.4.16-0.20220929232427-aaa860cdfa3a/go.mod h1:UIfU3bYNeSzJJvHyJ30tEKjD6Z9utloI+HUM/7n94CY=
360+
github.com/coder/terraform-provider-coder v0.6.0 h1:Q3qSweZEFcH87XC4Q0LVITZ0mfBeT4e688LTfL3GfJE=
361+
github.com/coder/terraform-provider-coder v0.6.0/go.mod h1:UIfU3bYNeSzJJvHyJ30tEKjD6Z9utloI+HUM/7n94CY=
362362
github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE=
363363
github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU=
364364
github.com/containerd/aufs v0.0.0-20210316121734-20793ff83c97/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU=

provisioner/terraform/provision.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212

1313
"github.com/coder/coder/provisionersdk"
1414
"github.com/coder/coder/provisionersdk/proto"
15+
"github.com/coder/terraform-provider-coder/provider"
1516
)
1617

1718
// Provision executes `terraform apply` or `terraform plan` for dry runs.
@@ -174,7 +175,7 @@ func (s *server) Provision(stream proto.DRPCProvisioner_ProvisionStream) error {
174175

175176
func provisionVars(start *proto.Provision_Start) ([]string, error) {
176177
vars := []string{}
177-
for _, param := range start.ParameterValues {
178+
for _, param := range start.DeprecatedParameterValues {
178179
vars = append(vars, fmt.Sprintf("%s=%s", param.Name, param.Value))
179180
}
180181
return vars, nil
@@ -194,6 +195,9 @@ func provisionEnv(start *proto.Provision_Start) ([]string, error) {
194195
for key, value := range provisionersdk.AgentScriptEnv() {
195196
env = append(env, key+"="+value)
196197
}
198+
for _, parameter := range start.ParameterValues {
199+
env = append(env, provider.ParameterEnvironmentVariable(parameter.Name)+"="+parameter.Value)
200+
}
197201
return env, nil
198202
}
199203

0 commit comments

Comments
 (0)