Generate Resource Config: set state in proto req (#37895)
Some checks are pending
build / Determine intended Terraform version (push) Waiting to run
build / Determine Go toolchain version (push) Waiting to run
build / Generate release metadata (push) Blocked by required conditions
build / Build for freebsd_386 (push) Blocked by required conditions
build / Build for linux_386 (push) Blocked by required conditions
build / Build for openbsd_386 (push) Blocked by required conditions
build / Build for windows_386 (push) Blocked by required conditions
build / Build for darwin_amd64 (push) Blocked by required conditions
build / Build for freebsd_amd64 (push) Blocked by required conditions
build / Build for linux_amd64 (push) Blocked by required conditions
build / Build for openbsd_amd64 (push) Blocked by required conditions
build / Build for solaris_amd64 (push) Blocked by required conditions
build / Build for windows_amd64 (push) Blocked by required conditions
build / Build for freebsd_arm (push) Blocked by required conditions
build / Build for linux_arm (push) Blocked by required conditions
build / Build for darwin_arm64 (push) Blocked by required conditions
build / Build for linux_arm64 (push) Blocked by required conditions
build / Build for windows_arm64 (push) Blocked by required conditions
build / Build Docker image for linux_386 (push) Blocked by required conditions
build / Build Docker image for linux_amd64 (push) Blocked by required conditions
build / Build Docker image for linux_arm (push) Blocked by required conditions
build / Build Docker image for linux_arm64 (push) Blocked by required conditions
build / Build e2etest for linux_386 (push) Blocked by required conditions
build / Build e2etest for windows_386 (push) Blocked by required conditions
build / Build e2etest for darwin_amd64 (push) Blocked by required conditions
build / Build e2etest for linux_amd64 (push) Blocked by required conditions
build / Build e2etest for windows_amd64 (push) Blocked by required conditions
build / Build e2etest for linux_arm (push) Blocked by required conditions
build / Build e2etest for darwin_arm64 (push) Blocked by required conditions
build / Build e2etest for linux_arm64 (push) Blocked by required conditions
build / Run e2e test for linux_386 (push) Blocked by required conditions
build / Run e2e test for windows_386 (push) Blocked by required conditions
build / Run e2e test for darwin_amd64 (push) Blocked by required conditions
build / Run e2e test for linux_amd64 (push) Blocked by required conditions
build / Run e2e test for windows_amd64 (push) Blocked by required conditions
build / Run e2e test for linux_arm (push) Blocked by required conditions
build / Run e2e test for linux_arm64 (push) Blocked by required conditions
build / Run terraform-exec test for linux amd64 (push) Blocked by required conditions
Quick Checks / Unit Tests (push) Waiting to run
Quick Checks / Race Tests (push) Waiting to run
Quick Checks / End-to-end Tests (push) Waiting to run
Quick Checks / Code Consistency Checks (push) Waiting to run

* marshal state and set in the proto req for generate resource config

* changelog

* set state in the proto req for generate resource config in plugin6

* add GRPC tests for GenerateResourceConfig

* remove changelog entry since this fix is backported to 1.14
This commit is contained in:
stephybun 2025-12-10 15:19:29 +01:00 committed by GitHub
parent 2c075b9f8e
commit c9d024062a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 80 additions and 2 deletions

View file

@ -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)

View file

@ -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)
}

View file

@ -945,9 +945,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)

View file

@ -3367,3 +3367,36 @@ func TestGRPCProvider_WriteStateBytes(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)
}