Merge branch 'vancluever-fix-field-reader-setsubkeys-computed'

This commit is contained in:
Mitchell Hashimoto 2016-11-21 17:32:13 -08:00
commit 67e6d3672e
No known key found for this signature in database
GPG Key ID: 744E147AA52F5B0A
2 changed files with 247 additions and 0 deletions

View File

@ -3267,6 +3267,159 @@ func TestSchemaMap_DiffSuppress(t *testing.T) {
Err: false, Err: false,
}, },
"Complex structure with set of computed string should mark root set as computed": {
Schema: map[string]*Schema{
"outer": &Schema{
Type: TypeSet,
Optional: true,
Elem: &Resource{
Schema: map[string]*Schema{
"outer_str": &Schema{
Type: TypeString,
Optional: true,
},
"inner": &Schema{
Type: TypeSet,
Optional: true,
Elem: &Resource{
Schema: map[string]*Schema{
"inner_str": &Schema{
Type: TypeString,
Optional: true,
},
},
},
Set: func(v interface{}) int {
return 2
},
},
},
},
Set: func(v interface{}) int {
return 1
},
},
},
State: nil,
Config: map[string]interface{}{
"outer": []map[string]interface{}{
map[string]interface{}{
"outer_str": "foo",
"inner": []map[string]interface{}{
map[string]interface{}{
"inner_str": "${var.bar}",
},
},
},
},
},
ConfigVariables: map[string]ast.Variable{
"var.bar": interfaceToVariableSwallowError(config.UnknownVariableValue),
},
ExpectedDiff: &terraform.InstanceDiff{
Attributes: map[string]*terraform.ResourceAttrDiff{
"outer.#": &terraform.ResourceAttrDiff{
Old: "0",
New: "1",
},
"outer.~1.outer_str": &terraform.ResourceAttrDiff{
Old: "",
New: "foo",
},
"outer.~1.inner.#": &terraform.ResourceAttrDiff{
Old: "0",
New: "1",
},
"outer.~1.inner.~2.inner_str": &terraform.ResourceAttrDiff{
Old: "",
New: "${var.bar}",
NewComputed: true,
},
},
},
Err: false,
},
"Complex structure with complex list of computed string should mark root set as computed": {
Schema: map[string]*Schema{
"outer": &Schema{
Type: TypeSet,
Optional: true,
Elem: &Resource{
Schema: map[string]*Schema{
"outer_str": &Schema{
Type: TypeString,
Optional: true,
},
"inner": &Schema{
Type: TypeList,
Optional: true,
Elem: &Resource{
Schema: map[string]*Schema{
"inner_str": &Schema{
Type: TypeString,
Optional: true,
},
},
},
},
},
},
Set: func(v interface{}) int {
return 1
},
},
},
State: nil,
Config: map[string]interface{}{
"outer": []map[string]interface{}{
map[string]interface{}{
"outer_str": "foo",
"inner": []map[string]interface{}{
map[string]interface{}{
"inner_str": "${var.bar}",
},
},
},
},
},
ConfigVariables: map[string]ast.Variable{
"var.bar": interfaceToVariableSwallowError(config.UnknownVariableValue),
},
ExpectedDiff: &terraform.InstanceDiff{
Attributes: map[string]*terraform.ResourceAttrDiff{
"outer.#": &terraform.ResourceAttrDiff{
Old: "0",
New: "1",
},
"outer.~1.outer_str": &terraform.ResourceAttrDiff{
Old: "",
New: "foo",
},
"outer.~1.inner.#": &terraform.ResourceAttrDiff{
Old: "0",
New: "1",
},
"outer.~1.inner.0.inner_str": &terraform.ResourceAttrDiff{
Old: "",
New: "${var.bar}",
NewComputed: true,
},
},
},
Err: false,
},
} }
for tn, tc := range cases { for tn, tc := range cases {

View File

@ -991,6 +991,100 @@ func TestInstanceDiffSame(t *testing.T) {
true, true,
"", "",
}, },
// Innner computed set should allow outer change in key
{
&InstanceDiff{
Attributes: map[string]*ResourceAttrDiff{
"foo.#": &ResourceAttrDiff{
Old: "0",
New: "1",
},
"foo.~1.outer_val": &ResourceAttrDiff{
Old: "",
New: "foo",
},
"foo.~1.inner.#": &ResourceAttrDiff{
Old: "0",
New: "1",
},
"foo.~1.inner.~2.value": &ResourceAttrDiff{
Old: "",
New: "${var.bar}",
NewComputed: true,
},
},
},
&InstanceDiff{
Attributes: map[string]*ResourceAttrDiff{
"foo.#": &ResourceAttrDiff{
Old: "0",
New: "1",
},
"foo.12.outer_val": &ResourceAttrDiff{
Old: "",
New: "foo",
},
"foo.12.inner.#": &ResourceAttrDiff{
Old: "0",
New: "1",
},
"foo.12.inner.42.value": &ResourceAttrDiff{
Old: "",
New: "baz",
},
},
},
true,
"",
},
// Innner computed list should allow outer change in key
{
&InstanceDiff{
Attributes: map[string]*ResourceAttrDiff{
"foo.#": &ResourceAttrDiff{
Old: "0",
New: "1",
},
"foo.~1.outer_val": &ResourceAttrDiff{
Old: "",
New: "foo",
},
"foo.~1.inner.#": &ResourceAttrDiff{
Old: "0",
New: "1",
},
"foo.~1.inner.0.value": &ResourceAttrDiff{
Old: "",
New: "${var.bar}",
NewComputed: true,
},
},
},
&InstanceDiff{
Attributes: map[string]*ResourceAttrDiff{
"foo.#": &ResourceAttrDiff{
Old: "0",
New: "1",
},
"foo.12.outer_val": &ResourceAttrDiff{
Old: "",
New: "foo",
},
"foo.12.inner.#": &ResourceAttrDiff{
Old: "0",
New: "1",
},
"foo.12.inner.0.value": &ResourceAttrDiff{
Old: "",
New: "baz",
},
},
},
true,
"",
},
} }
for i, tc := range cases { for i, tc := range cases {