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
pull/37900/head
stephybun 5 months ago committed by GitHub
parent b0ebd07f11
commit 595aa3de0f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,5 @@
kind: BUG FIXES
body: Set state information in the proto request for the `GenerateResourceConfig` RPC
time: 2025-11-14T09:06:20.057751+01:00
custom:
Issue: "37896"

@ -940,9 +940,15 @@ func (p *GRPCProvider) GenerateResourceConfig(r providers.GenerateResourceConfig
return resp
}
mp, err := msgpack.Marshal(r.State, resSchema.Body.ImpliedType())
if err != nil {
resp.Diagnostics = resp.Diagnostics.Append(err)
return resp
}
protoReq := &proto.GenerateResourceConfig_Request{
TypeName: r.TypeName,
State: nil,
State: &proto.DynamicValue{Msgpack: mp},
}
protoResp, err := p.client.GenerateResourceConfig(p.ctx, protoReq)

@ -2102,3 +2102,36 @@ func TestGRPCProvider_ListResource_Limit(t *testing.T) {
t.Fatalf("Expected 2 events, got %d", len(results))
}
}
func TestGRPCProvider_GenerateResourceConfig(t *testing.T) {
client := mockProviderClient(t)
p := &GRPCProvider{
client: client,
}
client.EXPECT().GenerateResourceConfig(
gomock.Any(),
gomock.Cond[any](func(x any) bool {
req := x.(*proto.GenerateResourceConfig_Request)
if req.TypeName != "resource" {
return false
}
if req.State == nil {
t.Log("GenerateResourceConfig state is nil")
return false
}
return true
}),
).Return(&proto.GenerateResourceConfig_Response{
Config: &proto.DynamicValue{
Msgpack: []byte("\x81\xa4attr\xa3bar"),
},
}, nil)
resp := p.GenerateResourceConfig(providers.GenerateResourceConfigRequest{
TypeName: "resource",
State: cty.ObjectVal(map[string]cty.Value{
"computed": cty.StringVal("computed"),
"attr": cty.StringVal("foo"),
}),
})
checkDiags(t, resp.Diagnostics)
}

@ -934,9 +934,15 @@ func (p *GRPCProvider) GenerateResourceConfig(r providers.GenerateResourceConfig
return resp
}
mp, err := msgpack.Marshal(r.State, resSchema.Body.ImpliedType())
if err != nil {
resp.Diagnostics = resp.Diagnostics.Append(err)
return resp
}
protoReq := &proto6.GenerateResourceConfig_Request{
TypeName: r.TypeName,
State: nil,
State: &proto6.DynamicValue{Msgpack: mp},
}
protoResp, err := p.client.GenerateResourceConfig(p.ctx, protoReq)

@ -2556,3 +2556,36 @@ func TestGRPCProvider_DeleteState(t *testing.T) {
}
})
}
func TestGRPCProvider_GenerateResourceConfig(t *testing.T) {
client := mockProviderClient(t)
p := &GRPCProvider{
client: client,
}
client.EXPECT().GenerateResourceConfig(
gomock.Any(),
gomock.Cond[any](func(x any) bool {
req := x.(*proto.GenerateResourceConfig_Request)
if req.TypeName != "resource" {
return false
}
if req.State == nil {
t.Log("GenerateResourceConfig state is nil")
return false
}
return true
}),
).Return(&proto.GenerateResourceConfig_Response{
Config: &proto.DynamicValue{
Msgpack: []byte("\x81\xa4attr\xa3bar"),
},
}, nil)
resp := p.GenerateResourceConfig(providers.GenerateResourceConfigRequest{
TypeName: "resource",
State: cty.ObjectVal(map[string]cty.Value{
"computed": cty.StringVal("computed"),
"attr": cty.StringVal("foo"),
}),
})
checkDiags(t, resp.Diagnostics)
}

Loading…
Cancel
Save