Commit 31ac2652 authored by Mitchell Hashimoto's avatar Mitchell Hashimoto

bulder/docker: canExec as sep function

parent ce275969
...@@ -29,14 +29,6 @@ type Communicator struct { ...@@ -29,14 +29,6 @@ type Communicator struct {
} }
func (c *Communicator) Start(remote *packer.RemoteCmd) error { func (c *Communicator) Start(remote *packer.RemoteCmd) error {
// Determine if we're using docker exec or not
useExec := false
execConstraint, err := version.NewConstraint(">= 1.4.0")
if err != nil {
return err
}
useExec = execConstraint.Check(c.Version)
// Create a temporary file to store the output. Because of a bug in // Create a temporary file to store the output. Because of a bug in
// Docker, sometimes all the output doesn't properly show up. This // Docker, sometimes all the output doesn't properly show up. This
// file will capture ALL of the output, and we'll read that. // file will capture ALL of the output, and we'll read that.
...@@ -52,7 +44,7 @@ func (c *Communicator) Start(remote *packer.RemoteCmd) error { ...@@ -52,7 +44,7 @@ func (c *Communicator) Start(remote *packer.RemoteCmd) error {
exitCodePath := outputFile.Name() + "-exit" exitCodePath := outputFile.Name() + "-exit"
var cmd *exec.Cmd var cmd *exec.Cmd
if useExec { if c.canExec() {
cmd = exec.Command("docker", "exec", "-i", c.ContainerId, "/bin/sh") cmd = exec.Command("docker", "exec", "-i", c.ContainerId, "/bin/sh")
} else { } else {
cmd = exec.Command("docker", "attach", c.ContainerId) cmd = exec.Command("docker", "attach", c.ContainerId)
...@@ -202,6 +194,15 @@ func (c *Communicator) Download(src string, dst io.Writer) error { ...@@ -202,6 +194,15 @@ func (c *Communicator) Download(src string, dst io.Writer) error {
panic("not implemented") panic("not implemented")
} }
// canExec tells us whether `docker exec` is supported
func (c *Communicator) canExec() bool {
execConstraint, err := version.NewConstraint(">= 1.4.0")
if err != nil {
panic(err)
}
return execConstraint.Check(c.Version)
}
// Runs the given command and blocks until completion // Runs the given command and blocks until completion
func (c *Communicator) run(cmd *exec.Cmd, remote *packer.RemoteCmd, stdin_w io.WriteCloser, outputFile *os.File, exitCodePath string) { func (c *Communicator) run(cmd *exec.Cmd, remote *packer.RemoteCmd, stdin_w io.WriteCloser, outputFile *os.File, exitCodePath string) {
// For Docker, remote communication must be serialized since it // For Docker, remote communication must be serialized since it
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment