Skip to content

Commit dc0eba3

Browse files
authored
fix: support ephemeral resources in jsonchecks (#37893)
Fixes #37834
1 parent 1dd8e60 commit dc0eba3

File tree

3 files changed

+59
-0
lines changed

3 files changed

+59
-0
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
kind: BUG FIXES
2+
body: 'cli: Fixed crash in `terraform show -json` when plan contains ephemeral resources with preconditions or postconditions'
3+
time: 2025-11-12T03:38:30.000000-08:00
4+
custom:
5+
Issue: "37834"

internal/command/jsonchecks/checks_test.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,16 @@ func TestMarshalCheckStates(t *testing.T) {
4141
outputBInstAddr := addrs.Checkable(addrs.OutputValue{Name: "b"}.Absolute(moduleChildAddr))
4242
checkBlockAAddr := addrs.ConfigCheckable(addrs.Check{Name: "a"}.InModule(addrs.RootModule))
4343
checkBlockAInstAddr := addrs.Checkable(addrs.Check{Name: "a"}.Absolute(addrs.RootModuleInstance))
44+
ephemeralResourceAddr := addrs.ConfigCheckable(addrs.Resource{
45+
Mode: addrs.EphemeralResourceMode,
46+
Type: "test",
47+
Name: "ephemeral",
48+
}.InModule(addrs.RootModule))
49+
ephemeralResourceInstAddr := addrs.Checkable(addrs.Resource{
50+
Mode: addrs.EphemeralResourceMode,
51+
Type: "test",
52+
Name: "ephemeral",
53+
}.Instance(addrs.NoKey).Absolute(addrs.RootModuleInstance))
4454

4555
tests := map[string]struct {
4656
Input *states.CheckResults
@@ -223,6 +233,48 @@ func TestMarshalCheckStates(t *testing.T) {
223233
},
224234
},
225235
},
236+
"ephemeral_resource": {
237+
&states.CheckResults{
238+
ConfigResults: addrs.MakeMap(
239+
addrs.MakeMapElem(ephemeralResourceAddr, &states.CheckResultAggregate{
240+
Status: checks.StatusFail,
241+
ObjectResults: addrs.MakeMap(
242+
addrs.MakeMapElem(ephemeralResourceInstAddr, &states.CheckResultObject{
243+
Status: checks.StatusFail,
244+
FailureMessages: []string{
245+
"Ephemeral resource check failed.",
246+
},
247+
}),
248+
),
249+
}),
250+
),
251+
},
252+
[]any{
253+
map[string]any{
254+
"address": map[string]any{
255+
"kind": "resource",
256+
"mode": "ephemeral",
257+
"name": "ephemeral",
258+
"to_display": "ephemeral.test.ephemeral",
259+
"type": "test",
260+
},
261+
"instances": []any{
262+
map[string]any{
263+
"address": map[string]any{
264+
"to_display": "ephemeral.test.ephemeral",
265+
},
266+
"problems": []any{
267+
map[string]any{
268+
"message": "Ephemeral resource check failed.",
269+
},
270+
},
271+
"status": "fail",
272+
},
273+
},
274+
"status": "fail",
275+
},
276+
},
277+
},
226278
}
227279

228280
for name, test := range tests {

internal/command/jsonchecks/objects.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ func makeStaticObjectAddr(addr addrs.ConfigCheckable) staticObjectAddr {
2929
ret["mode"] = "managed"
3030
case addrs.DataResourceMode:
3131
ret["mode"] = "data"
32+
case addrs.EphemeralResourceMode:
33+
ret["mode"] = "ephemeral"
3234
default:
3335
panic(fmt.Sprintf("unsupported resource mode %#v", addr.Resource.Mode))
3436
}

0 commit comments

Comments
 (0)