Skip to content
This repository was archived by the owner on Apr 27, 2026. It is now read-only.

Commit 67664a3

Browse files
authored
fix(ghoten): propagate context in state transforms and provider calls (#104)
Replace context.TODO() in upgradeResourceStateTransform and moveResourceStateTransform with a real context propagated from callers. Add ctx context.Context field to stateTransformArgs; update both call sites in readResourceInstanceState and readResourceInstanceStateDeposed (node_resource_abstract.go) to populate it from the incoming ctx parameter. Update test helpers and inline stateTransformArgs literals to use context.Background(). Closes #75
1 parent 31df703 commit 67664a3

3 files changed

Lines changed: 13 additions & 2 deletions

File tree

internal/ghoten/node_resource_abstract.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,7 @@ func (n *NodeAbstractResourceInstance) readResourceInstanceState(ctx context.Con
607607
// prevAddr will match the newAddr if the resource wasn't moved (prevRunAddr checks move results)
608608
prevAddr := n.prevRunAddr(evalCtx)
609609
transformArgs := stateTransformArgs{
610+
ctx: ctx,
610611
currentAddr: addr,
611612
prevAddr: prevAddr,
612613
provider: provider,
@@ -666,6 +667,7 @@ func (n *NodeAbstractResourceInstance) readResourceInstanceStateDeposed(ctx cont
666667
// prevAddr will match the newAddr if the resource wasn't moved (prevRunAddr checks move results)
667668
prevAddr := n.prevRunAddr(evalCtx)
668669
transformArgs := stateTransformArgs{
670+
ctx: ctx,
669671
currentAddr: addr,
670672
prevAddr: prevAddr,
671673
provider: provider,

internal/ghoten/upgrade_resource_state.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import (
2121

2222
// stateTransformArgs is a struct for convenience that holds the parameters required for state transformations
2323
type stateTransformArgs struct {
24+
// ctx is the context to propagate to provider calls.
25+
ctx context.Context
2426
// currentAddr is the current/latest address of the resource
2527
currentAddr addrs.AbsResourceInstance
2628
// prevAddr is the previous address of the resource
@@ -110,7 +112,7 @@ func upgradeResourceStateTransform(args stateTransformArgs) (cty.Value, []byte,
110112
req.RawStateJSON = args.objectSrc.AttrsJSON
111113
}
112114

113-
resp := args.provider.UpgradeResourceState(context.TODO(), req)
115+
resp := args.provider.UpgradeResourceState(args.ctx, req)
114116
diags := resp.Diagnostics
115117
if diags.HasErrors() {
116118
log.Printf("[TRACE] upgradeResourceStateTransform: failed - address: %s", args.currentAddr)
@@ -140,7 +142,7 @@ func moveResourceStateTransform(args stateTransformArgs) (cty.Value, []byte, tfd
140142
SourcePrivate: args.objectSrc.Private,
141143
TargetTypeName: args.currentAddr.Resource.Resource.Type,
142144
}
143-
resp := args.provider.MoveResourceState(context.TODO(), req)
145+
resp := args.provider.MoveResourceState(args.ctx, req)
144146
diags := resp.Diagnostics
145147
if diags.HasErrors() {
146148
log.Printf("[TRACE] moveResourceStateTransform: failed - new address: %s, previous address: %s - diags: %s", args.currentAddr, args.prevAddr, diags.Err().Error())

internal/ghoten/upgrade_resource_state_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ package ghoten
77

88
import (
99
"bytes"
10+
"context"
1011
"reflect"
1112
"strings"
1213
"testing"
@@ -180,6 +181,7 @@ func getMoveStateArgs() stateTransformArgs {
180181
},
181182
}
182183
return stateTransformArgs{
184+
ctx: context.Background(),
183185
currentAddr: mustResourceInstanceAddr("foo2_instance.cur"),
184186
prevAddr: mustResourceInstanceAddr("foo_instance.prev"),
185187
provider: &MockProvider{
@@ -279,6 +281,7 @@ func getUpgradeStateArgs() stateTransformArgs {
279281
},
280282
}
281283
args := stateTransformArgs{
284+
ctx: context.Background(),
282285
currentAddr: mustResourceInstanceAddr("foo_instance.cur"),
283286
prevAddr: mustResourceInstanceAddr("foo_instance.cur"),
284287
provider: &MockProvider{
@@ -403,6 +406,7 @@ func TestTransformResourceState(t *testing.T) {
403406
{
404407
name: "flatmap state should be removed after transformation",
405408
args: stateTransformArgs{
409+
ctx: context.Background(),
406410
currentAddr: mustResourceInstanceAddr("test_instance.foo"),
407411
provider: &MockProvider{
408412
GetProviderSchemaResponse: testProviderSchema("test"),
@@ -432,6 +436,7 @@ func TestTransformResourceState(t *testing.T) {
432436
{
433437
name: "state must conform to schema",
434438
args: stateTransformArgs{
439+
ctx: context.Background(),
435440
currentAddr: mustResourceInstanceAddr("test_instance.foo"),
436441
provider: &MockProvider{
437442
GetProviderSchemaResponse: testProviderSchema("test"),
@@ -456,6 +461,7 @@ func TestTransformResourceState(t *testing.T) {
456461
{
457462
name: "non-managed resource should not be upgraded",
458463
args: stateTransformArgs{
464+
ctx: context.Background(),
459465
currentAddr: getDataResourceModeInstance(),
460466
objectSrc: &states.ResourceInstanceObjectSrc{
461467
AttrsJSON: []byte(`{"foo":"bar"}`),
@@ -475,6 +481,7 @@ func TestTransformResourceState(t *testing.T) {
475481
{
476482
name: "private state should be updated",
477483
args: stateTransformArgs{
484+
ctx: context.Background(),
478485
currentAddr: mustResourceInstanceAddr("test_instance.foo"),
479486
provider: &MockProvider{
480487
GetProviderSchemaResponse: testProviderSchema("test"),

0 commit comments

Comments
 (0)