Skip to content

Commit e7376fa

Browse files
committed
temporary interface the new RPC
1 parent 359cf4d commit e7376fa

File tree

3 files changed

+41
-2
lines changed

3 files changed

+41
-2
lines changed

tfprotov5/provider.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,21 @@ type ProviderServerWithListResource interface {
9393
ListResourceServer
9494
}
9595

96+
// ProviderServerGenerateResourceConfig is a temporary interface for servers
97+
// to implement the GenerateResourceConfig RPC
98+
//
99+
// - GenerateResourceConfig
100+
//
101+
// Deprecated: All methods will be moved into the
102+
// ProviderServer interface and this interface will be removed in a future
103+
// version.
104+
type ProviderServerGenerateResourceConfig interface {
105+
ProviderServer
106+
107+
// GenerateResourceConfig is an interface encapsulating the GenerateResourceConfig RPC request.
108+
GenerateResourceConfig(context.Context, *GenerateResourceConfigRequest) (*GenerateResourceConfigResponse, error)
109+
}
110+
96111
// ProviderServerWithActions is a temporary interface for servers
97112
// to implement Action RPCs
98113
//

tfprotov5/resource.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ type ResourceServer interface {
7777
// This functionality is only supported in Terraform 1.14 and later. The
7878
// provider must have enabled the GenerateResourceConfig server capability to
7979
// enable these requests.
80-
GenerateResourceConfig(context.Context, *GenerateResourceConfigRequest) (*GenerateResourceConfigResponse, error)
80+
// GenerateResourceConfig(context.Context, *GenerateResourceConfigRequest) (*GenerateResourceConfigResponse, error)
8181
}
8282

8383
// ValidateResourceTypeConfigRequest is the request Terraform sends when it

tfprotov5/tf5server/server.go

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1499,7 +1499,31 @@ func (s *server) GenerateResourceConfig(ctx context.Context, protoReq *tfplugin5
14991499

15001500
ctx = tf5serverlogging.DownstreamRequest(ctx)
15011501

1502-
resp, err := s.downstream.GenerateResourceConfig(ctx, req)
1502+
// TODO: Remove this check and error in preference of
1503+
// s.downstream.GenerateResourceConfig below once ProviderServer interface
1504+
// implements this RPC method.
1505+
// nolint:staticcheck
1506+
generateResourceConfigProviderServer, ok := s.downstream.(tfprotov5.ProviderServerGenerateResourceConfig)
1507+
if !ok {
1508+
logging.ProtocolError(ctx, "ProviderServer does not implement GenerateResourceConfig")
1509+
1510+
protoResp := &tfplugin5.GenerateResourceConfig_Response{
1511+
Diagnostics: []*tfplugin5.Diagnostic{
1512+
{
1513+
Severity: tfplugin5.Diagnostic_ERROR,
1514+
Summary: "Provider GenerateResourceConfig Not Implemented",
1515+
Detail: "A GenerateResourceConfig call was received by the provider, however the provider does not implement the call. " +
1516+
"Either upgrade the provider to a version that implements action support or this is a bug in Terraform that should be reported to the Terraform maintainers.",
1517+
},
1518+
},
1519+
}
1520+
1521+
return protoResp, nil
1522+
}
1523+
1524+
// TODO: Update this to call downstream once optional interface is removed
1525+
// resp, err := s.downstream.GenerateResourceConfig(ctx, req)
1526+
resp, err := generateResourceConfigProviderServer.GenerateResourceConfig(ctx, req)
15031527
if err != nil {
15041528
logging.ProtocolError(ctx, "Error from downstream", map[string]any{logging.KeyError: err})
15051529
return nil, err

0 commit comments

Comments
 (0)