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  }