This repository was archived by the owner on Jul 7, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathdriver.go
More file actions
62 lines (48 loc) · 1.25 KB
/
driver.go
File metadata and controls
62 lines (48 loc) · 1.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package main
import (
"bytes"
"fmt"
"os/exec"
"regexp"
"github.com/mitchellh/packer/builder/docker"
)
type Driver interface {
docker.Driver
BuildImage(*bytes.Buffer) (string, error)
}
type DockerDriver struct {
*docker.DockerDriver
}
// Build an image from a compiled Dockerfile
// Return the ID for the new image
func (d *DockerDriver) BuildImage(df *bytes.Buffer) (string, error) {
var stdout bytes.Buffer
var stderr bytes.Buffer
c := exec.Command("docker", "build", "--force-rm=true", "--no-cache=true", "--quiet=true", "-")
c.Stdin = df
c.Stdout = &stdout
c.Stderr = &stderr
if err := c.Start(); err != nil {
return "", err
}
if err := c.Wait(); err != nil {
err = fmt.Errorf("Error building image: %s\nStderr: %s", err, stderr.String())
return "", err
}
var m []string
var p *regexp.Regexp
// Try matching 1.10 output
p = regexp.MustCompile("sha256:([a-f0-9]+)")
m = p.FindStringSubmatch(stdout.String())
// if that doesn't work, try the old output format
if m == nil {
p = regexp.MustCompile("Successfully built ([a-f0-9]+)")
m = p.FindStringSubmatch(stdout.String())
if m == nil {
err := fmt.Errorf("Error parsing `docker build` output: %s", stdout.String())
return "", err
}
}
id := m[len(m)-1]
return id, nil
}