Skip to content

Commit e85fb74

Browse files
committed
WIP
1 parent dd2769f commit e85fb74

File tree

8 files changed

+116
-47
lines changed

8 files changed

+116
-47
lines changed

internal/command/stacks.go

-6
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,6 @@ var (
6868
StacksPluginDataDir = "stacksplugin"
6969
)
7070

71-
//type dependencies struct{}
72-
73-
//type packages struct{}
74-
75-
//type stacks struct{}
76-
7771
func (c *StacksCommand) realRun(args []string, stdout, stderr io.Writer) int {
7872
args = c.Meta.process(args)
7973

internal/stacksplugin/interface.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -132,5 +132,5 @@ type Stacks interface {
132132
// Stacks1 interface for Terraform plugin operations
133133
type Stacks1 interface {
134134
// Execute runs a command with the provided arguments and returns the exit code
135-
Execute(args []string, stdout, stderr io.Writer, dependencies Dependencies, packages Packages, stacks Stacks) int
135+
Execute(args []string, stdout, stderr io.Writer) int
136136
}

internal/stacksplugin/stacksplugin1/dependencies.go

+2
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ type dependenciesServer struct {
3838
services *disco.Disco
3939
}
4040

41+
//var _ stacksplugin.Dependencies = (*dependenciesServer)(nil) // Ensure dependenciesServer implements stacksplugin.Dependencies
42+
4143
func newDependenciesServer(handles *handleTable, services *disco.Disco) *dependenciesServer {
4244
return &dependenciesServer{
4345
handles: handles,

internal/stacksplugin/stacksplugin1/grpc_client.go

+44-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@ import (
1111

1212
"github.com/hashicorp/go-plugin"
1313
"github.com/hashicorp/terraform/internal/stacksplugin"
14+
"github.com/hashicorp/terraform/internal/stacksplugin/dynrpcserver"
1415
"github.com/hashicorp/terraform/internal/stacksplugin/stacksproto1"
16+
dep "github.com/hashicorp/terraform/internal/stacksplugin/stacksproto1/dependencies"
17+
pack "github.com/hashicorp/terraform/internal/stacksplugin/stacksproto1/packages"
18+
stack "github.com/hashicorp/terraform/internal/stacksplugin/stacksproto1/stacks"
19+
"google.golang.org/grpc"
1520
)
1621

1722
// GRPCCloudClient is the client interface for interacting with terraform-cloudplugin
@@ -27,8 +32,46 @@ var _ stacksplugin.Stacks1 = GRPCStacksClient{}
2732
// Execute sends the client Execute request and waits for the plugin to return
2833
// an exit code response before returning
2934
func (c GRPCStacksClient) Execute(args []string, stdout, stderr io.Writer) int {
35+
dependenciesServer := dynrpcserver.NewDependenciesStub()
36+
packagesServer := dynrpcserver.NewPackagesStub()
37+
stacksServer := dynrpcserver.NewStacksStub()
38+
39+
var s *grpc.Server
40+
dependenciesServerFunc := func(opts []grpc.ServerOption) *grpc.Server {
41+
s = grpc.NewServer(opts...)
42+
dep.RegisterDependenciesServer(s, dependenciesServer)
43+
44+
return s
45+
}
46+
47+
dependenciesBrokerID := c.broker.NextId()
48+
go c.broker.AcceptAndServe(dependenciesBrokerID, dependenciesServerFunc)
49+
50+
packagesServerFunc := func(opts []grpc.ServerOption) *grpc.Server {
51+
s = grpc.NewServer(opts...)
52+
pack.RegisterPackagesServer(s, packagesServer)
53+
54+
return s
55+
}
56+
57+
packagesBrokerID := c.broker.NextId()
58+
go c.broker.AcceptAndServe(packagesBrokerID, packagesServerFunc)
59+
60+
stacksServerFunc := func(opts []grpc.ServerOption) *grpc.Server {
61+
s = grpc.NewServer(opts...)
62+
stack.RegisterStacksServer(s, stacksServer)
63+
64+
return s
65+
}
66+
67+
stacksBrokerID := c.broker.NextId()
68+
go c.broker.AcceptAndServe(stacksBrokerID, stacksServerFunc)
69+
3070
client, err := c.client.Execute(c.context, &stacksproto1.CommandRequest{
31-
Args: args,
71+
DependenciesServer: dependenciesBrokerID,
72+
PackagesServer: packagesBrokerID,
73+
StacksServer: stacksBrokerID,
74+
Args: args,
3275
})
3376

3477
if err != nil {

internal/stacksplugin/stacksplugin1/grpc_plugin.go

+22-23
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,11 @@ package stacksplugin1
66
import (
77
"context"
88
"errors"
9-
"fmt"
109
"net/rpc"
1110

1211
"github.com/hashicorp/go-plugin"
13-
svchost "github.com/hashicorp/terraform-svchost"
14-
"github.com/hashicorp/terraform-svchost/auth"
15-
"github.com/hashicorp/terraform-svchost/disco"
16-
"github.com/hashicorp/terraform/internal/command/cliconfig"
17-
pluginDiscovery "github.com/hashicorp/terraform/internal/plugin/discovery"
18-
"github.com/hashicorp/terraform/internal/stacksplugin/dynrpcserver"
12+
"github.com/hashicorp/terraform/internal/stacksplugin"
1913
"github.com/hashicorp/terraform/internal/stacksplugin/stacksproto1"
20-
"github.com/hashicorp/terraform/internal/stacksplugin/stacksproto1/dependencies"
21-
"github.com/hashicorp/terraform/internal/stacksplugin/stacksproto1/packages"
22-
"github.com/hashicorp/terraform/internal/stacksplugin/stacksproto1/setup"
23-
"github.com/hashicorp/terraform/internal/stacksplugin/stacksproto1/stacks"
2414
"google.golang.org/grpc"
2515
"google.golang.org/grpc/metadata"
2616
)
@@ -30,6 +20,14 @@ import (
3020
type GRPCStacksPlugin struct {
3121
plugin.GRPCPlugin
3222
Metadata metadata.MD
23+
Impl stacksplugin.Stacks1
24+
}
25+
26+
type GRPCStacksServer struct {
27+
// This is the real implementation
28+
Impl stacksplugin.Stacks1
29+
30+
broker *plugin.GRPCBroker
3331
}
3432

3533
// Server always returns an error; we're only implementing the GRPCPlugin
@@ -49,34 +47,34 @@ func (p *GRPCStacksPlugin) GRPCClient(ctx context.Context, broker *plugin.GRPCBr
4947
ctx = metadata.NewOutgoingContext(ctx, p.Metadata)
5048
return &GRPCStacksClient{
5149
client: stacksproto1.NewCommandServiceClient(c),
50+
broker: broker,
5251
context: ctx,
5352
}, nil
5453
}
5554

5655
// GRPCServer always returns an error; we're only implementing the client
5756
// interface, not the server.
5857
func (p *GRPCStacksPlugin) GRPCServer(broker *plugin.GRPCBroker, s *grpc.Server) error {
59-
58+
/**
59+
stacksproto1.RegisterCommandServiceServer(s, &GRPCStacksServer{
60+
Impl: p.Impl,
61+
broker: broker,
62+
})
63+
return nil
64+
*/
6065
return nil
6166
}
6267

63-
func SetupStacksPluginServices() (dependenciesServer, stacksServer, packagesServer) {
64-
handles := newHandleTable()
65-
dependenciesServer := newDependenciesServer(handles)
66-
packagesServer := newPackagesServer(handles)
67-
stacksServer := newStacksServer(handles)
68-
return dependenciesServer, stacksServer, packagesServer
69-
}
70-
71-
func registerGRPCServices(s *grpc.Server, opts *serviceOpts) {
68+
/**
69+
func registerGRPCServices(s *grpc.Server) {
7270
// We initially only register the setup server, because the registration
7371
// of other services can vary depending on the capabilities negotiated
7472
// during handshake.
75-
server := newSetupServer(serverHandshake(s, opts))
73+
server := newSetupServer(serverHandshake(s))
7674
setup.RegisterSetupServer(s, server)
7775
}
7876
79-
func serverHandshake(s *grpc.Server, opts *serviceOpts) func(context.Context, *setup.Handshake_Request, *stopper) (*setup.ServerCapabilities, error) {
77+
func serverHandshake(s *grpc.Server) func(context.Context, *setup.Handshake_Request, *stopper) (*setup.ServerCapabilities, error) {
8078
dependenciesStub := dynrpcserver.NewDependenciesStub()
8179
dependencies.RegisterDependenciesServer(s, dependenciesStub)
8280
stacksStub := dynrpcserver.NewStacksStub()
@@ -159,3 +157,4 @@ func newServiceDisco(config *setup.Config) (*disco.Disco, error) {
159157
160158
return services, nil
161159
}
160+
**/

internal/stacksplugin/stacksplugin1/setup.go

+5-9
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,12 @@ type setupServer struct {
3131
mu sync.Mutex
3232
}
3333

34-
/**
35-
36-
func SetupStacksPluginServices() (dependenciesServer, stacksServer, packagesServer) {
37-
handles := newHandleTable()
38-
dependenciesServer := newDependenciesServer(handles)
39-
packagesServer := newPackagesServer(handles)
40-
stacksServer := newStacksServer(handles)
41-
return dependenciesServer, stacksServer, packagesServer
34+
func newSetupServer(initOthers func(context.Context, *setup.Handshake_Request, *stopper) (*setup.ServerCapabilities, error)) setup.SetupServer {
35+
return &setupServer{
36+
initOthers: initOthers,
37+
stopper: newStopper(),
38+
}
4239
}
43-
*/
4440

4541
func (s *setupServer) Handshake(ctx context.Context, req *setup.Handshake_Request) (*setup.Handshake_Response, error) {
4642
s.mu.Lock()

internal/stacksplugin/stacksproto1/stacksproto1.pb.go

+39-7
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/stacksplugin/stacksproto1/stacksproto1.proto

+3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ option go_package = "github.com/hashicorp/terraform/internal/stacksplugin/stacks
1010
// provided flags. It is the raw args from the HCP Terraform command.
1111
message CommandRequest {
1212
repeated string args = 1;
13+
uint32 dependencies_server = 2;
14+
uint32 packages_server = 3;
15+
uint32 stacks_server = 4;
1316
}
1417

1518
// CommandResponse contains the result of the command execution, including any

0 commit comments

Comments
 (0)