diff --git a/builder/amazonebs/builder.go b/builder/amazonebs/builder.go index d807b53ac..e2f5ddb41 100644 --- a/builder/amazonebs/builder.go +++ b/builder/amazonebs/builder.go @@ -15,6 +15,8 @@ type Builder struct { config config } -func (*Builder) Prepare(interface{}) {} +func (*Builder) Prepare(interface{}) error { + return nil +} func (*Builder) Run(packer.Build, packer.Ui) {} diff --git a/packer/build.go b/packer/build.go index 5bbb7483d..3f1720766 100644 --- a/packer/build.go +++ b/packer/build.go @@ -3,7 +3,7 @@ package packer // A Build represents a single job within Packer that is responsible for // building some machine image artifact. Builds are meant to be parallelized. type Build interface { - Prepare() + Prepare() error Run(ui Ui) } @@ -29,15 +29,15 @@ type coreBuild struct { // // Run is where the actual build should take place. It takes a Build and a Ui. type Builder interface { - Prepare(config interface{}) + Prepare(config interface{}) error Run(build Build, ui Ui) } // Prepare prepares the build by doing some initialization for the builder // and any hooks. This _must_ be called prior to Run. -func (b *coreBuild) Prepare() { +func (b *coreBuild) Prepare() error { b.prepareCalled = true - b.builder.Prepare(b.rawConfig) + return b.builder.Prepare(b.rawConfig) } // Runs the actual build. Prepare must be called prior to running this. diff --git a/packer/build_test.go b/packer/build_test.go index cc0a63970..ee68b0e88 100644 --- a/packer/build_test.go +++ b/packer/build_test.go @@ -13,9 +13,10 @@ type TestBuilder struct { runUi Ui } -func (tb *TestBuilder) Prepare(config interface{}) { +func (tb *TestBuilder) Prepare(config interface{}) error { tb.prepareCalled = true tb.prepareConfig = config + return nil } func (tb *TestBuilder) Run(b Build, ui Ui) { diff --git a/packer/plugin/builder.go b/packer/plugin/builder.go index 8716be11d..70166ff0e 100644 --- a/packer/plugin/builder.go +++ b/packer/plugin/builder.go @@ -13,13 +13,13 @@ type cmdBuilder struct { client *client } -func (b *cmdBuilder) Prepare(config interface{}) { +func (b *cmdBuilder) Prepare(config interface{}) error { defer func() { r := recover() b.checkExit(r, nil) }() - b.builder.Prepare(config) + return b.builder.Prepare(config) } func (b *cmdBuilder) Run(build packer.Build, ui packer.Ui) { diff --git a/packer/plugin/builder_test.go b/packer/plugin/builder_test.go index 251999eb7..fdb1f61b5 100644 --- a/packer/plugin/builder_test.go +++ b/packer/plugin/builder_test.go @@ -9,7 +9,9 @@ import ( type helperBuilder byte -func (helperBuilder) Prepare(interface{}) {} +func (helperBuilder) Prepare(interface{}) error { + return nil +} func (helperBuilder) Run(packer.Build, packer.Ui) {} diff --git a/packer/rpc/build.go b/packer/rpc/build.go index 9cf0f7fe7..d522a6215 100644 --- a/packer/rpc/build.go +++ b/packer/rpc/build.go @@ -23,8 +23,9 @@ type BuildRunArgs struct { UiRPCAddress string } -func (b *Build) Prepare() { - b.client.Call("Build.Prepare", new(interface{}), new(interface{})) +func (b *Build) Prepare() (err error) { + b.client.Call("Build.Prepare", new(interface{}), &err) + return } func (b *Build) Run(ui packer.Ui) { @@ -36,10 +37,8 @@ func (b *Build) Run(ui packer.Ui) { b.client.Call("Build.Run", args, new(interface{})) } -func (b *BuildServer) Prepare(args *BuildPrepareArgs, reply *interface{}) error { - b.build.Prepare() - - *reply = nil +func (b *BuildServer) Prepare(args *BuildPrepareArgs, reply *error) error { + *reply = b.build.Prepare() return nil } diff --git a/packer/rpc/build_test.go b/packer/rpc/build_test.go index 3a5d4c78b..849268433 100644 --- a/packer/rpc/build_test.go +++ b/packer/rpc/build_test.go @@ -13,8 +13,9 @@ type testBuild struct { runUi packer.Ui } -func (b *testBuild) Prepare() { +func (b *testBuild) Prepare() error { b.prepareCalled = true + return nil } func (b *testBuild) Run(ui packer.Ui) { diff --git a/packer/rpc/builder.go b/packer/rpc/builder.go index 7f8c57ebf..3efb9e63c 100644 --- a/packer/rpc/builder.go +++ b/packer/rpc/builder.go @@ -29,8 +29,9 @@ func Builder(client *rpc.Client) *builder { return &builder{client} } -func (b *builder) Prepare(config interface{}) { - b.client.Call("Builder.Prepare", &BuilderPrepareArgs{config}, new(interface{})) +func (b *builder) Prepare(config interface{}) (err error) { + b.client.Call("Builder.Prepare", &BuilderPrepareArgs{config}, &err) + return } func (b *builder) Run(build packer.Build, ui packer.Ui) { @@ -44,9 +45,8 @@ func (b *builder) Run(build packer.Build, ui packer.Ui) { b.client.Call("Builder.Run", args, new(interface{})) } -func (b *BuilderServer) Prepare(args *BuilderPrepareArgs, reply *interface{}) error { - b.builder.Prepare(args.Config) - *reply = nil +func (b *BuilderServer) Prepare(args *BuilderPrepareArgs, reply *error) error { + *reply = b.builder.Prepare(args.Config) return nil } diff --git a/packer/rpc/builder_test.go b/packer/rpc/builder_test.go index 68342813f..27ff96bea 100644 --- a/packer/rpc/builder_test.go +++ b/packer/rpc/builder_test.go @@ -15,9 +15,10 @@ type testBuilder struct { runUi packer.Ui } -func (b *testBuilder) Prepare(config interface{}) { +func (b *testBuilder) Prepare(config interface{}) error { b.prepareCalled = true b.prepareConfig = config + return nil } func (b *testBuilder) Run(build packer.Build, ui packer.Ui) {