diff --git a/internal/plugin/grpc_provider.go b/internal/plugin/grpc_provider.go index e3b31264e5..28ba1b4de9 100644 --- a/internal/plugin/grpc_provider.go +++ b/internal/plugin/grpc_provider.go @@ -1298,7 +1298,11 @@ func (p *GRPCProvider) ListResource(r providers.ListResourceRequest) providers.L } configSchema := listResourceSchema.Body.BlockTypes["config"] - mp, err := msgpack.Marshal(r.Config, configSchema.ImpliedType()) + config := cty.NullVal(configSchema.ImpliedType()) + if r.Config.Type().HasAttribute("config") { + config = r.Config.GetAttr("config") + } + mp, err := msgpack.Marshal(config, configSchema.ImpliedType()) if err != nil { resp.Diagnostics = resp.Diagnostics.Append(err) return resp diff --git a/internal/plugin/grpc_provider_test.go b/internal/plugin/grpc_provider_test.go index de819c1d12..745cb27586 100644 --- a/internal/plugin/grpc_provider_test.go +++ b/internal/plugin/grpc_provider_test.go @@ -1566,7 +1566,9 @@ func TestGRPCProvider_ListResource(t *testing.T) { // Create the request configVal := cty.ObjectVal(map[string]cty.Value{ - "filter_attr": cty.StringVal("filter-value"), + "config": cty.ObjectVal(map[string]cty.Value{ + "filter_attr": cty.StringVal("filter-value"), + }), }) request := providers.ListResourceRequest{ TypeName: "list", @@ -1646,7 +1648,9 @@ func TestGRPCProvider_ListResource_Error(t *testing.T) { ).Return(nil, fmt.Errorf("provider error")) configVal := cty.ObjectVal(map[string]cty.Value{ - "filter_attr": cty.StringVal("filter-value"), + "config": cty.ObjectVal(map[string]cty.Value{ + "filter_attr": cty.StringVal("filter-value"), + }), }) request := providers.ListResourceRequest{ TypeName: "list", @@ -1692,7 +1696,9 @@ func TestGRPCProvider_ListResource_Diagnostics(t *testing.T) { // Create the request configVal := cty.ObjectVal(map[string]cty.Value{ - "filter_attr": cty.StringVal("filter-value"), + "config": cty.ObjectVal(map[string]cty.Value{ + "filter_attr": cty.StringVal("filter-value"), + }), }) request := providers.ListResourceRequest{ TypeName: "list", @@ -1757,7 +1763,9 @@ func TestGRPCProvider_ListResource_Limit(t *testing.T) { // Create the request configVal := cty.ObjectVal(map[string]cty.Value{ - "filter_attr": cty.StringVal("filter-value"), + "config": cty.ObjectVal(map[string]cty.Value{ + "filter_attr": cty.StringVal("filter-value"), + }), }) request := providers.ListResourceRequest{ TypeName: "list", diff --git a/internal/plugin6/grpc_provider.go b/internal/plugin6/grpc_provider.go index 0073ccbfec..f22f3670f6 100644 --- a/internal/plugin6/grpc_provider.go +++ b/internal/plugin6/grpc_provider.go @@ -1293,7 +1293,11 @@ func (p *GRPCProvider) ListResource(r providers.ListResourceRequest) providers.L } configSchema := listResourceSchema.Body.BlockTypes["config"] - mp, err := msgpack.Marshal(r.Config, configSchema.ImpliedType()) + config := cty.NullVal(configSchema.ImpliedType()) + if r.Config.Type().HasAttribute("config") { + config = r.Config.GetAttr("config") + } + mp, err := msgpack.Marshal(config, configSchema.ImpliedType()) if err != nil { resp.Diagnostics = resp.Diagnostics.Append(err) return resp diff --git a/internal/plugin6/grpc_provider_test.go b/internal/plugin6/grpc_provider_test.go index eb5935f6a3..ea448b6bd7 100644 --- a/internal/plugin6/grpc_provider_test.go +++ b/internal/plugin6/grpc_provider_test.go @@ -1572,7 +1572,9 @@ func TestGRPCProvider_ListResource(t *testing.T) { // Create the request configVal := cty.ObjectVal(map[string]cty.Value{ - "filter_attr": cty.StringVal("filter-value"), + "config": cty.ObjectVal(map[string]cty.Value{ + "filter_attr": cty.StringVal("filter-value"), + }), }) request := providers.ListResourceRequest{ TypeName: "list", @@ -1652,7 +1654,9 @@ func TestGRPCProvider_ListResource_Error(t *testing.T) { ).Return(nil, fmt.Errorf("provider error")) configVal := cty.ObjectVal(map[string]cty.Value{ - "filter_attr": cty.StringVal("filter-value"), + "config": cty.ObjectVal(map[string]cty.Value{ + "filter_attr": cty.StringVal("filter-value"), + }), }) request := providers.ListResourceRequest{ TypeName: "list", @@ -1698,7 +1702,9 @@ func TestGRPCProvider_ListResource_Diagnostics(t *testing.T) { // Create the request configVal := cty.ObjectVal(map[string]cty.Value{ - "filter_attr": cty.StringVal("filter-value"), + "config": cty.ObjectVal(map[string]cty.Value{ + "filter_attr": cty.StringVal("filter-value"), + }), }) request := providers.ListResourceRequest{ TypeName: "list", @@ -1763,7 +1769,9 @@ func TestGRPCProvider_ListResource_Limit(t *testing.T) { // Create the request configVal := cty.ObjectVal(map[string]cty.Value{ - "filter_attr": cty.StringVal("filter-value"), + "config": cty.ObjectVal(map[string]cty.Value{ + "filter_attr": cty.StringVal("filter-value"), + }), }) request := providers.ListResourceRequest{ TypeName: "list",