Skip to content

Commit 072a301

Browse files
committed
Better arch
1 parent f95106d commit 072a301

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+117
-19484
lines changed

internal/rpcapi/dependencies.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ type dependenciesServer struct {
4242
services *disco.Disco
4343
}
4444

45-
func newDependenciesServer(handles *handleTable, services *disco.Disco) *dependenciesServer {
45+
func NewDependenciesServer(handles *handleTable, services *disco.Disco) *dependenciesServer {
4646
return &dependenciesServer{
4747
handles: handles,
4848
services: services,

internal/rpcapi/dependencies_test.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ import (
2929
func TestDependenciesOpenCloseSourceBundle(t *testing.T) {
3030
ctx := context.Background()
3131

32-
handles := newHandleTable()
33-
depsServer := newDependenciesServer(handles, disco.New())
32+
handles := NewHandleTable()
33+
depsServer := NewDependenciesServer(handles, disco.New())
3434

3535
openResp, err := depsServer.OpenSourceBundle(ctx, &dependencies.OpenSourceBundle_Request{
3636
LocalPath: "testdata/sourcebundle",
@@ -72,8 +72,8 @@ func TestDependenciesOpenCloseSourceBundle(t *testing.T) {
7272
func TestDependencyLocks(t *testing.T) {
7373
ctx := context.Background()
7474

75-
handles := newHandleTable()
76-
depsServer := newDependenciesServer(handles, disco.New())
75+
handles := NewHandleTable()
76+
depsServer := NewDependenciesServer(handles, disco.New())
7777

7878
openSourcesResp, err := depsServer.OpenSourceBundle(ctx, &dependencies.OpenSourceBundle_Request{
7979
LocalPath: "testdata/sourcebundle",
@@ -178,8 +178,8 @@ func TestDependencyLocks(t *testing.T) {
178178
func TestDependenciesProviderCache(t *testing.T) {
179179
ctx := context.Background()
180180

181-
handles := newHandleTable()
182-
depsServer := newDependenciesServer(handles, disco.New())
181+
handles := NewHandleTable()
182+
depsServer := NewDependenciesServer(handles, disco.New())
183183

184184
// This test involves a streaming RPC operation, so we'll need help from
185185
// a real in-memory gRPC connection to exercise it concisely so that
@@ -320,8 +320,8 @@ func TestDependenciesProviderCache(t *testing.T) {
320320
func TestDependenciesProviderSchema(t *testing.T) {
321321
ctx := context.Background()
322322

323-
handles := newHandleTable()
324-
depsServer := newDependenciesServer(handles, disco.New())
323+
handles := NewHandleTable()
324+
depsServer := NewDependenciesServer(handles, disco.New())
325325

326326
providersResp, err := depsServer.GetBuiltInProviders(ctx, &dependencies.GetBuiltInProviders_Request{})
327327
if err != nil {

internal/rpcapi/handles.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ type handleTable struct {
7878
mu sync.Mutex
7979
}
8080

81-
func newHandleTable() *handleTable {
81+
func NewHandleTable() *handleTable {
8282
return &handleTable{
8383
handleObjs: make(map[int64]any),
8484
handleDeps: make(map[int64]map[int64]struct{}),

internal/rpcapi/internal_client.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ type Client struct {
4646
func NewInternalClient(ctx context.Context, clientCaps *setup.ClientCapabilities) (*Client, error) {
4747
fakeListener := bufconn.Listen(4 * 1024 * 1024 /* buffer size */)
4848
srv := grpc.NewServer()
49-
registerGRPCServices(srv, &serviceOpts{})
49+
registerGRPCServices(srv, &ServiceOpts{})
5050

5151
go func() {
5252
if err := srv.Serve(fakeListener); err != nil {

internal/rpcapi/packages.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import (
2323

2424
var _ packages.PackagesServer = (*packagesServer)(nil)
2525

26-
func newPackagesServer(services *disco.Disco) *packagesServer {
26+
func NewPackagesServer(services *disco.Disco) *packagesServer {
2727
return &packagesServer{
2828
services: services,
2929

internal/rpcapi/packages_test.go

-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import (
2323
)
2424

2525
func TestPackagesServer_ProviderPackageVersions(t *testing.T) {
26-
2726
tcs := map[string]struct {
2827
source string
2928
expectedVersions []string

internal/rpcapi/plugin.go

+11-11
Original file line numberDiff line numberDiff line change
@@ -35,22 +35,22 @@ func (p *corePlugin) GRPCClient(ctx context.Context, broker *plugin.GRPCBroker,
3535
}
3636

3737
func (p *corePlugin) GRPCServer(broker *plugin.GRPCBroker, s *grpc.Server) error {
38-
generalOpts := &serviceOpts{
39-
experimentsAllowed: p.experimentsAllowed,
38+
generalOpts := &ServiceOpts{
39+
ExperimentsAllowed: p.experimentsAllowed,
4040
}
4141
registerGRPCServices(s, generalOpts)
4242
return nil
4343
}
4444

45-
func registerGRPCServices(s *grpc.Server, opts *serviceOpts) {
45+
func registerGRPCServices(s *grpc.Server, opts *ServiceOpts) {
4646
// We initially only register the setup server, because the registration
4747
// of other services can vary depending on the capabilities negotiated
4848
// during handshake.
4949
server := newSetupServer(serverHandshake(s, opts))
5050
setup.RegisterSetupServer(s, server)
5151
}
5252

53-
func serverHandshake(s *grpc.Server, opts *serviceOpts) func(context.Context, *setup.Handshake_Request, *stopper) (*setup.ServerCapabilities, error) {
53+
func serverHandshake(s *grpc.Server, opts *ServiceOpts) func(context.Context, *setup.Handshake_Request, *stopper) (*setup.ServerCapabilities, error) {
5454
dependenciesStub := dynrpcserver.NewDependenciesStub()
5555
dependencies.RegisterDependenciesServer(s, dependenciesStub)
5656
stacksStub := dynrpcserver.NewStacksStub()
@@ -61,7 +61,7 @@ func serverHandshake(s *grpc.Server, opts *serviceOpts) func(context.Context, *s
6161
return func(ctx context.Context, request *setup.Handshake_Request, stopper *stopper) (*setup.ServerCapabilities, error) {
6262
// All of our servers will share a common handles table so that objects
6363
// can be passed from one service to another.
64-
handles := newHandleTable()
64+
handles := NewHandleTable()
6565

6666
// NOTE: This is intentionally not the same disco that "package main"
6767
// instantiates for Terraform CLI, because the RPC API is
@@ -83,23 +83,23 @@ func serverHandshake(s *grpc.Server, opts *serviceOpts) func(context.Context, *s
8383
// will initialize all of the other services so the client can begin
8484
// doing real work. In future the details of what we register here
8585
// might vary based on the negotiated capabilities.
86-
dependenciesStub.ActivateRPCServer(newDependenciesServer(handles, services))
87-
stacksStub.ActivateRPCServer(newStacksServer(stopper, handles, opts))
88-
packagesStub.ActivateRPCServer(newPackagesServer(services))
86+
dependenciesStub.ActivateRPCServer(NewDependenciesServer(handles, services))
87+
stacksStub.ActivateRPCServer(NewStacksServer(stopper, handles, opts))
88+
packagesStub.ActivateRPCServer(NewPackagesServer(services))
8989

9090
// If the client requested any extra capabililties that we're going
9191
// to honor then we should announce them in this result.
9292
return &setup.ServerCapabilities{}, nil
9393
}
9494
}
9595

96-
// serviceOpts are options that could potentially apply to all of our
96+
// ServiceOpts are options that could potentially apply to all of our
9797
// individual RPC services.
9898
//
9999
// This could potentially be embedded inside a service-specific options
100100
// structure, if needed.
101-
type serviceOpts struct {
102-
experimentsAllowed bool
101+
type ServiceOpts struct {
102+
ExperimentsAllowed bool
103103
}
104104

105105
func newServiceDisco(config *setup.Config) (*disco.Disco, error) {

internal/rpcapi/setup.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ type setupServer struct {
3737
func newSetupServer(initOthers func(context.Context, *setup.Handshake_Request, *stopper) (*setup.ServerCapabilities, error)) setup.SetupServer {
3838
return &setupServer{
3939
initOthers: initOthers,
40-
stopper: newStopper(),
40+
stopper: NewStopper(),
4141
}
4242
}
4343

internal/rpcapi/stacks.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,11 @@ type stacksServer struct {
5555

5656
var _ stacks.StacksServer = (*stacksServer)(nil)
5757

58-
func newStacksServer(stopper *stopper, handles *handleTable, opts *serviceOpts) *stacksServer {
58+
func NewStacksServer(stopper *stopper, handles *handleTable, opts *ServiceOpts) *stacksServer {
5959
return &stacksServer{
6060
stopper: stopper,
6161
handles: handles,
62-
experimentsAllowed: opts.experimentsAllowed,
62+
experimentsAllowed: opts.ExperimentsAllowed,
6363
}
6464
}
6565

internal/rpcapi/stacks_test.go

+14-14
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ import (
4242
func TestStacksOpenCloseStackConfiguration(t *testing.T) {
4343
ctx := context.Background()
4444

45-
handles := newHandleTable()
46-
stacksServer := newStacksServer(newStopper(), handles, &serviceOpts{})
45+
handles := NewHandleTable()
46+
stacksServer := NewStacksServer(NewStopper(), handles, &ServiceOpts{})
4747

4848
// In normal use a client would have previously opened a source bundle
4949
// using Dependencies.OpenSourceBundle, so we'll simulate the effect
@@ -81,7 +81,7 @@ func TestStacksOpenCloseStackConfiguration(t *testing.T) {
8181
// A hypothetical attempt to close the underlying source bundle while
8282
// the stack configuration is active should fail.
8383
{
84-
depsServer := newDependenciesServer(handles, disco.New())
84+
depsServer := NewDependenciesServer(handles, disco.New())
8585

8686
_, err := depsServer.CloseSourceBundle(ctx, &dependencies.CloseSourceBundle_Request{
8787
SourceBundleHandle: sourcesHnd.ForProtobuf(),
@@ -110,7 +110,7 @@ func TestStacksOpenCloseStackConfiguration(t *testing.T) {
110110

111111
// Should be able to close the source bundle now too.
112112
{
113-
depsServer := newDependenciesServer(handles, disco.New())
113+
depsServer := NewDependenciesServer(handles, disco.New())
114114

115115
_, err := depsServer.CloseSourceBundle(ctx, &dependencies.CloseSourceBundle_Request{
116116
SourceBundleHandle: sourcesHnd.ForProtobuf(),
@@ -124,8 +124,8 @@ func TestStacksOpenCloseStackConfiguration(t *testing.T) {
124124
func TestStacksFindStackConfigurationComponents(t *testing.T) {
125125
ctx := context.Background()
126126

127-
handles := newHandleTable()
128-
stacksServer := newStacksServer(newStopper(), handles, &serviceOpts{})
127+
handles := NewHandleTable()
128+
stacksServer := NewStacksServer(NewStopper(), handles, &ServiceOpts{})
129129

130130
// In normal use a client would have previously opened a source bundle
131131
// using Dependencies.OpenSourceBundle, so we'll simulate the effect
@@ -255,8 +255,8 @@ func TestStacksFindStackConfigurationComponents(t *testing.T) {
255255
func TestStacksOpenState(t *testing.T) {
256256
ctx := context.Background()
257257

258-
handles := newHandleTable()
259-
stacksServer := newStacksServer(newStopper(), handles, &serviceOpts{})
258+
handles := NewHandleTable()
259+
stacksServer := NewStacksServer(NewStopper(), handles, &ServiceOpts{})
260260

261261
grpcClient, close := grpcClientForTesting(ctx, t, func(srv *grpc.Server) {
262262
stacks.RegisterStacksServer(srv, stacksServer)
@@ -320,8 +320,8 @@ func TestStacksOpenState(t *testing.T) {
320320
func TestStacksOpenPlan(t *testing.T) {
321321
ctx := context.Background()
322322

323-
handles := newHandleTable()
324-
stacksServer := newStacksServer(newStopper(), handles, &serviceOpts{})
323+
handles := NewHandleTable()
324+
stacksServer := NewStacksServer(NewStopper(), handles, &ServiceOpts{})
325325

326326
grpcClient, close := grpcClientForTesting(ctx, t, func(srv *grpc.Server) {
327327
stacks.RegisterStacksServer(srv, stacksServer)
@@ -391,8 +391,8 @@ func TestStacksPlanStackChanges(t *testing.T) {
391391
t.Fatal(err)
392392
}
393393

394-
handles := newHandleTable()
395-
stacksServer := newStacksServer(newStopper(), handles, &serviceOpts{})
394+
handles := NewHandleTable()
395+
stacksServer := NewStacksServer(NewStopper(), handles, &ServiceOpts{})
396396
stacksServer.planTimestampOverride = &fakePlanTimestamp
397397

398398
fakeSourceBundle := &sourcebundle.Bundle{}
@@ -811,8 +811,8 @@ func TestStackChangeProgress(t *testing.T) {
811811
t.Run(name, func(t *testing.T) {
812812
ctx := context.Background()
813813

814-
handles := newHandleTable()
815-
stacksServer := newStacksServer(newStopper(), handles, &serviceOpts{})
814+
handles := NewHandleTable()
815+
stacksServer := NewStacksServer(NewStopper(), handles, &ServiceOpts{})
816816

817817
// For this test, we do actually want to use a "real" provider. We'll
818818
// use the providerCacheOverride to side-load the testing provider.

internal/stacksplugin/stacksplugin1/grpc_client.go renamed to internal/rpcapi/stackspluginclient/grpc_client.go

+26-23
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright (c) HashiCorp, Inc.
22
// SPDX-License-Identifier: BUSL-1.1
33

4-
package stacksplugin1
4+
package stackspluginclient
55

66
import (
77
"context"
@@ -11,21 +11,22 @@ import (
1111

1212
"github.com/hashicorp/go-plugin"
1313
"github.com/hashicorp/terraform-svchost/disco"
14+
"github.com/hashicorp/terraform/internal/rpcapi"
15+
"github.com/hashicorp/terraform/internal/rpcapi/dynrpcserver"
16+
"github.com/hashicorp/terraform/internal/rpcapi/terraform1/dependencies"
17+
"github.com/hashicorp/terraform/internal/rpcapi/terraform1/packages"
18+
"github.com/hashicorp/terraform/internal/rpcapi/terraform1/stacks"
1419
"github.com/hashicorp/terraform/internal/stacksplugin"
15-
"github.com/hashicorp/terraform/internal/stacksplugin/dynrpcserver"
1620
"github.com/hashicorp/terraform/internal/stacksplugin/stacksproto1"
17-
dep "github.com/hashicorp/terraform/internal/stacksplugin/stacksproto1/dependencies"
18-
pack "github.com/hashicorp/terraform/internal/stacksplugin/stacksproto1/packages"
19-
stack "github.com/hashicorp/terraform/internal/stacksplugin/stacksproto1/stacks"
2021
"google.golang.org/grpc"
2122
)
2223

2324
// GRPCCloudClient is the client interface for interacting with terraform-cloudplugin
2425
type GRPCStacksClient struct {
25-
client stacksproto1.CommandServiceClient
26-
broker *plugin.GRPCBroker
27-
services *disco.Disco
28-
context context.Context
26+
Client stacksproto1.CommandServiceClient
27+
Broker *plugin.GRPCBroker
28+
Services *disco.Disco
29+
Context context.Context
2930
}
3031

3132
// Proof that GRPCStacksClient fulfills the go-plugin interface
@@ -34,7 +35,7 @@ var _ stacksplugin.Stacks1 = GRPCStacksClient{}
3435
// Execute sends the client Execute request and waits for the plugin to return
3536
// an exit code response before returning
3637
func (c GRPCStacksClient) Execute(args []string, stdout, stderr io.Writer) int {
37-
handles := newHandleTable()
38+
handles := rpcapi.NewHandleTable()
3839

3940
dependenciesServer := dynrpcserver.NewDependenciesStub()
4041
packagesServer := dynrpcserver.NewPackagesStub()
@@ -43,37 +44,39 @@ func (c GRPCStacksClient) Execute(args []string, stdout, stderr io.Writer) int {
4344
var s *grpc.Server
4445
dependenciesServerFunc := func(opts []grpc.ServerOption) *grpc.Server {
4546
s = grpc.NewServer(opts...)
46-
dep.RegisterDependenciesServer(s, dependenciesServer)
47-
dependenciesServer.ActivateRPCServer(newDependenciesServer(handles, c.services))
47+
dependencies.RegisterDependenciesServer(s, dependenciesServer)
48+
dependenciesServer.ActivateRPCServer(rpcapi.NewDependenciesServer(handles, c.Services))
4849

4950
return s
5051
}
5152

52-
dependenciesBrokerID := c.broker.NextId()
53-
go c.broker.AcceptAndServe(dependenciesBrokerID, dependenciesServerFunc)
53+
dependenciesBrokerID := c.Broker.NextId()
54+
go c.Broker.AcceptAndServe(dependenciesBrokerID, dependenciesServerFunc)
5455

5556
packagesServerFunc := func(opts []grpc.ServerOption) *grpc.Server {
5657
s = grpc.NewServer(opts...)
57-
pack.RegisterPackagesServer(s, packagesServer)
58-
packagesServer.ActivateRPCServer(newPackagesServer(c.services))
58+
packages.RegisterPackagesServer(s, packagesServer)
59+
packagesServer.ActivateRPCServer(rpcapi.NewPackagesServer(c.Services))
5960

6061
return s
6162
}
6263

63-
packagesBrokerID := c.broker.NextId()
64-
go c.broker.AcceptAndServe(packagesBrokerID, packagesServerFunc)
64+
packagesBrokerID := c.Broker.NextId()
65+
go c.Broker.AcceptAndServe(packagesBrokerID, packagesServerFunc)
6566

6667
stacksServerFunc := func(opts []grpc.ServerOption) *grpc.Server {
6768
s = grpc.NewServer(opts...)
68-
stack.RegisterStacksServer(s, stacksServer)
69-
stacksServer.ActivateRPCServer(newStacksServer(newStopper(), handles))
69+
stacks.RegisterStacksServer(s, stacksServer)
70+
stacksServer.ActivateRPCServer(rpcapi.NewStacksServer(rpcapi.NewStopper(), handles, &rpcapi.ServiceOpts{
71+
ExperimentsAllowed: true,
72+
}))
7073
return s
7174
}
7275

73-
stacksBrokerID := c.broker.NextId()
74-
go c.broker.AcceptAndServe(stacksBrokerID, stacksServerFunc)
76+
stacksBrokerID := c.Broker.NextId()
77+
go c.Broker.AcceptAndServe(stacksBrokerID, stacksServerFunc)
7578

76-
client, err := c.client.Execute(c.context, &stacksproto1.CommandRequest{
79+
client, err := c.Client.Execute(c.Context, &stacksproto1.CommandRequest{
7780
DependenciesServer: dependenciesBrokerID,
7881
PackagesServer: packagesBrokerID,
7982
StacksServer: stacksBrokerID,

internal/rpcapi/stopper.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ type stopper struct {
2323
mu sync.Mutex
2424
}
2525

26-
func newStopper() *stopper {
26+
func NewStopper() *stopper {
2727
return &stopper{
2828
stops: make(map[stopChan]struct{}),
2929
}

internal/stacks/stackplan/planned_change.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ import (
2121
"github.com/hashicorp/terraform/internal/plans/planfile"
2222
"github.com/hashicorp/terraform/internal/plans/planproto"
2323
"github.com/hashicorp/terraform/internal/providers"
24+
"github.com/hashicorp/terraform/internal/rpcapi/terraform1/stacks"
2425
"github.com/hashicorp/terraform/internal/stacks/stackaddrs"
2526
"github.com/hashicorp/terraform/internal/stacks/stackutils"
2627
"github.com/hashicorp/terraform/internal/stacks/tfstackdata1"
27-
"github.com/hashicorp/terraform/internal/stacksplugin/stacksproto1/stacks"
2828
"github.com/hashicorp/terraform/internal/states"
2929
)
3030

internal/stacks/stackruntime/hooks/component_instance.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ package hooks
55

66
import (
77
"github.com/hashicorp/terraform/internal/plans"
8+
"github.com/hashicorp/terraform/internal/rpcapi/terraform1/stacks"
89
"github.com/hashicorp/terraform/internal/stacks/stackaddrs"
9-
"github.com/hashicorp/terraform/internal/stacksplugin/stacksproto1/stacks"
1010
)
1111

1212
// ComponentInstanceStatus is a UI-focused description of the overall status

0 commit comments

Comments
 (0)