Merge pull request #20641 from hashicorp/jbardin/null-computed-blocks
stop removing empty flatmap containers
This commit is contained in:
commit
420736333f
|
@ -70,6 +70,12 @@ func testResourceComputedSet() *schema.Resource {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"optional_set": {
|
||||||
|
Type: schema.TypeSet,
|
||||||
|
Optional: true,
|
||||||
|
Elem: &schema.Schema{Type: schema.TypeString},
|
||||||
|
Set: schema.HashString,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -101,6 +107,9 @@ func testResourceComputedSetRead(d *schema.ResourceData, meta interface{}) error
|
||||||
}
|
}
|
||||||
|
|
||||||
d.Set("string_set", schema.NewSet(schema.HashString, set))
|
d.Set("string_set", schema.NewSet(schema.HashString, set))
|
||||||
|
|
||||||
|
// This isn't computed, but we should be able to ignore without issues.
|
||||||
|
d.Set("optional_set", []interface{}{})
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -75,6 +75,36 @@ func testResourceList() *schema.Resource {
|
||||||
Computed: true,
|
Computed: true,
|
||||||
Elem: &schema.Schema{Type: schema.TypeString},
|
Elem: &schema.Schema{Type: schema.TypeString},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"never_set": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
MaxItems: 1,
|
||||||
|
Optional: true,
|
||||||
|
Computed: true,
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: map[string]*schema.Schema{
|
||||||
|
"sublist": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
MaxItems: 1,
|
||||||
|
ForceNew: true,
|
||||||
|
Optional: true,
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: map[string]*schema.Schema{
|
||||||
|
"bool": {
|
||||||
|
Type: schema.TypeBool,
|
||||||
|
ForceNew: true,
|
||||||
|
Required: true,
|
||||||
|
},
|
||||||
|
"string": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -101,10 +131,21 @@ func testResourceListRead(d *schema.ResourceData, meta interface{}) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// "computing" these values should insert empty containers into the
|
||||||
|
// never_set block.
|
||||||
|
values := make(map[string]interface{})
|
||||||
|
values["sublist"] = []interface{}{}
|
||||||
|
d.Set("never_set", []interface{}{values})
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func testResourceListUpdate(d *schema.ResourceData, meta interface{}) error {
|
func testResourceListUpdate(d *schema.ResourceData, meta interface{}) error {
|
||||||
|
block := d.Get("never_set").([]interface{})
|
||||||
|
if len(block) > 0 {
|
||||||
|
// if profiles contains any values, they should not be nil
|
||||||
|
_ = block[0].(map[string]interface{})
|
||||||
|
}
|
||||||
return testResourceListRead(d, meta)
|
return testResourceListRead(d, meta)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -798,7 +798,6 @@ func (s *GRPCProviderServer) ApplyResourceChange(_ context.Context, req *proto.A
|
||||||
if err != nil {
|
if err != nil {
|
||||||
resp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)
|
resp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
newStateVal := cty.NullVal(block.ImpliedType())
|
newStateVal := cty.NullVal(block.ImpliedType())
|
||||||
|
|
||||||
// Always return a null value for destroy.
|
// Always return a null value for destroy.
|
||||||
|
@ -1114,8 +1113,6 @@ func normalizeFlatmapContainers(prior map[string]string, attrs map[string]string
|
||||||
attrs[k] = "1"
|
attrs[k] = "1"
|
||||||
case len(indexes) > 0:
|
case len(indexes) > 0:
|
||||||
attrs[k] = strconv.Itoa(len(indexes))
|
attrs[k] = strconv.Itoa(len(indexes))
|
||||||
default:
|
|
||||||
delete(attrs, k)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -671,29 +671,21 @@ func TestNormalizeFlatmapContainers(t *testing.T) {
|
||||||
attrs map[string]string
|
attrs map[string]string
|
||||||
expect map[string]string
|
expect map[string]string
|
||||||
}{
|
}{
|
||||||
{
|
|
||||||
attrs: map[string]string{"id": "1", "multi.2.set.#": "1", "multi.1.set.#": "0", "single.#": "0"},
|
|
||||||
expect: map[string]string{"id": "1", "multi.2.set.#": "1"},
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
attrs: map[string]string{"id": "1", "multi.2.set.#": "2", "multi.2.set.1.foo": "bar", "multi.1.set.#": "0", "single.#": "0"},
|
attrs: map[string]string{"id": "1", "multi.2.set.#": "2", "multi.2.set.1.foo": "bar", "multi.1.set.#": "0", "single.#": "0"},
|
||||||
expect: map[string]string{"id": "1", "multi.2.set.#": "1", "multi.2.set.1.foo": "bar"},
|
expect: map[string]string{"id": "1", "multi.2.set.#": "1", "multi.2.set.1.foo": "bar", "multi.1.set.#": "0", "single.#": "0"},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
attrs: map[string]string{"id": "78629a0f5f3f164f", "multi.#": "1"},
|
attrs: map[string]string{"id": "78629a0f5f3f164f", "multi.#": "1"},
|
||||||
expect: map[string]string{"id": "78629a0f5f3f164f", "multi.#": "1"},
|
expect: map[string]string{"id": "78629a0f5f3f164f", "multi.#": "1"},
|
||||||
},
|
},
|
||||||
{
|
|
||||||
attrs: map[string]string{"id": "78629a0f5f3f164f", "multi.#": "0"},
|
|
||||||
expect: map[string]string{"id": "78629a0f5f3f164f"},
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
attrs: map[string]string{"multi.529860700.set.#": "0", "multi.#": "1", "id": "78629a0f5f3f164f"},
|
attrs: map[string]string{"multi.529860700.set.#": "0", "multi.#": "1", "id": "78629a0f5f3f164f"},
|
||||||
expect: map[string]string{"id": "78629a0f5f3f164f", "multi.#": "1"},
|
expect: map[string]string{"multi.529860700.set.#": "0", "multi.#": "1", "id": "78629a0f5f3f164f"},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
attrs: map[string]string{"set.2.required": "bar", "set.2.list.#": "1", "set.2.list.0": "x", "set.1.list.#": "0", "set.#": "2"},
|
attrs: map[string]string{"set.2.required": "bar", "set.2.list.#": "1", "set.2.list.0": "x", "set.1.list.#": "0", "set.#": "2"},
|
||||||
expect: map[string]string{"set.2.list.#": "1", "set.2.list.0": "x", "set.2.required": "bar", "set.#": "1"},
|
expect: map[string]string{"set.2.required": "bar", "set.2.list.#": "1", "set.2.list.0": "x", "set.1.list.#": "0", "set.#": "2"},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
attrs: map[string]string{"map.%": hcl2shim.UnknownVariableValue, "list.#": hcl2shim.UnknownVariableValue, "id": "1"},
|
attrs: map[string]string{"map.%": hcl2shim.UnknownVariableValue, "list.#": hcl2shim.UnknownVariableValue, "id": "1"},
|
||||||
|
@ -702,7 +694,7 @@ func TestNormalizeFlatmapContainers(t *testing.T) {
|
||||||
{
|
{
|
||||||
prior: map[string]string{"map.%": "0"},
|
prior: map[string]string{"map.%": "0"},
|
||||||
attrs: map[string]string{"map.%": "0", "list.#": "0", "id": "1"},
|
attrs: map[string]string{"map.%": "0", "list.#": "0", "id": "1"},
|
||||||
expect: map[string]string{"id": "1", "map.%": "0"},
|
expect: map[string]string{"id": "1", "list.#": "0", "map.%": "0"},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prior: map[string]string{"map.%": hcl2shim.UnknownVariableValue, "list.#": "0"},
|
prior: map[string]string{"map.%": hcl2shim.UnknownVariableValue, "list.#": "0"},
|
||||||
|
@ -712,7 +704,7 @@ func TestNormalizeFlatmapContainers(t *testing.T) {
|
||||||
{
|
{
|
||||||
prior: map[string]string{"list.#": "1", "list.0": "old value"},
|
prior: map[string]string{"list.#": "1", "list.0": "old value"},
|
||||||
attrs: map[string]string{"list.#": "0"},
|
attrs: map[string]string{"list.#": "0"},
|
||||||
expect: map[string]string{},
|
expect: map[string]string{"list.#": "0"},
|
||||||
},
|
},
|
||||||
} {
|
} {
|
||||||
t.Run(strconv.Itoa(i), func(t *testing.T) {
|
t.Run(strconv.Itoa(i), func(t *testing.T) {
|
||||||
|
|
Loading…
Reference in New Issue