github.com/stchris/docker@v1.4.2-0.20150106053530-1510a324dbd5/runconfig/exec.go (about) 1 package runconfig 2 3 import ( 4 "fmt" 5 6 "github.com/docker/docker/engine" 7 flag "github.com/docker/docker/pkg/mflag" 8 ) 9 10 type ExecConfig struct { 11 User string 12 Privileged bool 13 Tty bool 14 Container string 15 AttachStdin bool 16 AttachStderr bool 17 AttachStdout bool 18 Detach bool 19 Cmd []string 20 } 21 22 func ExecConfigFromJob(job *engine.Job) (*ExecConfig, error) { 23 execConfig := &ExecConfig{ 24 // TODO(vishh): Expose 'User' once it is supported. 25 //User: job.Getenv("User"), 26 // TODO(vishh): Expose 'Privileged' once it is supported. 27 //Privileged: job.GetenvBool("Privileged"), 28 Tty: job.GetenvBool("Tty"), 29 AttachStdin: job.GetenvBool("AttachStdin"), 30 AttachStderr: job.GetenvBool("AttachStderr"), 31 AttachStdout: job.GetenvBool("AttachStdout"), 32 } 33 cmd := job.GetenvList("Cmd") 34 if len(cmd) == 0 { 35 return nil, fmt.Errorf("No exec command specified") 36 } 37 38 execConfig.Cmd = cmd 39 40 return execConfig, nil 41 } 42 43 func ParseExec(cmd *flag.FlagSet, args []string) (*ExecConfig, error) { 44 var ( 45 flStdin = cmd.Bool([]string{"i", "-interactive"}, false, "Keep STDIN open even if not attached") 46 flTty = cmd.Bool([]string{"t", "-tty"}, false, "Allocate a pseudo-TTY") 47 flDetach = cmd.Bool([]string{"d", "-detach"}, false, "Detached mode: run command in the background") 48 execCmd []string 49 container string 50 ) 51 if err := cmd.Parse(args); err != nil { 52 return nil, err 53 } 54 parsedArgs := cmd.Args() 55 if len(parsedArgs) < 2 { 56 return nil, fmt.Errorf("not enough arguments to create exec command") 57 } 58 container = cmd.Arg(0) 59 execCmd = parsedArgs[1:] 60 61 execConfig := &ExecConfig{ 62 // TODO(vishh): Expose '-u' flag once it is supported. 63 User: "", 64 // TODO(vishh): Expose '-p' flag once it is supported. 65 Privileged: false, 66 Tty: *flTty, 67 Cmd: execCmd, 68 Container: container, 69 Detach: *flDetach, 70 } 71 72 // If -d is not set, attach to everything by default 73 if !*flDetach { 74 execConfig.AttachStdout = true 75 execConfig.AttachStderr = true 76 if *flStdin { 77 execConfig.AttachStdin = true 78 } 79 } 80 81 return execConfig, nil 82 }