Skip to content

Commit 349ceca

Browse files
committed
Seperate loading global and local plugins
1 parent 4c8732b commit 349ceca

File tree

3 files changed

+52
-4
lines changed

3 files changed

+52
-4
lines changed

internal/plugin/manager.go

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"github.com/hashicorp/vagrant-plugin-sdk/internal-shared/cacher"
2323
"github.com/hashicorp/vagrant-plugin-sdk/internal-shared/cleanup"
2424
"github.com/hashicorp/vagrant-plugin-sdk/internal-shared/protomappers"
25+
"github.com/hashicorp/vagrant/internal/server/proto/ruby_vagrant"
2526
"github.com/hashicorp/vagrant/internal/serverclient"
2627
)
2728

@@ -137,7 +138,32 @@ func (m *Manager) LegacyEnabled() bool {
137138

138139
// Load legacy Ruby based Vagrant plugins using a
139140
// running Vagrant runtime
140-
func (m *Manager) LoadLegacyPlugins(
141+
func (m *Manager) LoadLocalLegacyPlugins(
142+
c *serverclient.RubyVagrantClient, // Client connection to the Legacy Ruby Vagrant server
143+
r plugin.ClientProtocol, // go-plugin client connection to Ruby plugin server
144+
path string, // project plugin path
145+
) (err error) {
146+
m.m.Lock()
147+
defer m.m.Unlock()
148+
149+
m.logger.Trace("loading ruby based legacy vagrant plugins")
150+
151+
plugins, err := c.GetLocalPlugins(path)
152+
if err != nil {
153+
m.logger.Trace("failed to fetch ruby based legacy vagrant plugin information",
154+
"error", err,
155+
)
156+
157+
return
158+
}
159+
160+
err = m.RegisterLegacyPlugins(c, r, plugins)
161+
return
162+
}
163+
164+
// Load legacy Ruby based Vagrant plugins using a
165+
// running Vagrant runtime
166+
func (m *Manager) LoadGlobalLegacyPlugins(
141167
c *serverclient.RubyVagrantClient, // Client connection to the Legacy Ruby Vagrant server
142168
r plugin.ClientProtocol, // go-plugin client connection to Ruby plugin server
143169
) (err error) {
@@ -151,15 +177,23 @@ func (m *Manager) LoadLegacyPlugins(
151177

152178
m.logger.Trace("loading ruby based legacy vagrant plugins")
153179

154-
plugins, err := c.GetPlugins()
180+
plugins, err := c.GetGlobalPlugins()
155181
if err != nil {
156182
m.logger.Trace("failed to fetch ruby based legacy vagrant plugin information",
157183
"error", err,
158184
)
159185

160186
return
161187
}
188+
err = m.RegisterLegacyPlugins(c, r, plugins)
189+
return
190+
}
162191

192+
func (m *Manager) RegisterLegacyPlugins(
193+
c *serverclient.RubyVagrantClient,
194+
r plugin.ClientProtocol,
195+
plugins []*ruby_vagrant.Plugin,
196+
) (err error) {
163197
for _, p := range plugins {
164198
m.logger.Info("loading ruby based legacy vagrant plugin",
165199
"name", p.Name,

internal/runner/runner.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ func New(opts ...Option) (*Runner, error) {
125125
return nil, err
126126
}
127127

128-
if err := runner.plugins.LoadLegacyPlugins(
128+
if err := runner.plugins.LoadGlobalLegacyPlugins(
129129
runner.vagrantRubyClient, runner.vagrantRubyRuntime); err != nil {
130130
return nil, err
131131
}
@@ -156,6 +156,12 @@ func New(opts ...Option) (*Runner, error) {
156156
return runner, nil
157157
}
158158

159+
func (r *Runner) LoadLocalProjectPlugins(path string) error {
160+
err := r.plugins.LoadLocalLegacyPlugins(
161+
r.vagrantRubyClient, r.vagrantRubyRuntime, path)
162+
return err
163+
}
164+
159165
// Id returns the runner ID.
160166
func (r *Runner) Id() string {
161167
return r.id

internal/serverclient/ruby_client.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,22 @@ func (r *RubyVagrantClient) GRPCBroker() *plugin.GRPCBroker {
5858
return r.broker
5959
}
6060

61-
func (r *RubyVagrantClient) GetPlugins() ([]*ruby_vagrant.Plugin, error) {
61+
func (r *RubyVagrantClient) GetGlobalPlugins() ([]*ruby_vagrant.Plugin, error) {
6262
plugins, err := r.client.GetGlobalPlugins(context.Background(), &empty.Empty{})
6363
if err != nil {
6464
return nil, err
6565
}
6666
return plugins.Plugins, nil
6767
}
6868

69+
func (r *RubyVagrantClient) GetLocalPlugins(path string) ([]*ruby_vagrant.Plugin, error) {
70+
plugins, err := r.client.GetLocalPlugins(context.Background(), &ruby_vagrant.GetPluginsRequest{ProjectPath: path})
71+
if err != nil {
72+
return nil, err
73+
}
74+
return plugins.Plugins, nil
75+
}
76+
6977
func (r *RubyVagrantClient) ParseVagrantfile(path string) (*vagrant_plugin_sdk.Args_Hash, error) {
7078
vf, err := r.client.ParseVagrantfile(
7179
context.Background(),

0 commit comments

Comments
 (0)