diff --git a/plugin/discovery/meta.go b/plugin/discovery/meta.go index d93296cfc6..0c3a1ff4af 100644 --- a/plugin/discovery/meta.go +++ b/plugin/discovery/meta.go @@ -4,8 +4,11 @@ import ( "crypto/sha256" "io" "os" + "os/exec" "github.com/blang/semver" + plugin "github.com/hashicorp/go-plugin" + tfplugin "github.com/hashicorp/terraform/plugin" ) // PluginMeta is metadata about a plugin, useful for launching the plugin @@ -48,3 +51,19 @@ func (m PluginMeta) SHA256() ([]byte, error) { return h.Sum(nil), nil } + +// ClientConfig returns a configuration object that can be used to instantiate +// a client for the referenced plugin. +func (m PluginMeta) ClientConfig() *plugin.ClientConfig { + return &plugin.ClientConfig{ + Cmd: exec.Command(m.Path), + HandshakeConfig: tfplugin.Handshake, + Managed: true, + Plugins: tfplugin.PluginMap, + } +} + +// Client returns a plugin client for the referenced plugin. +func (m PluginMeta) Client() *plugin.Client { + return plugin.NewClient(m.ClientConfig()) +}