docker-import: finish up Dockerfile provisioning, Add TODO for next section #774

This commit is contained in:
Matthew McKeen 2014-01-06 15:12:08 -08:00
parent 208b330b84
commit 00d3ee42e5
1 changed files with 69 additions and 30 deletions

View File

@ -67,6 +67,8 @@ func (p *PostProcessor) PostProcess(ui packer.Ui, artifact packer.Artifact) (pac
id := artifact.Id() id := artifact.Id()
ui.Say("Importing image: " + id) ui.Say("Importing image: " + id)
// TODO Set artifact ID so that docker-push can use it
if p.config.Tag == "" { if p.config.Tag == "" {
cmd := exec.Command("docker", cmd := exec.Command("docker",
@ -142,7 +144,9 @@ func (p *PostProcessor) PostProcess(ui packer.Ui, artifact packer.Artifact) (pac
// Process Dockerfile if provided // Process Dockerfile if provided
if p.config.Dockerfile != "" { if p.config.Dockerfile != "" {
cmd := exec.Command("docker", "build", id) if p.config.Tag != "" {
cmd := exec.Command("docker", "build", "-t="+p.config.Repository+":"+p.config.Tag, "-")
stdin, err := cmd.StdinPipe() stdin, err := cmd.StdinPipe()
@ -158,6 +162,8 @@ func (p *PostProcessor) PostProcess(ui packer.Ui, artifact packer.Artifact) (pac
return nil, false, err return nil, false, err
} }
ui.Say(id)
defer file.Close() defer file.Close()
if err := cmd.Start(); err != nil { if err := cmd.Start(); err != nil {
@ -173,8 +179,41 @@ func (p *PostProcessor) PostProcess(ui packer.Ui, artifact packer.Artifact) (pac
cmd.Wait() cmd.Wait()
// TODO make sure we re-tag instead of create new image } else {
// automatically use previous image as base of new image
cmd := exec.Command("docker", "build", "-t="+p.config.Repository, "-")
stdin, err := cmd.StdinPipe()
if err != nil {
return nil, false, err
}
// open Dockerfile
file, err := os.Open(p.config.Dockerfile)
if err != nil {
ui.Say("Could not open Dockerfile: " + p.config.Dockerfile)
return nil, false, err
}
ui.Say(id)
defer file.Close()
if err := cmd.Start(); err != nil {
ui.Say("Failed to build image: " + id)
return nil, false, err
}
go func() {
io.Copy(stdin, file)
// close stdin so that program will exit
stdin.Close()
}()
cmd.Wait()
}
} }
return nil, false, nil return nil, false, nil