Skip to content

Commit ac563ef

Browse files
authored
Merge pull request #28923 from hashicorp/backport/jbardin/noop-deposed-change/needlessly-concrete-bluejay
Backport of account for noop deposed instances in json plan into v1.0
2 parents 1a9e38b + 74a472f commit ac563ef

File tree

2 files changed

+52
-3
lines changed

2 files changed

+52
-3
lines changed

internal/command/jsonplan/values.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/hashicorp/terraform/internal/addrs"
1212
"github.com/hashicorp/terraform/internal/configs/configschema"
1313
"github.com/hashicorp/terraform/internal/plans"
14+
"github.com/hashicorp/terraform/internal/states"
1415
"github.com/hashicorp/terraform/internal/terraform"
1516
)
1617

@@ -93,8 +94,10 @@ func marshalPlannedValues(changes *plans.Changes, schemas *terraform.Schemas) (m
9394
seenModules := make(map[string]bool)
9495

9596
for _, resource := range changes.Resources {
96-
// if the resource is being deleted, skip over it.
97-
if resource.Action != plans.Delete {
97+
// If the resource is being deleted, skip over it.
98+
// Deposed instances are always conceptually a destroy, but if they
99+
// were gone during refresh then the change becomes a noop.
100+
if resource.Action != plans.Delete && resource.DeposedKey == states.NotDeposed {
98101
containingModule := resource.Addr.Module.String()
99102
moduleResourceMap[containingModule] = append(moduleResourceMap[containingModule], resource.Addr)
100103

internal/command/jsonplan/values_test.go

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,13 +204,26 @@ func TestMarshalPlanResources(t *testing.T) {
204204
}},
205205
Err: false,
206206
},
207-
"delete": {
207+
"delete with null and nil": {
208208
Action: plans.Delete,
209209
Before: cty.NullVal(cty.EmptyObject),
210210
After: cty.NilVal,
211211
Want: nil,
212212
Err: false,
213213
},
214+
"delete": {
215+
Action: plans.Delete,
216+
Before: cty.ObjectVal(map[string]cty.Value{
217+
"woozles": cty.StringVal("foo"),
218+
"foozles": cty.StringVal("bar"),
219+
}),
220+
After: cty.NullVal(cty.Object(map[string]cty.Type{
221+
"woozles": cty.String,
222+
"foozles": cty.String,
223+
})),
224+
Want: nil,
225+
Err: false,
226+
},
214227
"update without unknowns": {
215228
Action: plans.Update,
216229
Before: cty.ObjectVal(map[string]cty.Value{
@@ -291,6 +304,39 @@ func TestMarshalPlanResources(t *testing.T) {
291304
}
292305
}
293306

307+
func TestMarshalPlanValuesNoopDeposed(t *testing.T) {
308+
dynamicNull, err := plans.NewDynamicValue(cty.NullVal(cty.DynamicPseudoType), cty.DynamicPseudoType)
309+
if err != nil {
310+
t.Fatal(err)
311+
}
312+
testChange := &plans.Changes{
313+
Resources: []*plans.ResourceInstanceChangeSrc{
314+
{
315+
Addr: addrs.Resource{
316+
Mode: addrs.ManagedResourceMode,
317+
Type: "test_thing",
318+
Name: "example",
319+
}.Instance(addrs.NoKey).Absolute(addrs.RootModuleInstance),
320+
DeposedKey: "12345678",
321+
ProviderAddr: addrs.AbsProviderConfig{
322+
Provider: addrs.NewDefaultProvider("test"),
323+
Module: addrs.RootModule,
324+
},
325+
ChangeSrc: plans.ChangeSrc{
326+
Action: plans.NoOp,
327+
Before: dynamicNull,
328+
After: dynamicNull,
329+
},
330+
},
331+
},
332+
}
333+
334+
_, err = marshalPlannedValues(testChange, testSchemas())
335+
if err != nil {
336+
t.Fatal(err)
337+
}
338+
}
339+
294340
func testSchemas() *terraform.Schemas {
295341
return &terraform.Schemas{
296342
Providers: map[addrs.Provider]*terraform.ProviderSchema{

0 commit comments

Comments
 (0)