Skip to content

Commit 595aa3d

Browse files
authored
Backport GenerateResourceConfig fix to v1.14 (#37896)
* marshal state and set in the proto req for generate resource config * set state in the proto req for generate resource config in plugin6 * add GRPC tests for GenerateResourceConfig * changelog
1 parent b0ebd07 commit 595aa3d

File tree

5 files changed

+85
-2
lines changed

5 files changed

+85
-2
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: Set state information in the proto request for the `GenerateResourceConfig` RPC
3+
time: 2025-11-14T09:06:20.057751+01:00
4+
custom:
5+
Issue: "37896"

internal/plugin/grpc_provider.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -940,9 +940,15 @@ func (p *GRPCProvider) GenerateResourceConfig(r providers.GenerateResourceConfig
940940
return resp
941941
}
942942

943+
mp, err := msgpack.Marshal(r.State, resSchema.Body.ImpliedType())
944+
if err != nil {
945+
resp.Diagnostics = resp.Diagnostics.Append(err)
946+
return resp
947+
}
948+
943949
protoReq := &proto.GenerateResourceConfig_Request{
944950
TypeName: r.TypeName,
945-
State: nil,
951+
State: &proto.DynamicValue{Msgpack: mp},
946952
}
947953

948954
protoResp, err := p.client.GenerateResourceConfig(p.ctx, protoReq)

internal/plugin/grpc_provider_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2102,3 +2102,36 @@ func TestGRPCProvider_ListResource_Limit(t *testing.T) {
21022102
t.Fatalf("Expected 2 events, got %d", len(results))
21032103
}
21042104
}
2105+
2106+
func TestGRPCProvider_GenerateResourceConfig(t *testing.T) {
2107+
client := mockProviderClient(t)
2108+
p := &GRPCProvider{
2109+
client: client,
2110+
}
2111+
client.EXPECT().GenerateResourceConfig(
2112+
gomock.Any(),
2113+
gomock.Cond[any](func(x any) bool {
2114+
req := x.(*proto.GenerateResourceConfig_Request)
2115+
if req.TypeName != "resource" {
2116+
return false
2117+
}
2118+
if req.State == nil {
2119+
t.Log("GenerateResourceConfig state is nil")
2120+
return false
2121+
}
2122+
return true
2123+
}),
2124+
).Return(&proto.GenerateResourceConfig_Response{
2125+
Config: &proto.DynamicValue{
2126+
Msgpack: []byte("\x81\xa4attr\xa3bar"),
2127+
},
2128+
}, nil)
2129+
resp := p.GenerateResourceConfig(providers.GenerateResourceConfigRequest{
2130+
TypeName: "resource",
2131+
State: cty.ObjectVal(map[string]cty.Value{
2132+
"computed": cty.StringVal("computed"),
2133+
"attr": cty.StringVal("foo"),
2134+
}),
2135+
})
2136+
checkDiags(t, resp.Diagnostics)
2137+
}

internal/plugin6/grpc_provider.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -934,9 +934,15 @@ func (p *GRPCProvider) GenerateResourceConfig(r providers.GenerateResourceConfig
934934
return resp
935935
}
936936

937+
mp, err := msgpack.Marshal(r.State, resSchema.Body.ImpliedType())
938+
if err != nil {
939+
resp.Diagnostics = resp.Diagnostics.Append(err)
940+
return resp
941+
}
942+
937943
protoReq := &proto6.GenerateResourceConfig_Request{
938944
TypeName: r.TypeName,
939-
State: nil,
945+
State: &proto6.DynamicValue{Msgpack: mp},
940946
}
941947

942948
protoResp, err := p.client.GenerateResourceConfig(p.ctx, protoReq)

internal/plugin6/grpc_provider_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2556,3 +2556,36 @@ func TestGRPCProvider_DeleteState(t *testing.T) {
25562556
}
25572557
})
25582558
}
2559+
2560+
func TestGRPCProvider_GenerateResourceConfig(t *testing.T) {
2561+
client := mockProviderClient(t)
2562+
p := &GRPCProvider{
2563+
client: client,
2564+
}
2565+
client.EXPECT().GenerateResourceConfig(
2566+
gomock.Any(),
2567+
gomock.Cond[any](func(x any) bool {
2568+
req := x.(*proto.GenerateResourceConfig_Request)
2569+
if req.TypeName != "resource" {
2570+
return false
2571+
}
2572+
if req.State == nil {
2573+
t.Log("GenerateResourceConfig state is nil")
2574+
return false
2575+
}
2576+
return true
2577+
}),
2578+
).Return(&proto.GenerateResourceConfig_Response{
2579+
Config: &proto.DynamicValue{
2580+
Msgpack: []byte("\x81\xa4attr\xa3bar"),
2581+
},
2582+
}, nil)
2583+
resp := p.GenerateResourceConfig(providers.GenerateResourceConfigRequest{
2584+
TypeName: "resource",
2585+
State: cty.ObjectVal(map[string]cty.Value{
2586+
"computed": cty.StringVal("computed"),
2587+
"attr": cty.StringVal("foo"),
2588+
}),
2589+
})
2590+
checkDiags(t, resp.Diagnostics)
2591+
}

0 commit comments

Comments
 (0)