in internal/config/plugin/client.go [69:134]
func registerFromClientBinary(
ctx context.Context,
reg config.ProviderRegistry,
settings ClientBinarySettings,
) (func(), error) {
var stop func()
errOut := func(err error) (func(), error) {
if stop != nil {
stop()
}
return func() {}, err
}
if err := settings.validate(); err != nil {
return errOut(err)
}
// TODO: move to ui package
logger := hclog.New(&hclog.LoggerOptions{
Name: "k6ctl",
Level: hclog.Error,
Output: io.Discard,
})
pluginClient := plugin.NewClient(
&plugin.ClientConfig{
// TODO: move to ui package
// Stderr: os.Stderr,
HandshakeConfig: handshakeConfig,
Plugins: map[string]plugin.Plugin{
pluginName: &Plugin{},
},
// TODO: validate command for security concern
Cmd: exec.CommandContext(ctx, settings.Path), // #nosec G204 - expected usage
AllowedProtocols: []plugin.Protocol{plugin.ProtocolNetRPC},
Logger: logger,
},
)
cc, err := pluginClient.Client()
if err != nil {
return errOut(err)
}
stop = func() {
pluginClient.Kill()
}
raw, err := cc.Dispense(pluginName)
if err != nil {
return errOut(err)
}
p := raw.(Interface)
supportedProviderNames, err := p.GetNames()
if err != nil {
return errOut(err)
}
for _, name := range supportedProviderNames {
reg.Register(remoteNamespacedConfigProvider(settings.Namespace, name, p))
}
return stop, nil
}