Skip to content

Commit

Permalink
Do some forward porting of the old work of
Browse files Browse the repository at this point in the history
mitchellh/packer's docker branch. hashicorp#774
  • Loading branch information
mmckeen committed Jan 2, 2014
1 parent 07cc1cd commit 8bdb723
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 1 deletion.
3 changes: 2 additions & 1 deletion config.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ const defaultConfig = `
"post-processors": {
"vagrant": "packer-post-processor-vagrant",
"vsphere": "packer-post-processor-vsphere"
"vsphere": "packer-post-processor-vsphere",
"docker": "packer-post-processor-docker"
},
"provisioners": {
Expand Down
15 changes: 15 additions & 0 deletions plugin/post-processor-docker/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package main

import (
"github.com/mitchellh/packer/packer/plugin"
"github.com/mitchellh/packer/post-processor/docker"
)

func main() {
server, err := plugin.Server()
if err != nil {
panic(err)
}
server.RegisterPostProcessor(new(docker.PostProcessor))
server.Serve()
}
1 change: 1 addition & 0 deletions plugin/post-processor-docker/main_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package main
56 changes: 56 additions & 0 deletions post-processor/docker/post-processor.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package docker

import (
"bytes"
"errors"
"github.com/mitchellh/mapstructure"
"github.com/mitchellh/packer/packer"
"os/exec"
)

type Config struct {
Registry string
Username string
Password string
Email string
}

type PostProcessor struct {
config Config
}

func (p *PostProcessor) Configure(raw ...interface{}) error {
if err := mapstructure.Decode(raw, &p.config); err != nil {
return err
}

if p.config.Registry == "" {
p.config.Registry = "registry.docker.io"
}

if p.config.Username == "" {
return errors.New("Username is required to push docker image")
}

if p.config.Password == "" {
return errors.New("Password is required to push docker image")
}

return nil
}
func (p *PostProcessor) PostProcess(ui packer.Ui, artifact packer.Artifact) (packer.Artifact, bool, error) {
id := artifact.Id()
ui.Say("Pushing imgage: " + id)

// TODO: docker login

stdout := new(bytes.Buffer)
cmd := exec.Command("docker", "push", id)
cmd.Stdout = stdout
if err := cmd.Run(); err != nil {
ui.Say("Failed to push image: " + id)
return nil, true, err
}

return nil, true, nil
}

0 comments on commit 8bdb723

Please sign in to comment.