in internal/execution/handler.go [32:70]
func NewExecHandler() SynthesizerHandle {
return func(ctx context.Context, s *apiv1.Synthesizer, rl *krmv1.ResourceList) (*krmv1.ResourceList, error) {
stdin := &bytes.Buffer{}
stdout := &bytes.Buffer{}
err := json.NewEncoder(stdin).Encode(rl)
if err != nil {
return nil, err
}
command := s.Spec.Command
if len(command) == 0 {
command = []string{"synthesize"}
}
if s.Spec.ExecTimeout != nil {
var cancel context.CancelFunc
ctx, cancel = context.WithTimeout(ctx, s.Spec.ExecTimeout.Duration)
defer cancel()
}
cmd := exec.CommandContext(ctx, command[0], command[1:]...)
cmd.Stdin = stdin
cmd.Stderr = os.Stdout // logger uses stderr, so use stdout to avoid race condition
cmd.Stdout = stdout
err = cmd.Run()
if err != nil {
return nil, err
}
output := &krmv1.ResourceList{}
err = json.NewDecoder(stdout).Decode(output)
if err != nil {
return nil, err
}
return output, nil
}
}