From 3feab1dea147cba617d9d45312e6b4bffe05fe0a Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Fri, 8 Nov 2013 16:55:02 -0800 Subject: [PATCH] builder/docker: boilerplate --- builder/docker/builder.go | 70 ++++++++++++++++++++++++++++++++++ builder/docker/builder_test.go | 10 +++++ builder/docker/config.go | 12 ++++++ 3 files changed, 92 insertions(+) create mode 100644 builder/docker/builder.go create mode 100644 builder/docker/builder_test.go create mode 100644 builder/docker/config.go diff --git a/builder/docker/builder.go b/builder/docker/builder.go new file mode 100644 index 000000000..b9e69151e --- /dev/null +++ b/builder/docker/builder.go @@ -0,0 +1,70 @@ +package docker + +import ( + "github.com/mitchellh/multistep" + "github.com/mitchellh/packer/common" + "github.com/mitchellh/packer/packer" + "log" +) + +const BuilderId = "packer.docker" + +type Builder struct { + config Config + runner multistep.Runner +} + +func (b *Builder) Prepare(raws ...interface{}) ([]string, error) { + md, err := common.DecodeConfig(&b.config, raws...) + if err != nil { + return nil, err + } + + b.config.tpl, err = packer.NewConfigTemplate() + if err != nil { + return nil, err + } + + errs := common.CheckUnusedConfig(md) + warnings := make([]string, 0) + + if errs != nil && len(errs.Errors) > 0 { + return warnings, errs + } + + return warnings, nil +} + +func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packer.Artifact, error) { + steps := []multistep.Step{} + + // Setup the state bag and initial state for the steps + state := new(multistep.BasicStateBag) + state.Put("config", &b.config) + + // Run! + if b.config.PackerDebug { + b.runner = &multistep.DebugRunner{ + Steps: steps, + PauseFn: common.MultistepDebugFn(ui), + } + } else { + b.runner = &multistep.BasicRunner{Steps: steps} + } + + b.runner.Run(state) + + // If there was an error, return that + if rawErr, ok := state.GetOk("error"); ok { + return nil, rawErr.(error) + } + + return nil, nil +} + +func (b *Builder) Cancel() { + if b.runner != nil { + log.Println("Cancelling the step runner...") + b.runner.Cancel() + } +} diff --git a/builder/docker/builder_test.go b/builder/docker/builder_test.go new file mode 100644 index 000000000..c8da72224 --- /dev/null +++ b/builder/docker/builder_test.go @@ -0,0 +1,10 @@ +package docker + +import ( + "github.com/mitchellh/packer/packer" + "testing" +) + +func TestBuilder_implBuilder(t *testing.T) { + var _ packer.Builder = new(Builder) +} diff --git a/builder/docker/config.go b/builder/docker/config.go new file mode 100644 index 000000000..038b00dda --- /dev/null +++ b/builder/docker/config.go @@ -0,0 +1,12 @@ +package docker + +import ( + "github.com/mitchellh/packer/common" + "github.com/mitchellh/packer/packer" +) + +type Config struct { + common.PackerConfig `mapstructure:",squash"` + + tpl *packer.ConfigTemplate +}