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