fix: support ephemeral resources in jsonchecks (#37893)

Fixes #37834
pull/37917/head
Kevin Vu 5 months ago committed by GitHub
parent 1dd8e60f15
commit dc0eba33af
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,5 @@
kind: BUG FIXES
body: 'cli: Fixed crash in `terraform show -json` when plan contains ephemeral resources with preconditions or postconditions'
time: 2025-11-12T03:38:30.000000-08:00
custom:
Issue: "37834"

@ -41,6 +41,16 @@ func TestMarshalCheckStates(t *testing.T) {
outputBInstAddr := addrs.Checkable(addrs.OutputValue{Name: "b"}.Absolute(moduleChildAddr))
checkBlockAAddr := addrs.ConfigCheckable(addrs.Check{Name: "a"}.InModule(addrs.RootModule))
checkBlockAInstAddr := addrs.Checkable(addrs.Check{Name: "a"}.Absolute(addrs.RootModuleInstance))
ephemeralResourceAddr := addrs.ConfigCheckable(addrs.Resource{
Mode: addrs.EphemeralResourceMode,
Type: "test",
Name: "ephemeral",
}.InModule(addrs.RootModule))
ephemeralResourceInstAddr := addrs.Checkable(addrs.Resource{
Mode: addrs.EphemeralResourceMode,
Type: "test",
Name: "ephemeral",
}.Instance(addrs.NoKey).Absolute(addrs.RootModuleInstance))
tests := map[string]struct {
Input *states.CheckResults
@ -223,6 +233,48 @@ func TestMarshalCheckStates(t *testing.T) {
},
},
},
"ephemeral_resource": {
&states.CheckResults{
ConfigResults: addrs.MakeMap(
addrs.MakeMapElem(ephemeralResourceAddr, &states.CheckResultAggregate{
Status: checks.StatusFail,
ObjectResults: addrs.MakeMap(
addrs.MakeMapElem(ephemeralResourceInstAddr, &states.CheckResultObject{
Status: checks.StatusFail,
FailureMessages: []string{
"Ephemeral resource check failed.",
},
}),
),
}),
),
},
[]any{
map[string]any{
"address": map[string]any{
"kind": "resource",
"mode": "ephemeral",
"name": "ephemeral",
"to_display": "ephemeral.test.ephemeral",
"type": "test",
},
"instances": []any{
map[string]any{
"address": map[string]any{
"to_display": "ephemeral.test.ephemeral",
},
"problems": []any{
map[string]any{
"message": "Ephemeral resource check failed.",
},
},
"status": "fail",
},
},
"status": "fail",
},
},
},
}
for name, test := range tests {

@ -29,6 +29,8 @@ func makeStaticObjectAddr(addr addrs.ConfigCheckable) staticObjectAddr {
ret["mode"] = "managed"
case addrs.DataResourceMode:
ret["mode"] = "data"
case addrs.EphemeralResourceMode:
ret["mode"] = "ephemeral"
default:
panic(fmt.Sprintf("unsupported resource mode %#v", addr.Resource.Mode))
}

Loading…
Cancel
Save