Skip to content

Commit 222fd90

Browse files
committed
fallback to JSON-encoding default variable values
1 parent 78d88fe commit 222fd90

File tree

2 files changed

+22
-36
lines changed

2 files changed

+22
-36
lines changed

provisioner/terraform/tfparse/tfparse.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -598,7 +598,11 @@ func interfaceToString(i interface{}) (string, error) {
598598
return strconv.FormatFloat(v, 'f', -1, 64), nil
599599
case bool:
600600
return strconv.FormatBool(v), nil
601-
default:
602-
return "", xerrors.Errorf("unsupported type %T", v)
601+
default: // just try to JSON-encode it.
602+
var sb strings.Builder
603+
if err := json.NewEncoder(&sb).Encode(i); err != nil {
604+
return "", xerrors.Errorf("convert %T: %w", v, err)
605+
}
606+
return strings.TrimSpace(sb.String()), nil
603607
}
604608
}

provisioner/terraform/tfparse/tfparse_test.go

Lines changed: 16 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,14 @@ func Test_WorkspaceTagDefaultsFromFile(t *testing.T) {
462462
type = bool
463463
default = true
464464
}
465+
variable "listvar" {
466+
type = list(string)
467+
default = ["a"]
468+
}
469+
variable "mapvar" {
470+
type = map(string)
471+
default = {"a": "b"}
472+
}
465473
data "coder_parameter" "stringparam" {
466474
name = "stringparam"
467475
type = "string"
@@ -487,6 +495,8 @@ func Test_WorkspaceTagDefaultsFromFile(t *testing.T) {
487495
"stringvar" = var.stringvar
488496
"numvar" = var.numvar
489497
"boolvar" = var.boolvar
498+
"listvar" = var.listvar
499+
"mapvar" = var.mapvar
490500
"stringparam" = data.coder_parameter.stringparam.value
491501
"numparam" = data.coder_parameter.numparam.value
492502
"boolparam" = data.coder_parameter.boolparam.value
@@ -498,47 +508,15 @@ func Test_WorkspaceTagDefaultsFromFile(t *testing.T) {
498508
"stringvar": "a",
499509
"numvar": "1",
500510
"boolvar": "true",
511+
"listvar": `["a"]`,
512+
"mapvar": `{"a":"b"}`,
501513
"stringparam": "a",
502514
"numparam": "1",
503515
"boolparam": "true",
504516
"listparam": `["a", "b"]`,
505517
},
506518
expectError: ``,
507519
},
508-
{
509-
name: "unsupported list variable",
510-
files: map[string]string{
511-
"main.tf": `
512-
variable "listvar" {
513-
type = list(string)
514-
default = ["a"]
515-
}
516-
data "coder_workspace_tags" "tags" {
517-
tags = {
518-
listvar = var.listvar
519-
}
520-
}`,
521-
},
522-
expectTags: nil,
523-
expectError: `can't convert variable default value to string: unsupported type []interface {}`,
524-
},
525-
{
526-
name: "unsupported map variable",
527-
files: map[string]string{
528-
"main.tf": `
529-
variable "mapvar" {
530-
type = map(string)
531-
default = {"a": "b"}
532-
}
533-
data "coder_workspace_tags" "tags" {
534-
tags = {
535-
mapvar = var.mapvar
536-
}
537-
}`,
538-
},
539-
expectTags: nil,
540-
expectError: `can't convert variable default value to string: unsupported type map[string]interface {}`,
541-
},
542520
{
543521
name: "overlapping var name",
544522
files: map[string]string{
@@ -547,6 +525,10 @@ func Test_WorkspaceTagDefaultsFromFile(t *testing.T) {
547525
type = string
548526
default = "1"
549527
}
528+
variable "unused" {
529+
type = map(string)
530+
default = {"a" : "b"}
531+
}
550532
variable "ab" {
551533
description = "This is a variable of type string"
552534
type = string

0 commit comments

Comments
 (0)