mirror of
https://github.com/hashicorp/packer.git
synced 2026-10-21 21:52:10 -04:00
make variable block implement MetaBlock itf
This commit is contained in:
@@ -447,7 +447,7 @@ func Test_ParseHCPPackerRegistryBlock(t *testing.T) {
|
||||
"bucket": &Variable{
|
||||
Name: "bucket",
|
||||
ExpectedType: cty.String,
|
||||
Values: []VariableAssignment{{From: "default", Value: cty.StringVal("variable-bucket-slug")}},
|
||||
Assignments: []VariableAssignment{{From: "default", Value: cty.StringVal("variable-bucket-slug")}},
|
||||
},
|
||||
},
|
||||
Sources: map[SourceRef]SourceBlock{
|
||||
@@ -511,12 +511,12 @@ func Test_ParseHCPPackerRegistryBlock(t *testing.T) {
|
||||
"bucket_labels": &Variable{
|
||||
Name: "bucket_labels",
|
||||
ExpectedType: cty.Map(cty.String),
|
||||
Values: []VariableAssignment{{From: "default", Value: cty.MapVal(map[string]cty.Value{"team": cty.StringVal("development")})}},
|
||||
Assignments: []VariableAssignment{{From: "default", Value: cty.MapVal(map[string]cty.Value{"team": cty.StringVal("development")})}},
|
||||
},
|
||||
"build_labels": &Variable{
|
||||
Name: "build_labels",
|
||||
ExpectedType: cty.Map(cty.String),
|
||||
Values: []VariableAssignment{{
|
||||
Assignments: []VariableAssignment{{
|
||||
From: "default",
|
||||
Value: cty.MapVal(map[string]cty.Value{
|
||||
"packageA": cty.StringVal("v3.17.5"),
|
||||
|
||||
@@ -483,14 +483,14 @@ func TestParse_build(t *testing.T) {
|
||||
"name": &Variable{
|
||||
Name: "name",
|
||||
ExpectedType: cty.String,
|
||||
Values: []VariableAssignment{{From: "default", Value: cty.StringVal("build-name")}},
|
||||
Assignments: []VariableAssignment{{From: "default", Value: cty.StringVal("build-name")}},
|
||||
},
|
||||
},
|
||||
LocalVariables: Variables{
|
||||
"description": &Variable{
|
||||
Name: "description",
|
||||
ExpectedType: cty.String,
|
||||
Values: []VariableAssignment{{From: "default", Value: cty.StringVal("This is the description for build-name.")}},
|
||||
Assignments: []VariableAssignment{{From: "default", Value: cty.StringVal("This is the description for build-name.")}},
|
||||
},
|
||||
},
|
||||
Sources: map[SourceRef]SourceBlock{
|
||||
|
||||
@@ -286,10 +286,9 @@ func (c *PackerConfig) evaluateLocalVariable(local *LocalBlock) hcl.Diagnostics
|
||||
c.LocalVariables[local.Name] = &Variable{
|
||||
Name: local.Name,
|
||||
Sensitive: local.Sensitive,
|
||||
Values: []VariableAssignment{{
|
||||
Value: value,
|
||||
Expr: local.Expr,
|
||||
From: "default",
|
||||
Assignments: []VariableAssignment{{
|
||||
Expr: local.Expr,
|
||||
From: "default",
|
||||
}},
|
||||
ExpectedType: value.Type(),
|
||||
}
|
||||
|
||||
@@ -47,22 +47,22 @@ func TestParser_complete(t *testing.T) {
|
||||
InputVariables: Variables{
|
||||
"foo": &Variable{
|
||||
Name: "foo",
|
||||
Values: []VariableAssignment{{From: "default", Value: cty.StringVal("value")}},
|
||||
Assignments: []VariableAssignment{{From: "default", Value: cty.StringVal("value")}},
|
||||
ExpectedType: cty.String,
|
||||
},
|
||||
"image_id": &Variable{
|
||||
Name: "image_id",
|
||||
Values: []VariableAssignment{{From: "default", Value: cty.StringVal("image-id-default")}},
|
||||
Assignments: []VariableAssignment{{From: "default", Value: cty.StringVal("image-id-default")}},
|
||||
ExpectedType: cty.String,
|
||||
},
|
||||
"port": &Variable{
|
||||
Name: "port",
|
||||
Values: []VariableAssignment{{From: "default", Value: cty.NumberIntVal(42)}},
|
||||
Assignments: []VariableAssignment{{From: "default", Value: cty.NumberIntVal(42)}},
|
||||
ExpectedType: cty.Number,
|
||||
},
|
||||
"availability_zone_names": &Variable{
|
||||
Name: "availability_zone_names",
|
||||
Values: []VariableAssignment{{
|
||||
Assignments: []VariableAssignment{{
|
||||
From: "default",
|
||||
Value: cty.ListVal([]cty.Value{
|
||||
cty.StringVal("A"),
|
||||
@@ -76,17 +76,17 @@ func TestParser_complete(t *testing.T) {
|
||||
LocalVariables: Variables{
|
||||
"feefoo": &Variable{
|
||||
Name: "feefoo",
|
||||
Values: []VariableAssignment{{From: "default", Value: cty.StringVal("value_image-id-default")}},
|
||||
Assignments: []VariableAssignment{{From: "default", Value: cty.StringVal("value_image-id-default")}},
|
||||
ExpectedType: cty.String,
|
||||
},
|
||||
"data_source": &Variable{
|
||||
Name: "data_source",
|
||||
Values: []VariableAssignment{{From: "default", Value: cty.StringVal("string")}},
|
||||
Assignments: []VariableAssignment{{From: "default", Value: cty.StringVal("string")}},
|
||||
ExpectedType: cty.String,
|
||||
},
|
||||
"standard_tags": &Variable{
|
||||
Name: "standard_tags",
|
||||
Values: []VariableAssignment{{From: "default",
|
||||
Assignments: []VariableAssignment{{From: "default",
|
||||
Value: cty.ObjectVal(map[string]cty.Value{
|
||||
"Component": cty.StringVal("user-service"),
|
||||
"Environment": cty.StringVal("production"),
|
||||
@@ -99,7 +99,7 @@ func TestParser_complete(t *testing.T) {
|
||||
},
|
||||
"abc_map": &Variable{
|
||||
Name: "abc_map",
|
||||
Values: []VariableAssignment{{From: "default",
|
||||
Assignments: []VariableAssignment{{From: "default",
|
||||
Value: cty.TupleVal([]cty.Value{
|
||||
cty.ObjectVal(map[string]cty.Value{
|
||||
"id": cty.StringVal("a"),
|
||||
@@ -126,7 +126,7 @@ func TestParser_complete(t *testing.T) {
|
||||
},
|
||||
"supersecret": &Variable{
|
||||
Name: "supersecret",
|
||||
Values: []VariableAssignment{{From: "default",
|
||||
Assignments: []VariableAssignment{{From: "default",
|
||||
Value: cty.StringVal("image-id-default-password")}},
|
||||
ExpectedType: cty.String,
|
||||
Sensitive: true,
|
||||
@@ -546,22 +546,22 @@ func TestParser_no_init(t *testing.T) {
|
||||
InputVariables: Variables{
|
||||
"foo": &Variable{
|
||||
Name: "foo",
|
||||
Values: []VariableAssignment{{From: "default", Value: cty.StringVal("value")}},
|
||||
Assignments: []VariableAssignment{{From: "default", Value: cty.StringVal("value")}},
|
||||
ExpectedType: cty.String,
|
||||
},
|
||||
"image_id": &Variable{
|
||||
Name: "image_id",
|
||||
Values: []VariableAssignment{{From: "default", Value: cty.StringVal("image-id-default")}},
|
||||
Assignments: []VariableAssignment{{From: "default", Value: cty.StringVal("image-id-default")}},
|
||||
ExpectedType: cty.String,
|
||||
},
|
||||
"port": &Variable{
|
||||
Name: "port",
|
||||
Values: []VariableAssignment{{From: "default", Value: cty.NumberIntVal(42)}},
|
||||
Assignments: []VariableAssignment{{From: "default", Value: cty.NumberIntVal(42)}},
|
||||
ExpectedType: cty.Number,
|
||||
},
|
||||
"availability_zone_names": &Variable{
|
||||
Name: "availability_zone_names",
|
||||
Values: []VariableAssignment{{
|
||||
Assignments: []VariableAssignment{{
|
||||
From: "default",
|
||||
Value: cty.ListVal([]cty.Value{
|
||||
cty.StringVal("A"),
|
||||
|
||||
@@ -40,20 +40,20 @@ type VariableAssignment struct {
|
||||
}
|
||||
|
||||
type Variable struct {
|
||||
// Values contains possible values for the variable; The last value set
|
||||
// Assignments contains possible values for the variable; The last value set
|
||||
// from these will be the one used. If none is set; an error will be
|
||||
// returned by Value().
|
||||
Values []VariableAssignment
|
||||
Assignments []VariableAssignment
|
||||
|
||||
// Validations contains all variables validation rules to be applied to the
|
||||
// used value. Only the used value - the last value from Values - is
|
||||
// validated.
|
||||
Validations []*VariableValidation
|
||||
|
||||
// ExpectedType of the variable. If the default value or a collected
|
||||
// value is not of this type nor can be converted to this type an error
|
||||
// diagnostic will show up. This allows us to assume that values are valid
|
||||
// later in code.
|
||||
// ExpectedType of the variable. If the default value or a collected value
|
||||
// is not of this type nor can be converted to this type an error diagnostic
|
||||
// will show up. This allows us to assume that values are valid later in
|
||||
// code.
|
||||
ExpectedType cty.Type
|
||||
// Common name of the variable
|
||||
Name string
|
||||
@@ -70,28 +70,31 @@ func (v *Variable) Type() cty.Type {
|
||||
return v.ExpectedType
|
||||
}
|
||||
|
||||
func (v *Variable) Evaluate(ectx *hcl.EvalContext) hcl.Diagnostics {
|
||||
var diags hcl.Diagnostics
|
||||
for _, assignment := range v.Assignments {
|
||||
val, moreDiags := assignment.Expr.Value(ectx)
|
||||
diags = append(diags, moreDiags...)
|
||||
assignment.Value = val
|
||||
}
|
||||
return diags
|
||||
}
|
||||
|
||||
func (v *Variable) References() ([]*addrs.Reference, hcl.Diagnostics) {
|
||||
if len(v.Values) == 0 {
|
||||
if len(v.Assignments) == 0 {
|
||||
return nil, nil
|
||||
}
|
||||
refs := []*addrs.Reference{}
|
||||
var diags hcl.Diagnostics
|
||||
for _, v := range v.Values[len(v.Values)-1].Expr.Variables() {
|
||||
ref, moreDiags := addrs.ParseRef(v)
|
||||
diags = append(diags, moreDiags...)
|
||||
refs = append(refs, ref)
|
||||
for _, assignment := range v.Assignments {
|
||||
for _, v := range assignment.Expr.Variables() {
|
||||
ref, moreDiags := addrs.ParseRef(v)
|
||||
diags = append(diags, moreDiags...)
|
||||
refs = append(refs, ref)
|
||||
}
|
||||
}
|
||||
return refs, diags
|
||||
}
|
||||
func (v *Variable) GoString() string {
|
||||
b := &strings.Builder{}
|
||||
fmt.Fprintf(b, "{type:%s", v.ExpectedType.GoString())
|
||||
for _, vv := range v.Values {
|
||||
fmt.Fprintf(b, ",%s:%s", vv.From, vv.Value)
|
||||
}
|
||||
fmt.Fprintf(b, "}")
|
||||
return b.String()
|
||||
}
|
||||
|
||||
// validateValue ensures that all of the configured custom validations for a
|
||||
// variable value are passing.
|
||||
@@ -166,17 +169,16 @@ func (v *Variable) validateValue(val VariableAssignment) (diags hcl.Diagnostics)
|
||||
|
||||
// Value returns the last found value from the list of variable settings.
|
||||
func (v *Variable) Value() cty.Value {
|
||||
if len(v.Values) == 0 {
|
||||
if len(v.Assignments) == 0 {
|
||||
return cty.UnknownVal(v.ExpectedType)
|
||||
}
|
||||
val := v.Values[len(v.Values)-1]
|
||||
val := v.Assignments[len(v.Assignments)-1]
|
||||
return val.Value
|
||||
}
|
||||
|
||||
// Validate tells if the selected value for the Variable is set and valid
|
||||
// according to its validation settings.
|
||||
// Validate runs validation rules on the variable assignments.
|
||||
func (v *Variable) Validate() hcl.Diagnostics {
|
||||
if len(v.Values) == 0 {
|
||||
if len(v.Assignments) == 0 {
|
||||
return hcl.Diagnostics{&hcl.Diagnostic{
|
||||
Severity: hcl.DiagError,
|
||||
Summary: fmt.Sprintf("Unset variable %q", v.Name),
|
||||
@@ -187,7 +189,11 @@ func (v *Variable) Validate() hcl.Diagnostics {
|
||||
}}
|
||||
}
|
||||
|
||||
return v.validateValue(v.Values[len(v.Values)-1])
|
||||
var diags hcl.Diagnostics
|
||||
for _, assignment := range v.Assignments {
|
||||
diags = append(diags, v.validateValue(assignment)...)
|
||||
}
|
||||
return diags
|
||||
}
|
||||
|
||||
type Variables map[string]*Variable
|
||||
@@ -243,7 +249,7 @@ func (variables *Variables) decodeVariablesSetting(key string, attr *hcl.Attribu
|
||||
|
||||
(*variables)[key] = &Variable{
|
||||
Name: key,
|
||||
Values: []VariableAssignment{{
|
||||
Assignments: []VariableAssignment{{
|
||||
From: "default",
|
||||
Value: defaultValue,
|
||||
Expr: attr.Expr,
|
||||
@@ -372,39 +378,10 @@ func (variables *Variables) decodeVariableBlock(block *hcl.Block, ectx *hcl.Eval
|
||||
}
|
||||
|
||||
if def, ok := content.Attributes["default"]; ok {
|
||||
defaultValue, moreDiags := def.Expr.Value(ectx)
|
||||
diags = append(diags, moreDiags...)
|
||||
if moreDiags.HasErrors() {
|
||||
return diags
|
||||
}
|
||||
|
||||
if v.ExpectedType != cty.NilType {
|
||||
var err error
|
||||
defaultValue, err = convert.Convert(defaultValue, v.ExpectedType)
|
||||
if err != nil {
|
||||
diags = append(diags, &hcl.Diagnostic{
|
||||
Severity: hcl.DiagError,
|
||||
Summary: "Invalid default value for variable",
|
||||
Detail: fmt.Sprintf("This default value is not compatible with the variable's type constraint: %s.", err),
|
||||
Subject: def.Expr.Range().Ptr(),
|
||||
})
|
||||
defaultValue = cty.DynamicVal
|
||||
}
|
||||
}
|
||||
|
||||
v.Values = append(v.Values, VariableAssignment{
|
||||
From: "default",
|
||||
Value: defaultValue,
|
||||
Expr: def.Expr,
|
||||
v.Assignments = append(v.Assignments, VariableAssignment{
|
||||
From: "default",
|
||||
Expr: def.Expr,
|
||||
})
|
||||
|
||||
// It's possible no type attribute was assigned so lets make sure we
|
||||
// have a valid type otherwise there could be issues parsing the value.
|
||||
if v.ExpectedType == cty.DynamicPseudoType &&
|
||||
!defaultValue.Type().Equals(cty.EmptyObject) &&
|
||||
!defaultValue.Type().Equals(cty.EmptyTuple) {
|
||||
v.ExpectedType = defaultValue.Type()
|
||||
}
|
||||
}
|
||||
|
||||
for _, block := range content.Blocks {
|
||||
@@ -618,7 +595,7 @@ func (cfg *PackerConfig) collectInputVariableValues(env []string, files []*hcl.F
|
||||
val = cty.DynamicVal
|
||||
}
|
||||
}
|
||||
variable.Values = append(variable.Values, VariableAssignment{
|
||||
variable.Assignments = append(variable.Assignments, VariableAssignment{
|
||||
From: "env",
|
||||
Value: val,
|
||||
Expr: expr,
|
||||
@@ -706,7 +683,7 @@ func (cfg *PackerConfig) collectInputVariableValues(env []string, files []*hcl.F
|
||||
}
|
||||
}
|
||||
|
||||
variable.Values = append(variable.Values, VariableAssignment{
|
||||
variable.Assignments = append(variable.Assignments, VariableAssignment{
|
||||
From: "varfile",
|
||||
Value: val,
|
||||
Expr: attr.Expr,
|
||||
@@ -754,7 +731,7 @@ func (cfg *PackerConfig) collectInputVariableValues(env []string, files []*hcl.F
|
||||
}
|
||||
}
|
||||
|
||||
variable.Values = append(variable.Values, VariableAssignment{
|
||||
variable.Assignments = append(variable.Assignments, VariableAssignment{
|
||||
From: "cmd",
|
||||
Value: val,
|
||||
Expr: expr,
|
||||
|
||||
@@ -29,31 +29,31 @@ func TestParse_variables(t *testing.T) {
|
||||
"image_name": &Variable{
|
||||
Name: "image_name",
|
||||
ExpectedType: cty.String,
|
||||
Values: []VariableAssignment{{From: "default", Value: cty.StringVal("foo-image-{{user `my_secret`}}")}},
|
||||
Assignments: []VariableAssignment{{From: "default", Value: cty.StringVal("foo-image-{{user `my_secret`}}")}},
|
||||
},
|
||||
"key": &Variable{
|
||||
Name: "key",
|
||||
ExpectedType: cty.String,
|
||||
Values: []VariableAssignment{{From: "default", Value: cty.StringVal("value")}},
|
||||
Assignments: []VariableAssignment{{From: "default", Value: cty.StringVal("value")}},
|
||||
},
|
||||
"my_secret": &Variable{
|
||||
Name: "my_secret",
|
||||
ExpectedType: cty.String,
|
||||
Values: []VariableAssignment{{From: "default", Value: cty.StringVal("foo")}},
|
||||
Assignments: []VariableAssignment{{From: "default", Value: cty.StringVal("foo")}},
|
||||
},
|
||||
"image_id": &Variable{
|
||||
Name: "image_id",
|
||||
ExpectedType: cty.String,
|
||||
Values: []VariableAssignment{{From: "default", Value: cty.StringVal("image-id-default")}},
|
||||
Assignments: []VariableAssignment{{From: "default", Value: cty.StringVal("image-id-default")}},
|
||||
},
|
||||
"port": &Variable{
|
||||
Name: "port",
|
||||
ExpectedType: cty.Number,
|
||||
Values: []VariableAssignment{{From: "default", Value: cty.NumberIntVal(42)}},
|
||||
Assignments: []VariableAssignment{{From: "default", Value: cty.NumberIntVal(42)}},
|
||||
},
|
||||
"availability_zone_names": &Variable{
|
||||
Name: "availability_zone_names",
|
||||
Values: []VariableAssignment{{
|
||||
Assignments: []VariableAssignment{{
|
||||
From: "default",
|
||||
Value: cty.ListVal([]cty.Value{
|
||||
cty.StringVal("us-west-1a"),
|
||||
@@ -65,7 +65,7 @@ func TestParse_variables(t *testing.T) {
|
||||
"super_secret_password": &Variable{
|
||||
Name: "super_secret_password",
|
||||
Sensitive: true,
|
||||
Values: []VariableAssignment{{
|
||||
Assignments: []VariableAssignment{{
|
||||
From: "default",
|
||||
Value: cty.NullVal(cty.String),
|
||||
}},
|
||||
@@ -76,7 +76,7 @@ func TestParse_variables(t *testing.T) {
|
||||
LocalVariables: Variables{
|
||||
"owner": &Variable{
|
||||
Name: "owner",
|
||||
Values: []VariableAssignment{{
|
||||
Assignments: []VariableAssignment{{
|
||||
From: "default",
|
||||
Value: cty.StringVal("Community Team"),
|
||||
}},
|
||||
@@ -84,7 +84,7 @@ func TestParse_variables(t *testing.T) {
|
||||
},
|
||||
"service_name": &Variable{
|
||||
Name: "service_name",
|
||||
Values: []VariableAssignment{{
|
||||
Assignments: []VariableAssignment{{
|
||||
From: "default",
|
||||
Value: cty.StringVal("forum"),
|
||||
}},
|
||||
@@ -92,7 +92,7 @@ func TestParse_variables(t *testing.T) {
|
||||
},
|
||||
"supersecret": &Variable{
|
||||
Name: "supersecret",
|
||||
Values: []VariableAssignment{{
|
||||
Assignments: []VariableAssignment{{
|
||||
From: "default",
|
||||
Value: cty.StringVal("secretvar"),
|
||||
}},
|
||||
@@ -114,7 +114,7 @@ func TestParse_variables(t *testing.T) {
|
||||
InputVariables: Variables{
|
||||
"boolean_value": &Variable{
|
||||
Name: "boolean_value",
|
||||
Values: []VariableAssignment{{
|
||||
Assignments: []VariableAssignment{{
|
||||
From: "default",
|
||||
Value: cty.BoolVal(false),
|
||||
}},
|
||||
@@ -135,7 +135,7 @@ func TestParse_variables(t *testing.T) {
|
||||
InputVariables: Variables{
|
||||
"boolean_value": &Variable{
|
||||
Name: "boolean_value",
|
||||
Values: []VariableAssignment{{
|
||||
Assignments: []VariableAssignment{{
|
||||
From: "default",
|
||||
Value: cty.BoolVal(false),
|
||||
}},
|
||||
@@ -155,7 +155,7 @@ func TestParse_variables(t *testing.T) {
|
||||
Basedir: "testdata/variables/duplicate_locals",
|
||||
LocalVariables: Variables{
|
||||
"sensible": &Variable{
|
||||
Values: []VariableAssignment{
|
||||
Assignments: []VariableAssignment{
|
||||
{
|
||||
From: "default",
|
||||
Value: cty.StringVal("something"),
|
||||
@@ -179,7 +179,7 @@ func TestParse_variables(t *testing.T) {
|
||||
InputVariables: Variables{
|
||||
"broken_type": &Variable{
|
||||
Name: "broken_type",
|
||||
Values: []VariableAssignment{{
|
||||
Assignments: []VariableAssignment{{
|
||||
From: "default",
|
||||
Value: cty.UnknownVal(cty.DynamicPseudoType),
|
||||
}},
|
||||
@@ -201,7 +201,7 @@ func TestParse_variables(t *testing.T) {
|
||||
InputVariables: Variables{
|
||||
"broken_variable": &Variable{
|
||||
Name: "broken_variable",
|
||||
Values: []VariableAssignment{{From: "default", Value: cty.BoolVal(true)}},
|
||||
Assignments: []VariableAssignment{{From: "default", Value: cty.BoolVal(true)}},
|
||||
ExpectedType: cty.Bool,
|
||||
},
|
||||
},
|
||||
@@ -279,34 +279,34 @@ func TestParse_variables(t *testing.T) {
|
||||
InputVariables: Variables{
|
||||
"name_prefix": &Variable{
|
||||
Name: "name_prefix",
|
||||
Values: []VariableAssignment{{From: "default", Value: cty.StringVal("foo")}},
|
||||
Assignments: []VariableAssignment{{From: "default", Value: cty.StringVal("foo")}},
|
||||
ExpectedType: cty.String,
|
||||
},
|
||||
},
|
||||
LocalVariables: Variables{
|
||||
"name_prefix": &Variable{
|
||||
Name: "name_prefix",
|
||||
Values: []VariableAssignment{{From: "default", Value: cty.StringVal("foo")}},
|
||||
Assignments: []VariableAssignment{{From: "default", Value: cty.StringVal("foo")}},
|
||||
ExpectedType: cty.String,
|
||||
},
|
||||
"foo": &Variable{
|
||||
Name: "foo",
|
||||
Values: []VariableAssignment{{From: "default", Value: cty.StringVal("foo")}},
|
||||
Assignments: []VariableAssignment{{From: "default", Value: cty.StringVal("foo")}},
|
||||
ExpectedType: cty.String,
|
||||
},
|
||||
"bar": &Variable{
|
||||
Name: "bar",
|
||||
Values: []VariableAssignment{{From: "default", Value: cty.StringVal("foo")}},
|
||||
Assignments: []VariableAssignment{{From: "default", Value: cty.StringVal("foo")}},
|
||||
ExpectedType: cty.String,
|
||||
},
|
||||
"for_var": &Variable{
|
||||
Name: "for_var",
|
||||
Values: []VariableAssignment{{From: "default", Value: cty.StringVal("foo")}},
|
||||
Assignments: []VariableAssignment{{From: "default", Value: cty.StringVal("foo")}},
|
||||
ExpectedType: cty.String,
|
||||
},
|
||||
"bar_var": &Variable{
|
||||
Name: "bar_var",
|
||||
Values: []VariableAssignment{{
|
||||
Assignments: []VariableAssignment{{
|
||||
From: "default",
|
||||
Value: cty.TupleVal([]cty.Value{
|
||||
cty.StringVal("foo"),
|
||||
@@ -348,7 +348,7 @@ func TestParse_variables(t *testing.T) {
|
||||
InputVariables: Variables{
|
||||
"foo": &Variable{
|
||||
Name: "foo",
|
||||
Values: []VariableAssignment{
|
||||
Assignments: []VariableAssignment{
|
||||
VariableAssignment{"default", cty.StringVal("bar"), nil},
|
||||
VariableAssignment{"varfile", cty.StringVal("wee"), nil},
|
||||
},
|
||||
@@ -382,12 +382,12 @@ func TestParse_variables(t *testing.T) {
|
||||
InputVariables: Variables{
|
||||
"max_retries": &Variable{
|
||||
Name: "max_retries",
|
||||
Values: []VariableAssignment{{"default", cty.StringVal("1"), nil}},
|
||||
Assignments: []VariableAssignment{{"default", cty.StringVal("1"), nil}},
|
||||
ExpectedType: cty.String,
|
||||
},
|
||||
"max_retries_int": &Variable{
|
||||
Name: "max_retries_int",
|
||||
Values: []VariableAssignment{{"default", cty.NumberIntVal(1), nil}},
|
||||
Assignments: []VariableAssignment{{"default", cty.NumberIntVal(1), nil}},
|
||||
ExpectedType: cty.Number,
|
||||
},
|
||||
},
|
||||
@@ -470,7 +470,7 @@ func TestParse_variables(t *testing.T) {
|
||||
Basedir: filepath.Join("testdata", "variables", "validation"),
|
||||
InputVariables: Variables{
|
||||
"image_id": &Variable{
|
||||
Values: []VariableAssignment{
|
||||
Assignments: []VariableAssignment{
|
||||
{"default", cty.StringVal("ami-something-something"), nil},
|
||||
},
|
||||
Name: "image_id",
|
||||
@@ -496,7 +496,7 @@ func TestParse_variables(t *testing.T) {
|
||||
Basedir: filepath.Join("testdata", "variables", "validation"),
|
||||
InputVariables: Variables{
|
||||
"image_id": &Variable{
|
||||
Values: []VariableAssignment{{"default", cty.StringVal("potato"), nil}},
|
||||
Assignments: []VariableAssignment{{"default", cty.StringVal("potato"), nil}},
|
||||
Name: "image_id",
|
||||
ExpectedType: cty.String,
|
||||
Validations: []*VariableValidation{
|
||||
@@ -534,7 +534,7 @@ func TestVariables_collectVariableValues(t *testing.T) {
|
||||
|
||||
{name: "string",
|
||||
variables: Variables{"used_string": &Variable{
|
||||
Values: []VariableAssignment{
|
||||
Assignments: []VariableAssignment{
|
||||
{"default", cty.StringVal("default_value"), nil},
|
||||
},
|
||||
ExpectedType: cty.String,
|
||||
@@ -555,7 +555,7 @@ func TestVariables_collectVariableValues(t *testing.T) {
|
||||
wantVariables: Variables{
|
||||
"used_string": &Variable{
|
||||
ExpectedType: cty.String,
|
||||
Values: []VariableAssignment{
|
||||
Assignments: []VariableAssignment{
|
||||
{"default", cty.StringVal(`default_value`), nil},
|
||||
{"env", cty.StringVal(`env_value`), nil},
|
||||
{"varfile", cty.StringVal(`xy`), nil},
|
||||
@@ -571,7 +571,7 @@ func TestVariables_collectVariableValues(t *testing.T) {
|
||||
|
||||
{name: "quoted string",
|
||||
variables: Variables{"quoted_string": &Variable{
|
||||
Values: []VariableAssignment{
|
||||
Assignments: []VariableAssignment{
|
||||
{"default", cty.StringVal(`"default_value"`), nil},
|
||||
},
|
||||
ExpectedType: cty.String,
|
||||
@@ -592,7 +592,7 @@ func TestVariables_collectVariableValues(t *testing.T) {
|
||||
wantVariables: Variables{
|
||||
"quoted_string": &Variable{
|
||||
ExpectedType: cty.String,
|
||||
Values: []VariableAssignment{
|
||||
Assignments: []VariableAssignment{
|
||||
{"default", cty.StringVal(`"default_value"`), nil},
|
||||
{"env", cty.StringVal(`"env_value"`), nil},
|
||||
{"varfile", cty.StringVal(`"xy"`), nil},
|
||||
@@ -608,7 +608,7 @@ func TestVariables_collectVariableValues(t *testing.T) {
|
||||
|
||||
{name: "array of strings",
|
||||
variables: Variables{"used_strings": &Variable{
|
||||
Values: []VariableAssignment{
|
||||
Assignments: []VariableAssignment{
|
||||
{"default", stringListVal("default_value_1"), nil},
|
||||
},
|
||||
ExpectedType: cty.List(cty.String),
|
||||
@@ -629,7 +629,7 @@ func TestVariables_collectVariableValues(t *testing.T) {
|
||||
wantVariables: Variables{
|
||||
"used_strings": &Variable{
|
||||
ExpectedType: cty.List(cty.String),
|
||||
Values: []VariableAssignment{
|
||||
Assignments: []VariableAssignment{
|
||||
{"default", stringListVal("default_value_1"), nil},
|
||||
{"env", stringListVal("env_value_1", "env_value_2"), nil},
|
||||
{"varfile", stringListVal("xy"), nil},
|
||||
@@ -645,7 +645,7 @@ func TestVariables_collectVariableValues(t *testing.T) {
|
||||
|
||||
{name: "bool",
|
||||
variables: Variables{"enabled": &Variable{
|
||||
Values: []VariableAssignment{{"default", cty.False, nil}},
|
||||
Assignments: []VariableAssignment{{"default", cty.False, nil}},
|
||||
ExpectedType: cty.Bool,
|
||||
}},
|
||||
args: args{
|
||||
@@ -663,7 +663,7 @@ func TestVariables_collectVariableValues(t *testing.T) {
|
||||
wantVariables: Variables{
|
||||
"enabled": &Variable{
|
||||
ExpectedType: cty.Bool,
|
||||
Values: []VariableAssignment{
|
||||
Assignments: []VariableAssignment{
|
||||
{"default", cty.False, nil},
|
||||
{"env", cty.True, nil},
|
||||
{"varfile", cty.False, nil},
|
||||
@@ -678,7 +678,7 @@ func TestVariables_collectVariableValues(t *testing.T) {
|
||||
|
||||
{name: "invalid env var",
|
||||
variables: Variables{"used_string": &Variable{
|
||||
Values: []VariableAssignment{{"default", cty.StringVal("default_value"), nil}},
|
||||
Assignments: []VariableAssignment{{"default", cty.StringVal("default_value"), nil}},
|
||||
ExpectedType: cty.String,
|
||||
}},
|
||||
args: args{
|
||||
@@ -690,7 +690,7 @@ func TestVariables_collectVariableValues(t *testing.T) {
|
||||
wantVariables: Variables{
|
||||
"used_string": &Variable{
|
||||
ExpectedType: cty.String,
|
||||
Values: []VariableAssignment{{"default", cty.StringVal("default_value"), nil}},
|
||||
Assignments: []VariableAssignment{{"default", cty.StringVal("default_value"), nil}},
|
||||
},
|
||||
},
|
||||
wantValues: map[string]cty.Value{
|
||||
@@ -770,7 +770,7 @@ func TestVariables_collectVariableValues(t *testing.T) {
|
||||
wantVariables: Variables{
|
||||
"used_string": &Variable{
|
||||
ExpectedType: cty.List(cty.String),
|
||||
Values: []VariableAssignment{{"env", cty.DynamicVal, nil}},
|
||||
Assignments: []VariableAssignment{{"env", cty.DynamicVal, nil}},
|
||||
},
|
||||
},
|
||||
wantValues: map[string]cty.Value{
|
||||
@@ -794,7 +794,7 @@ func TestVariables_collectVariableValues(t *testing.T) {
|
||||
wantVariables: Variables{
|
||||
"used_string": &Variable{
|
||||
ExpectedType: cty.Bool,
|
||||
Values: []VariableAssignment{{"varfile", cty.DynamicVal, nil}},
|
||||
Assignments: []VariableAssignment{{"varfile", cty.DynamicVal, nil}},
|
||||
},
|
||||
},
|
||||
wantValues: map[string]cty.Value{
|
||||
@@ -820,7 +820,7 @@ func TestVariables_collectVariableValues(t *testing.T) {
|
||||
wantVariables: Variables{
|
||||
"used_string": &Variable{
|
||||
ExpectedType: cty.Bool,
|
||||
Values: []VariableAssignment{{"cmd", cty.DynamicVal, nil}},
|
||||
Assignments: []VariableAssignment{{"cmd", cty.DynamicVal, nil}},
|
||||
},
|
||||
},
|
||||
wantValues: map[string]cty.Value{
|
||||
|
||||
Reference in New Issue
Block a user