in cmd/metadata_script_runner_compat/metadata_script_runner_compat.go [79:123]
func launchScriptRunner(ctx context.Context, mdsClient metadata.MDSClientInterface, event string) error {
var enabled bool
opts := run.Options{
Name: metadataScriptRunnerLegacy,
OutputType: run.OutputStream,
Args: []string{event},
}
mds, err := mdsClient.Get(ctx)
if err != nil {
galog.Warnf("Failed to fetch MDS descriptor: [%v], falling back to legacy script runner", err)
} else {
if enabled = mds.HasCorePluginEnabled(); enabled {
opts.Name = metadataScriptRunnerNew
}
}
if !file.Exists(metadataScriptRunnerLegacy, file.TypeFile) {
galog.Infof("Script runner binary %q not found, running in test environment, overriding to new script runner", metadataScriptRunnerLegacy)
opts.Name = metadataScriptRunnerNew
}
galog.Infof("Enable core plugin set to: [%t], launching script runner for event %q from %q", enabled, event, opts.Name)
res, err := run.WithContext(ctx, opts)
if err != nil {
return fmt.Errorf("failed to run script runner: %v", err)
}
streams := res.OutputScanners
// Go routines will exit once all output is consumed. Run library guarantees
// that all channels are closed after use.
go func() {
for line := range streams.StdOut {
galog.Info(line)
}
}()
go func() {
for line := range streams.StdErr {
galog.Error(line)
}
}()
return <-streams.Result
}