Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit0fb3743

Browse files
committed
chore: use new provider, accept values for default
Signed-off-by: Danny Kopping <dannykopping@gmail.com>
1 parent7e75433 commit0fb3743

12 files changed

+276
-0
lines changed

‎coderd/provisionerdserver/provisionerdserver.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
protobuf"google.golang.org/protobuf/proto"
2929

3030
"cdr.dev/slog"
31+
3132
"github.com/coder/coder/v2/coderd/util/slice"
3233

3334
"github.com/coder/coder/v2/codersdk/drpcsdk"
@@ -2217,6 +2218,7 @@ func InsertWorkspacePresetAndParameters(ctx context.Context, db database.Store,
22172218
CreatedAt:t,
22182219
DesiredInstances:desiredInstances,
22192220
InvalidateAfterSecs:ttl,
2221+
IsDefault:protoPreset.GetDefault(),
22202222
})
22212223
iferr!=nil {
22222224
returnxerrors.Errorf("insert preset: %w",err)

‎provisioner/terraform/resources.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -922,6 +922,7 @@ func ConvertState(ctx context.Context, modules []*tfjson.StateModule, rawGraph s
922922
Instances:prebuildInstances,
923923
ExpirationPolicy:expirationPolicy,
924924
},
925+
Default:preset.Default,
925926
}
926927

927928
ifslice.Contains(duplicatedPresetNames,preset.Name) {
@@ -940,6 +941,17 @@ func ConvertState(ctx context.Context, modules []*tfjson.StateModule, rawGraph s
940941
)
941942
}
942943

944+
// Validate that only one preset is marked as default.
945+
vardefaultPresetsint
946+
for_,preset:=rangepresets {
947+
ifpreset.Default {
948+
defaultPresets++
949+
}
950+
}
951+
ifdefaultPresets>1 {
952+
returnnil,xerrors.Errorf("a maximum of 1 coder_workspace_preset can be marked as default, but %d are set",defaultPresets)
953+
}
954+
943955
// A map is used to ensure we don't have duplicates!
944956
externalAuthProvidersMap:=map[string]*proto.ExternalAuthProviderResource{}
945957
for_,tfResources:=rangetfResourcesByLabel {

‎provisioner/terraform/resources_test.go

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818

1919
"cdr.dev/slog"
2020
"cdr.dev/slog/sloggers/slogtest"
21+
2122
"github.com/coder/coder/v2/testutil"
2223

2324
"github.com/coder/coder/v2/cryptorand"
@@ -1308,6 +1309,90 @@ func TestParameterValidation(t *testing.T) {
13081309
require.ErrorContains(t,err,"coder_parameter names must be unique but\"identical-0\",\"identical-1\" and\"identical-2\" appear multiple times")
13091310
}
13101311

1312+
funcTestDefaultPresets(t*testing.T) {
1313+
t.Parallel()
1314+
1315+
// nolint:dogsled
1316+
_,filename,_,_:=runtime.Caller(0)
1317+
dir:=filepath.Join(filepath.Dir(filename),"testdata","resources","presets")
1318+
1319+
cases:=map[string]struct {
1320+
fixtureFilestring
1321+
expectErrorbool
1322+
errorMsgstring
1323+
validatefunc(t*testing.T,state*terraform.State)
1324+
}{
1325+
"multiple defaults should fail": {
1326+
fixtureFile:"multiple-defaults",
1327+
expectError:true,
1328+
errorMsg:"a maximum of 1 coder_workspace_preset can be marked as default, but 2 are set",
1329+
},
1330+
"single default should succeed": {
1331+
fixtureFile:"single-default",
1332+
expectError:false,
1333+
validate:func(t*testing.T,state*terraform.State) {
1334+
require.Len(t,state.Presets,2)
1335+
vardefaultCountint
1336+
for_,preset:=rangestate.Presets {
1337+
ifpreset.Default {
1338+
defaultCount++
1339+
require.Equal(t,"development",preset.Name)
1340+
}
1341+
}
1342+
require.Equal(t,1,defaultCount)
1343+
},
1344+
},
1345+
"no defaults should succeed": {
1346+
fixtureFile:"no-defaults",
1347+
expectError:false,
1348+
validate:func(t*testing.T,state*terraform.State) {
1349+
require.Len(t,state.Presets,2)
1350+
for_,preset:=rangestate.Presets {
1351+
require.False(t,preset.Default)
1352+
}
1353+
},
1354+
},
1355+
}
1356+
1357+
forname,tc:=rangecases {
1358+
tc:=tc
1359+
t.Run(name,func(t*testing.T) {
1360+
t.Parallel()
1361+
ctx,logger:=ctxAndLogger(t)
1362+
1363+
tfPlanRaw,err:=os.ReadFile(filepath.Join(dir,tc.fixtureFile+".tfplan.json"))
1364+
require.NoError(t,err)
1365+
vartfPlan tfjson.Plan
1366+
err=json.Unmarshal(tfPlanRaw,&tfPlan)
1367+
require.NoError(t,err)
1368+
tfPlanGraph,err:=os.ReadFile(filepath.Join(dir,tc.fixtureFile+".tfplan.dot"))
1369+
require.NoError(t,err)
1370+
1371+
modules:= []*tfjson.StateModule{tfPlan.PlannedValues.RootModule}
1372+
iftfPlan.PriorState!=nil {
1373+
modules=append(modules,tfPlan.PriorState.Values.RootModule)
1374+
}else {
1375+
modules=append(modules,tfPlan.PlannedValues.RootModule)
1376+
}
1377+
state,err:=terraform.ConvertState(ctx,modules,string(tfPlanGraph),logger)
1378+
1379+
iftc.expectError {
1380+
require.Error(t,err)
1381+
require.Nil(t,state)
1382+
iftc.errorMsg!="" {
1383+
require.ErrorContains(t,err,tc.errorMsg)
1384+
}
1385+
}else {
1386+
require.NoError(t,err)
1387+
require.NotNil(t,state)
1388+
iftc.validate!=nil {
1389+
tc.validate(t,state)
1390+
}
1391+
}
1392+
})
1393+
}
1394+
}
1395+
13111396
funcTestInstanceTypeAssociation(t*testing.T) {
13121397
t.Parallel()
13131398
typetcstruct {
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
terraform {
2+
required_providers {
3+
coder={
4+
source="coder/coder"
5+
version="2.3.0-pre2"
6+
}
7+
}
8+
}
9+
10+
data"coder_parameter""instance_type" {
11+
name="instance_type"
12+
type="string"
13+
description="Instance type"
14+
default="t3.micro"
15+
}
16+
17+
data"coder_workspace_preset""development" {
18+
name="development"
19+
default=true
20+
parameters={
21+
(data.coder_parameter.instance_type.name)="t3.micro"
22+
}
23+
prebuilds {
24+
instances=1
25+
}
26+
}
27+
28+
data"coder_workspace_preset""production" {
29+
name="production"
30+
default=true
31+
parameters={
32+
(data.coder_parameter.instance_type.name)="t3.large"
33+
}
34+
prebuilds {
35+
instances=2
36+
}
37+
}
38+
39+
resource"coder_agent""dev" {
40+
os="linux"
41+
arch="amd64"
42+
}
43+
44+
resource"null_resource""dev" {
45+
depends_on=[coder_agent.dev]
46+
}

‎provisioner/terraform/testdata/resources/presets/multiple-defaults.tfplan.dot

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎provisioner/terraform/testdata/resources/presets/multiple-defaults.tfplan.json

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
terraform {
2+
required_providers {
3+
coder={
4+
source="coder/coder"
5+
version="2.3.0-pre2"
6+
}
7+
}
8+
}
9+
10+
data"coder_parameter""instance_type" {
11+
name="instance_type"
12+
type="string"
13+
description="Instance type"
14+
default="t3.micro"
15+
}
16+
17+
data"coder_workspace_preset""development" {
18+
name="development"
19+
default=false
20+
parameters={
21+
(data.coder_parameter.instance_type.name)="t3.micro"
22+
}
23+
prebuilds {
24+
instances=1
25+
}
26+
}
27+
28+
data"coder_workspace_preset""production" {
29+
name="production"
30+
default=false
31+
parameters={
32+
(data.coder_parameter.instance_type.name)="t3.large"
33+
}
34+
prebuilds {
35+
instances=2
36+
}
37+
}
38+
39+
resource"coder_agent""dev" {
40+
os="linux"
41+
arch="amd64"
42+
}
43+
44+
resource"null_resource""dev" {
45+
depends_on=[coder_agent.dev]
46+
}

‎provisioner/terraform/testdata/resources/presets/no-defaults.tfplan.dot

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎provisioner/terraform/testdata/resources/presets/no-defaults.tfplan.json

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
terraform {
2+
required_providers {
3+
coder={
4+
source="coder/coder"
5+
version="2.3.0-pre2"
6+
}
7+
}
8+
}
9+
10+
data"coder_parameter""instance_type" {
11+
name="instance_type"
12+
type="string"
13+
description="Instance type"
14+
default="t3.micro"
15+
}
16+
17+
data"coder_workspace_preset""development" {
18+
name="development"
19+
default=true
20+
parameters={
21+
(data.coder_parameter.instance_type.name)="t3.micro"
22+
}
23+
prebuilds {
24+
instances=1
25+
}
26+
}
27+
28+
data"coder_workspace_preset""production" {
29+
name="production"
30+
default=false
31+
parameters={
32+
(data.coder_parameter.instance_type.name)="t3.large"
33+
}
34+
prebuilds {
35+
instances=2
36+
}
37+
}
38+
39+
resource"coder_agent""dev" {
40+
os="linux"
41+
arch="amd64"
42+
}
43+
44+
resource"null_resource""dev" {
45+
depends_on=[coder_agent.dev]
46+
}

‎provisioner/terraform/testdata/resources/presets/single-default.tfplan.dot

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp