Skip to content

Commit 3dc0474

Browse files
committed
Refactor the min-max condition
1 parent 8cc120d commit 3dc0474

12 files changed

+542
-28
lines changed

provisioner/terraform/resources.go

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -484,12 +484,26 @@ func ConvertState(modules []*tfjson.StateModule, rawGraph string, rawParameterNa
484484
protoParam.ValidationRegex = param.Validation[0].Regex
485485
protoParam.ValidationError = param.Validation[0].Error
486486

487-
// Backward compatibility with terraform-coder-plugin < v0.8.2
488-
if _, ok := resource.AttributeValues["min_disabled"]; !ok && param.Validation[0].Min == 0 {
489-
param.Validation[0].MinDisabled = true
490-
}
491-
if _, ok := resource.AttributeValues["max_disabled"]; !ok && param.Validation[0].Max == 0 {
492-
param.Validation[0].MaxDisabled = true
487+
validationAttributeValues, ok := resource.AttributeValues["validation"]
488+
if ok {
489+
validationAttributeValuesArr, ok := validationAttributeValues.([]interface{})
490+
if ok {
491+
validationAttributeValuesMapStr, ok := validationAttributeValuesArr[0].(map[string]interface{})
492+
if ok {
493+
// Backward compatibility with terraform-coder-plugin < v0.8.2:
494+
// * "min_disabled" and "max_disabled" are not available yet
495+
// * "min" and "max" are required to be specified together
496+
if _, ok = validationAttributeValuesMapStr["min_disabled"]; !ok {
497+
if param.Validation[0].Min != 0 || param.Validation[0].Max != 0 {
498+
param.Validation[0].MinDisabled = false
499+
param.Validation[0].MaxDisabled = false
500+
} else {
501+
param.Validation[0].MinDisabled = true
502+
param.Validation[0].MaxDisabled = true
503+
}
504+
}
505+
}
506+
}
493507
}
494508

495509
if !param.Validation[0].MaxDisabled {

provisioner/terraform/resources_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,18 @@ func TestConvertResources(t *testing.T) {
329329
DefaultValue: "4",
330330
ValidationMin: terraform.PtrInt32(3),
331331
ValidationMax: terraform.PtrInt32(6),
332+
}, {
333+
Name: "number_example_min_zero",
334+
Type: "number",
335+
DefaultValue: "4",
336+
ValidationMin: terraform.PtrInt32(0),
337+
ValidationMax: terraform.PtrInt32(6),
338+
}, {
339+
Name: "number_example_max_zero",
340+
Type: "number",
341+
DefaultValue: "-2",
342+
ValidationMin: terraform.PtrInt32(-3),
343+
ValidationMax: terraform.PtrInt32(0),
332344
}, {
333345
Name: "number_example",
334346
Type: "number",
@@ -364,12 +376,24 @@ func TestConvertResources(t *testing.T) {
364376
DefaultValue: "4",
365377
ValidationMin: terraform.PtrInt32(3),
366378
ValidationMax: nil,
379+
}, {
380+
Name: "number_example_min_zero",
381+
Type: "number",
382+
DefaultValue: "4",
383+
ValidationMin: terraform.PtrInt32(0),
384+
ValidationMax: nil,
367385
}, {
368386
Name: "number_example_max",
369387
Type: "number",
370388
DefaultValue: "4",
371389
ValidationMin: nil,
372390
ValidationMax: terraform.PtrInt32(6),
391+
}, {
392+
Name: "number_example_max_zero",
393+
Type: "number",
394+
DefaultValue: "-3",
395+
ValidationMin: nil,
396+
ValidationMax: terraform.PtrInt32(0),
373397
}, {
374398
Name: "number_example",
375399
Type: "number",

provisioner/terraform/testdata/rich-parameters-validation/rich-parameters-validation.tf

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,15 @@ data "coder_parameter" "number_example_min" {
2626
}
2727
}
2828

29+
data "coder_parameter" "number_example_min_zero" {
30+
name = "number_example_min_zero"
31+
type = "number"
32+
default = 4
33+
validation {
34+
min = 0
35+
}
36+
}
37+
2938
data "coder_parameter" "number_example_max" {
3039
name = "number_example_max"
3140
type = "number"
@@ -35,6 +44,15 @@ data "coder_parameter" "number_example_max" {
3544
}
3645
}
3746

47+
data "coder_parameter" "number_example_max_zero" {
48+
name = "number_example_max_zero"
49+
type = "number"
50+
default = -3
51+
validation {
52+
max = 0
53+
}
54+
}
55+
3856
data "coder_parameter" "number_example" {
3957
name = "number_example"
4058
type = "number"

provisioner/terraform/testdata/rich-parameters-validation/rich-parameters-validation.tfplan.dot

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

provisioner/terraform/testdata/rich-parameters-validation/rich-parameters-validation.tfplan.json

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

provisioner/terraform/testdata/rich-parameters-validation/rich-parameters-validation.tfstate.dot

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

0 commit comments

Comments
 (0)