mirror of https://github.com/knative/func.git
				
				
				
			
		
			
				
	
	
		
			67 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
| package docker
 | |
| 
 | |
| import (
 | |
| 	"errors"
 | |
| 	"fmt"
 | |
| 	"os"
 | |
| 	"os/exec"
 | |
| 
 | |
| 	"github.com/boson-project/faas"
 | |
| )
 | |
| 
 | |
| // Runner of functions using the docker command.
 | |
| type Runner struct {
 | |
| 	// Verbose logging flag.
 | |
| 	Verbose bool
 | |
| }
 | |
| 
 | |
| // NewRunner creates an instance of a docker-backed runner.
 | |
| func NewRunner() *Runner {
 | |
| 	return &Runner{}
 | |
| }
 | |
| 
 | |
| // Run the function at path
 | |
| func (n *Runner) Run(f faas.Function) error {
 | |
| 	// Check for the docker binary explicitly so that we can return
 | |
| 	// an extra-friendly error message.
 | |
| 	_, err := exec.LookPath("docker")
 | |
| 	if err != nil {
 | |
| 		return errors.New("please install 'docker'")
 | |
| 	}
 | |
| 
 | |
| 	if f.Image == "" {
 | |
| 		return errors.New("Function has no associated image.  Has it been built?")
 | |
| 	}
 | |
| 
 | |
| 	// Extra arguments to docker
 | |
| 	args := []string{"run", "--rm", "-t", "-p=8080:8080"}
 | |
| 
 | |
| 	// If verbosity is enabled, pass along as an environment variable to the Function.
 | |
| 	if n.Verbose {
 | |
| 		args = append(args, []string{"-e VERBOSE=true"}...)
 | |
| 	}
 | |
| 	args = append(args, f.Image)
 | |
| 
 | |
| 	// Set up the command with extra arguments and to run rooted at path
 | |
| 	cmd := exec.Command("docker", args...)
 | |
| 	cmd.Dir = f.Root
 | |
| 
 | |
| 	// If verbose logging is enabled, echo command
 | |
| 	if n.Verbose {
 | |
| 		fmt.Println(cmd)
 | |
| 	}
 | |
| 
 | |
| 	// We need to show the user all output, so a method to squelch
 | |
| 	// docker's chattiness is not immediately apparent.
 | |
| 	cmd.Stdout = os.Stdout
 | |
| 	cmd.Stderr = os.Stderr
 | |
| 
 | |
| 	// Run the command, echoing captured stderr as well ass the cmd internal error.
 | |
| 	// Will run until explicitly canceled.
 | |
| 	// TODO: this runner is current stubbed pending an architectural discussion
 | |
| 	// on how closely we would like to emulate the previous funcitonality, and
 | |
| 	// if we can use Grid as a localhost integraiton events fabric.
 | |
| 	fmt.Println(cmd)
 | |
| 	return cmd.Run()
 | |
| }
 |