63 lines
1.5 KiB
Go
63 lines
1.5 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
package runner
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/hashicorp/vagrant/internal/core"
|
|
"github.com/hashicorp/vagrant/internal/server/proto/vagrant_server"
|
|
"google.golang.org/genproto/googleapis/rpc/status"
|
|
"google.golang.org/grpc/codes"
|
|
)
|
|
|
|
type Runs interface {
|
|
Run(context.Context, *vagrant_server.Job_CommandOp) error
|
|
}
|
|
|
|
// Keeping this around as an example
|
|
func (r *Runner) executeRunOp(
|
|
ctx context.Context,
|
|
job *vagrant_server.Job,
|
|
scope Runs,
|
|
) (result *vagrant_server.Job_Result, err error) {
|
|
r.logger.Debug("starting execution of run operation", "scope", scope, "job", job)
|
|
|
|
op, ok := job.Operation.(*vagrant_server.Job_Command) //op
|
|
if !ok {
|
|
// this shouldn't happen since the call to this function is gated
|
|
// on the above type match.
|
|
panic("operation not expected type")
|
|
}
|
|
|
|
var jrr vagrant_server.Job_CommandResult
|
|
|
|
err = scope.Run(ctx, op.Command)
|
|
|
|
r.logger.Debug("execution of run operation complete", "job", job, "error", err)
|
|
|
|
jrr.RunResult = err == nil
|
|
if err != nil {
|
|
if cmdErr, ok := err.(core.CommandError); ok {
|
|
jrr.RunError = err.(core.CommandError).Status()
|
|
jrr.ExitCode = int32(cmdErr.ExitCode())
|
|
} else {
|
|
// If we have an error without a status we'll make one here
|
|
jrr.RunError = &status.Status{
|
|
Code: int32(codes.Unknown),
|
|
Message: fmt.Sprintf("Unexpected error from run operation: %s", err),
|
|
}
|
|
jrr.ExitCode = 1
|
|
}
|
|
|
|
}
|
|
|
|
r.logger.Info("run operation is complete!")
|
|
|
|
return &vagrant_server.Job_Result{
|
|
Run: &jrr,
|
|
}, nil
|
|
}
|