Plugin: Accept backend plugin process command args (#76037)

accept args
This commit is contained in:
Will Browne 2023-10-05 15:15:57 +02:00 committed by GitHub
parent 68c25080e6
commit 8a33a6f958
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 9 deletions

View File

@ -27,11 +27,11 @@ var handshake = goplugin.HandshakeConfig{
MagicCookieValue: grpcplugin.MagicCookieValue, MagicCookieValue: grpcplugin.MagicCookieValue,
} }
func newClientConfig(executablePath string, env []string, logger log.Logger, func newClientConfig(executablePath string, args []string, env []string, logger log.Logger,
versionedPlugins map[int]goplugin.PluginSet) *goplugin.ClientConfig { versionedPlugins map[int]goplugin.PluginSet) *goplugin.ClientConfig {
// We can ignore gosec G201 here, since the dynamic part of executablePath comes from the plugin definition // We can ignore gosec G201 here, since the dynamic part of executablePath comes from the plugin definition
// nolint:gosec // nolint:gosec
cmd := exec.Command(executablePath) cmd := exec.Command(executablePath, args...)
cmd.Env = env cmd.Env = env
return &goplugin.ClientConfig{ return &goplugin.ClientConfig{
@ -63,6 +63,7 @@ type StartSecretsManagerFunc func(pluginID string, secretsmanager secretsmanager
type PluginDescriptor struct { type PluginDescriptor struct {
pluginID string pluginID string
executablePath string executablePath string
executableArgs []string
managed bool managed bool
versionedPlugins map[int]goplugin.PluginSet versionedPlugins map[int]goplugin.PluginSet
startRendererFn StartRendererFunc startRendererFn StartRendererFunc
@ -82,20 +83,21 @@ func getV2PluginSet() goplugin.PluginSet {
} }
// NewBackendPlugin creates a new backend plugin factory used for registering a backend plugin. // NewBackendPlugin creates a new backend plugin factory used for registering a backend plugin.
func NewBackendPlugin(pluginID, executablePath string) backendplugin.PluginFactoryFunc { func NewBackendPlugin(pluginID, executablePath string, executableArgs ...string) backendplugin.PluginFactoryFunc {
return newBackendPlugin(pluginID, executablePath, true) return newBackendPlugin(pluginID, executablePath, true, executableArgs...)
} }
// NewUnmanagedBackendPlugin creates a new backend plugin factory used for registering an unmanaged backend plugin. // NewUnmanagedBackendPlugin creates a new backend plugin factory used for registering an unmanaged backend plugin.
func NewUnmanagedBackendPlugin(pluginID, executablePath string) backendplugin.PluginFactoryFunc { func NewUnmanagedBackendPlugin(pluginID, executablePath string, executableArgs ...string) backendplugin.PluginFactoryFunc {
return newBackendPlugin(pluginID, executablePath, false) return newBackendPlugin(pluginID, executablePath, false, executableArgs...)
} }
// NewBackendPlugin creates a new backend plugin factory used for registering a backend plugin. // NewBackendPlugin creates a new backend plugin factory used for registering a backend plugin.
func newBackendPlugin(pluginID, executablePath string, managed bool) backendplugin.PluginFactoryFunc { func newBackendPlugin(pluginID, executablePath string, managed bool, executableArgs ...string) backendplugin.PluginFactoryFunc {
return newPlugin(PluginDescriptor{ return newPlugin(PluginDescriptor{
pluginID: pluginID, pluginID: pluginID,
executablePath: executablePath, executablePath: executablePath,
executableArgs: executableArgs,
managed: managed, managed: managed,
versionedPlugins: map[int]goplugin.PluginSet{ versionedPlugins: map[int]goplugin.PluginSet{
grpcplugin.ProtocolVersion: getV2PluginSet(), grpcplugin.ProtocolVersion: getV2PluginSet(),
@ -116,7 +118,7 @@ func NewRendererPlugin(pluginID, executablePath string, startFn StartRendererFun
}) })
} }
// NewSecetsManagerPlugin creates a new secrets manager plugin factory used for registering a backend secrets manager plugin. // NewSecretsManagerPlugin creates a new secrets manager plugin factory used for registering a backend secrets manager plugin.
func NewSecretsManagerPlugin(pluginID, executablePath string, startFn StartSecretsManagerFunc) backendplugin.PluginFactoryFunc { func NewSecretsManagerPlugin(pluginID, executablePath string, startFn StartSecretsManagerFunc) backendplugin.PluginFactoryFunc {
return newPlugin(PluginDescriptor{ return newPlugin(PluginDescriptor{
pluginID: pluginID, pluginID: pluginID,

View File

@ -39,7 +39,7 @@ func newPlugin(descriptor PluginDescriptor) backendplugin.PluginFactoryFunc {
descriptor: descriptor, descriptor: descriptor,
logger: logger, logger: logger,
clientFactory: func() *plugin.Client { clientFactory: func() *plugin.Client {
return plugin.NewClient(newClientConfig(descriptor.executablePath, env(), logger, descriptor.versionedPlugins)) return plugin.NewClient(newClientConfig(descriptor.executablePath, descriptor.executableArgs, env(), logger, descriptor.versionedPlugins))
}, },
}, nil }, nil
} }