Skip to content

Commit 6639c69

Browse files
authored
feat: add "display_order" column to coder_parameter to keep parameters sorted in UI (#8227)
1 parent 72a48be commit 6639c69

23 files changed

+968
-481
lines changed

coderd/database/dbfake/dbfake.go

+7
Original file line numberDiff line numberDiff line change
@@ -2410,6 +2410,12 @@ func (q *fakeQuerier) GetTemplateVersionParameters(_ context.Context, templateVe
24102410
}
24112411
parameters = append(parameters, param)
24122412
}
2413+
sort.Slice(parameters, func(i, j int) bool {
2414+
if parameters[i].DisplayOrder != parameters[j].DisplayOrder {
2415+
return parameters[i].DisplayOrder < parameters[j].DisplayOrder
2416+
}
2417+
return strings.ToLower(parameters[i].Name) < strings.ToLower(parameters[j].Name)
2418+
})
24132419
return parameters, nil
24142420
}
24152421

@@ -3934,6 +3940,7 @@ func (q *fakeQuerier) InsertTemplateVersionParameter(_ context.Context, arg data
39343940
ValidationMax: arg.ValidationMax,
39353941
ValidationMonotonic: arg.ValidationMonotonic,
39363942
Required: arg.Required,
3943+
DisplayOrder: arg.DisplayOrder,
39373944
LegacyVariableName: arg.LegacyVariableName,
39383945
}
39393946
q.templateVersionParameters = append(q.templateVersionParameters, param)

coderd/database/dump.sql

+3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ALTER TABLE template_version_parameters DROP COLUMN display_order;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
ALTER TABLE template_version_parameters ADD COLUMN display_order integer NOT NULL DEFAULT 0;
2+
3+
COMMENT ON COLUMN template_version_parameters.display_order
4+
IS 'Specifies the order in which to display parameters in user interfaces.';

coderd/database/models.go

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries.sql.go

+10-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/templateversionparameters.sql

+5-3
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ INSERT INTO
1616
validation_monotonic,
1717
required,
1818
legacy_variable_name,
19-
display_name
19+
display_name,
20+
display_order
2021
)
2122
VALUES
2223
(
@@ -35,8 +36,9 @@ VALUES
3536
$13,
3637
$14,
3738
$15,
38-
$16
39+
$16,
40+
$17
3941
) RETURNING *;
4042

4143
-- name: GetTemplateVersionParameters :many
42-
SELECT * FROM template_version_parameters WHERE template_version_id = $1;
44+
SELECT * FROM template_version_parameters WHERE template_version_id = $1 ORDER BY display_order ASC, LOWER(name) ASC;

coderd/provisionerdserver/provisionerdserver.go

+1
Original file line numberDiff line numberDiff line change
@@ -825,6 +825,7 @@ func (server *Server) CompleteJob(ctx context.Context, completed *proto.Complete
825825
ValidationMax: validationMax,
826826
ValidationMonotonic: richParameter.ValidationMonotonic,
827827
Required: richParameter.Required,
828+
DisplayOrder: richParameter.Order,
828829
LegacyVariableName: richParameter.LegacyVariableName,
829830
})
830831
if err != nil {

coderd/templateversions_test.go

+90
Original file line numberDiff line numberDiff line change
@@ -1291,3 +1291,93 @@ func TestTemplateVersionPatch(t *testing.T) {
12911291
require.Error(t, err)
12921292
})
12931293
}
1294+
1295+
func TestTemplateVersionParameters_Order(t *testing.T) {
1296+
t.Parallel()
1297+
1298+
const (
1299+
firstParameterName = "first_parameter"
1300+
firstParameterType = "string"
1301+
firstParameterValue = "aaa"
1302+
// no order
1303+
1304+
secondParameterName = "Second_parameter"
1305+
secondParameterType = "number"
1306+
secondParameterValue = "2"
1307+
secondParameterOrder = 3
1308+
1309+
thirdParameterName = "third_parameter"
1310+
thirdParameterType = "number"
1311+
thirdParameterValue = "3"
1312+
thirdParameterOrder = 3
1313+
1314+
fourthParameterName = "Fourth_parameter"
1315+
fourthParameterType = "number"
1316+
fourthParameterValue = "3"
1317+
fourthParameterOrder = 2
1318+
1319+
fifthParameterName = "Fifth_parameter"
1320+
fifthParameterType = "string"
1321+
fifthParameterValue = "aaa"
1322+
// no order
1323+
)
1324+
1325+
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
1326+
user := coderdtest.CreateFirstUser(t, client)
1327+
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
1328+
Parse: echo.ParseComplete,
1329+
ProvisionPlan: []*proto.Provision_Response{
1330+
{
1331+
Type: &proto.Provision_Response_Complete{
1332+
Complete: &proto.Provision_Complete{
1333+
Parameters: []*proto.RichParameter{
1334+
{
1335+
Name: firstParameterName,
1336+
Type: firstParameterType,
1337+
// No order
1338+
},
1339+
{
1340+
Name: secondParameterName,
1341+
Type: secondParameterType,
1342+
Order: secondParameterOrder,
1343+
},
1344+
{
1345+
Name: thirdParameterName,
1346+
Type: thirdParameterType,
1347+
Order: thirdParameterOrder,
1348+
},
1349+
{
1350+
Name: fourthParameterName,
1351+
Type: fourthParameterType,
1352+
Order: fourthParameterOrder,
1353+
},
1354+
{
1355+
Name: fifthParameterName,
1356+
Type: fifthParameterType,
1357+
// No order
1358+
},
1359+
},
1360+
},
1361+
},
1362+
},
1363+
},
1364+
ProvisionApply: []*proto.Provision_Response{{
1365+
Type: &proto.Provision_Response_Complete{
1366+
Complete: &proto.Provision_Complete{},
1367+
},
1368+
}},
1369+
})
1370+
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
1371+
1372+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
1373+
defer cancel()
1374+
1375+
templateRichParameters, err := client.TemplateVersionRichParameters(ctx, version.ID)
1376+
require.NoError(t, err)
1377+
require.Len(t, templateRichParameters, 5)
1378+
require.Equal(t, fifthParameterName, templateRichParameters[0].Name)
1379+
require.Equal(t, firstParameterName, templateRichParameters[1].Name)
1380+
require.Equal(t, fourthParameterName, templateRichParameters[2].Name)
1381+
require.Equal(t, secondParameterName, templateRichParameters[3].Name)
1382+
require.Equal(t, thirdParameterName, templateRichParameters[4].Name)
1383+
}

go.mod

+2-3
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ require (
7575
github.com/codeclysm/extract v2.2.0+incompatible
7676
github.com/coder/flog v1.1.0
7777
github.com/coder/retry v1.4.0
78-
github.com/coder/terraform-provider-coder v0.8.2
78+
github.com/coder/terraform-provider-coder v0.9.0
7979
github.com/coder/wgtunnel v0.1.5
8080
github.com/coreos/go-oidc/v3 v3.6.0
8181
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf
@@ -126,7 +126,7 @@ require (
126126
github.com/mitchellh/go-wordwrap v1.0.1
127127
github.com/mitchellh/mapstructure v1.5.0
128128
github.com/moby/moby v24.0.1+incompatible
129-
github.com/muesli/reflow v0.3.0
129+
github.com/muesli/reflow v0.3.0 // indirect
130130
github.com/open-policy-agent/opa v0.51.0
131131
github.com/ory/dockertest/v3 v3.10.0
132132
github.com/pion/udp v0.1.2
@@ -218,7 +218,6 @@ require (
218218
github.com/docker/docker v23.0.3+incompatible // indirect
219219
github.com/docker/go-connections v0.4.0 // indirect
220220
github.com/docker/go-units v0.5.0 // indirect
221-
github.com/dustin/go-humanize v1.0.1
222221
github.com/elastic/go-windows v1.0.0 // indirect
223222
github.com/fxamacker/cbor/v2 v2.4.0 // indirect
224223
github.com/gabriel-vasile/mimetype v1.4.2 // indirect

go.sum

+2-3
Original file line numberDiff line numberDiff line change
@@ -193,8 +193,8 @@ github.com/coder/ssh v0.0.0-20230621095435-9a7e23486f1c h1:TI7TzdFI0UvQmwgyQhtI1
193193
github.com/coder/ssh v0.0.0-20230621095435-9a7e23486f1c/go.mod h1:aGQbuCLyhRLMzZF067xc84Lh7JDs1FKwCmF1Crl9dxQ=
194194
github.com/coder/tailscale v0.0.0-20230522123520-74712221d00f h1:F0Xr1d8h8dAHn7tab1HXuzYFkcjmCydnEfdMbkOhlVk=
195195
github.com/coder/tailscale v0.0.0-20230522123520-74712221d00f/go.mod h1:jpg+77g19FpXL43U1VoIqoSg1K/Vh5CVxycGldQ8KhA=
196-
github.com/coder/terraform-provider-coder v0.8.2 h1:EPhkdpsNd8fcg6eqpAQr+W1eRrEAMtugoqujoTK4O6o=
197-
github.com/coder/terraform-provider-coder v0.8.2/go.mod h1:UIfU3bYNeSzJJvHyJ30tEKjD6Z9utloI+HUM/7n94CY=
196+
github.com/coder/terraform-provider-coder v0.9.0 h1:OJazaeBz6O2h7tDDUyUWgNW71lTPbvbI2raX1CGuBzI=
197+
github.com/coder/terraform-provider-coder v0.9.0/go.mod h1:UIfU3bYNeSzJJvHyJ30tEKjD6Z9utloI+HUM/7n94CY=
198198
github.com/coder/wgtunnel v0.1.5 h1:WP3sCj/3iJ34eKvpMQEp1oJHvm24RYh0NHbj1kfUKfs=
199199
github.com/coder/wgtunnel v0.1.5/go.mod h1:bokoUrHnUFY4lu9KOeSYiIcHTI2MO1KwqumU4DPDyJI=
200200
github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw=
@@ -238,7 +238,6 @@ github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDD
238238
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
239239
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
240240
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
241-
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
242241
github.com/elastic/go-sysinfo v1.11.0 h1:QW+6BF1oxBoAprH3w2yephF7xLkrrSXj7gl2xC2BM4w=
243242
github.com/elastic/go-sysinfo v1.11.0/go.mod h1:6KQb31j0QeWBDF88jIdWSxE8cwoOB9tO4Y4osN7Q70E=
244243
github.com/elastic/go-windows v1.0.0 h1:qLURgZFkkrYyTTkvYpsZIgf83AUsdIHfvlJaqaZ7aSY=

provisioner/terraform/executor.go

+9-17
Original file line numberDiff line numberDiff line change
@@ -280,12 +280,7 @@ func (e *executor) planResources(ctx, killCtx context.Context, planfilePath stri
280280
}
281281
modules = append(modules, plan.PlannedValues.RootModule)
282282

283-
rawParameterNames, err := rawRichParameterNames(e.workdir)
284-
if err != nil {
285-
return nil, xerrors.Errorf("raw rich parameter names: %w", err)
286-
}
287-
288-
state, err := ConvertState(modules, rawGraph, rawParameterNames)
283+
state, err := ConvertState(modules, rawGraph)
289284
if err != nil {
290285
return nil, err
291286
}
@@ -410,18 +405,15 @@ func (e *executor) stateResources(ctx, killCtx context.Context) (*State, error)
410405
return nil, xerrors.Errorf("get terraform graph: %w", err)
411406
}
412407
converted := &State{}
413-
if state.Values != nil {
414-
rawParameterNames, err := rawRichParameterNames(e.workdir)
415-
if err != nil {
416-
return nil, xerrors.Errorf("raw rich parameter names: %w", err)
417-
}
408+
if state.Values == nil {
409+
return converted, nil
410+
}
418411

419-
converted, err = ConvertState([]*tfjson.StateModule{
420-
state.Values.RootModule,
421-
}, rawGraph, rawParameterNames)
422-
if err != nil {
423-
return nil, err
424-
}
412+
converted, err = ConvertState([]*tfjson.StateModule{
413+
state.Values.RootModule,
414+
}, rawGraph)
415+
if err != nil {
416+
return nil, err
425417
}
426418
return converted, nil
427419
}

provisioner/terraform/parameters.go

-70
This file was deleted.

0 commit comments

Comments
 (0)