reverse call to TestConformance in objchange
The call to TestConformance needs to be reversed, since we want to verify that the actual value returned conforms to the planned type. While the inverse (checking that the planned value conforms to the applied type) works for everything terraform has been exposed to up until now, this fails when the planned type has dynamic attributes which are allowed to become concrete types.
This commit is contained in:
parent
1ae3d30383
commit
22f21db229
|
@ -219,7 +219,7 @@ func assertValueCompatible(planned, actual cty.Value, path cty.Path) []error {
|
|||
// Anything goes, then
|
||||
return errs
|
||||
}
|
||||
if problems := planned.Type().TestConformance(actual.Type()); len(problems) > 0 {
|
||||
if problems := actual.Type().TestConformance(planned.Type()); len(problems) > 0 {
|
||||
errs = append(errs, path.NewErrorf("wrong final value type: %s", convert.MismatchMessage(actual.Type(), planned.Type())))
|
||||
// If the types don't match then we can't do any other comparisons,
|
||||
// so we bail early.
|
||||
|
|
|
@ -260,6 +260,28 @@ func TestAssertObjectCompatible(t *testing.T) {
|
|||
}),
|
||||
[]string{},
|
||||
},
|
||||
{
|
||||
&configschema.Block{
|
||||
Attributes: map[string]*configschema.Attribute{
|
||||
"obj": {
|
||||
Type: cty.Object(map[string]cty.Type{
|
||||
"stuff": cty.DynamicPseudoType,
|
||||
}),
|
||||
},
|
||||
},
|
||||
},
|
||||
cty.ObjectVal(map[string]cty.Value{
|
||||
"obj": cty.ObjectVal(map[string]cty.Value{
|
||||
"stuff": cty.DynamicVal,
|
||||
}),
|
||||
}),
|
||||
cty.ObjectVal(map[string]cty.Value{
|
||||
"obj": cty.ObjectVal(map[string]cty.Value{
|
||||
"stuff": cty.NumberIntVal(3),
|
||||
}),
|
||||
}),
|
||||
[]string{},
|
||||
},
|
||||
{
|
||||
&configschema.Block{
|
||||
Attributes: map[string]*configschema.Attribute{
|
||||
|
|
Loading…
Reference in New Issue