mirror of https://github.com/docker/docs.git
				
				
				
			
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
| package runconfig
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 
 | |
| 	"github.com/docker/docker/engine"
 | |
| 	flag "github.com/docker/docker/pkg/mflag"
 | |
| 	"github.com/docker/docker/utils"
 | |
| )
 | |
| 
 | |
| type ExecConfig struct {
 | |
| 	User         string
 | |
| 	Privileged   bool
 | |
| 	Tty          bool
 | |
| 	Container    string
 | |
| 	AttachStdin  bool
 | |
| 	AttachStderr bool
 | |
| 	AttachStdout bool
 | |
| 	Detach       bool
 | |
| 	Cmd          []string
 | |
| }
 | |
| 
 | |
| func ExecConfigFromJob(job *engine.Job) (*ExecConfig, error) {
 | |
| 	execConfig := &ExecConfig{
 | |
| 		// TODO(vishh): Expose 'User' once it is supported.
 | |
| 		//User:         job.Getenv("User"),
 | |
| 		// TODO(vishh): Expose 'Privileged' once it is supported.
 | |
| 		//Privileged:   job.GetenvBool("Privileged"),
 | |
| 		Tty:          job.GetenvBool("Tty"),
 | |
| 		AttachStdin:  job.GetenvBool("AttachStdin"),
 | |
| 		AttachStderr: job.GetenvBool("AttachStderr"),
 | |
| 		AttachStdout: job.GetenvBool("AttachStdout"),
 | |
| 	}
 | |
| 	cmd := job.GetenvList("Cmd")
 | |
| 	if len(cmd) == 0 {
 | |
| 		return nil, fmt.Errorf("No exec command specified")
 | |
| 	}
 | |
| 
 | |
| 	execConfig.Cmd = cmd
 | |
| 
 | |
| 	return execConfig, nil
 | |
| }
 | |
| 
 | |
| func ParseExec(cmd *flag.FlagSet, args []string) (*ExecConfig, error) {
 | |
| 	var (
 | |
| 		flStdin   = cmd.Bool([]string{"i", "-interactive"}, false, "Keep STDIN open even if not attached")
 | |
| 		flTty     = cmd.Bool([]string{"t", "-tty"}, false, "Allocate a pseudo-TTY")
 | |
| 		flDetach  = cmd.Bool([]string{"d", "-detach"}, false, "Detached mode: run command in the background")
 | |
| 		execCmd   []string
 | |
| 		container string
 | |
| 	)
 | |
| 	cmd.Require(flag.Min, 2)
 | |
| 	if err := utils.ParseFlags(cmd, args, true); err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 	container = cmd.Arg(0)
 | |
| 	parsedArgs := cmd.Args()
 | |
| 	execCmd = parsedArgs[1:]
 | |
| 
 | |
| 	execConfig := &ExecConfig{
 | |
| 		// TODO(vishh): Expose '-u' flag once it is supported.
 | |
| 		User: "",
 | |
| 		// TODO(vishh): Expose '-p' flag once it is supported.
 | |
| 		Privileged: false,
 | |
| 		Tty:        *flTty,
 | |
| 		Cmd:        execCmd,
 | |
| 		Container:  container,
 | |
| 		Detach:     *flDetach,
 | |
| 	}
 | |
| 
 | |
| 	// If -d is not set, attach to everything by default
 | |
| 	if !*flDetach {
 | |
| 		execConfig.AttachStdout = true
 | |
| 		execConfig.AttachStderr = true
 | |
| 		if *flStdin {
 | |
| 			execConfig.AttachStdin = true
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return execConfig, nil
 | |
| }
 |