Commit 779f4898 authored by Mitchell Hashimoto's avatar Mitchell Hashimoto

packer: Template takes a component finder

parent 30ab9444
...@@ -31,12 +31,18 @@ func (Command) Run(env packer.Environment, args []string) int { ...@@ -31,12 +31,18 @@ func (Command) Run(env packer.Environment, args []string) int {
return 1 return 1
} }
// The component finder for our builds
components := &packer.ComponentFinder{
Builder: env.Builder,
Hook: env.Hook,
}
// Go through each builder and compile the builds that we care about // Go through each builder and compile the builds that we care about
buildNames := tpl.BuildNames() buildNames := tpl.BuildNames()
builds := make([]packer.Build, 0, len(buildNames)) builds := make([]packer.Build, 0, len(buildNames))
for _, buildName := range buildNames { for _, buildName := range buildNames {
log.Printf("Creating build: %s\n", buildName) log.Printf("Creating build: %s\n", buildName)
build, err := tpl.Build(buildName, env.Builder) build, err := tpl.Build(buildName, components)
if err != nil { if err != nil {
env.Ui().Error("Failed to create build '%s': \n\n%s\n", buildName, err.Error()) env.Ui().Error("Failed to create build '%s': \n\n%s\n", buildName, err.Error())
return 1 return 1
......
...@@ -96,14 +96,14 @@ func (t *Template) BuildNames() []string { ...@@ -96,14 +96,14 @@ func (t *Template) BuildNames() []string {
// //
// If the build does not exist as part of this template, an error is // If the build does not exist as part of this template, an error is
// returned. // returned.
func (t *Template) Build(name string, bf BuilderFunc) (b Build, err error) { func (t *Template) Build(name string, components *ComponentFinder) (b Build, err error) {
builderConfig, ok := t.Builders[name] builderConfig, ok := t.Builders[name]
if !ok { if !ok {
err = fmt.Errorf("No such build found in template: %s", name) err = fmt.Errorf("No such build found in template: %s", name)
return return
} }
builder, err := bf(builderConfig.builderName) builder, err := components.Builder(builderConfig.builderName)
if err != nil { if err != nil {
return return
} }
......
...@@ -181,7 +181,8 @@ func TestTemplate_BuildUnknownBuilder(t *testing.T) { ...@@ -181,7 +181,8 @@ func TestTemplate_BuildUnknownBuilder(t *testing.T) {
assert.Nil(err, "should not error") assert.Nil(err, "should not error")
builderFactory := func(string) (Builder, error) { return nil, nil } builderFactory := func(string) (Builder, error) { return nil, nil }
build, err := template.Build("test1", builderFactory) components := &ComponentFinder{Builder: builderFactory}
build, err := template.Build("test1", components)
assert.Nil(build, "build should be nil") assert.Nil(build, "build should be nil")
assert.NotNil(err, "should have error") assert.NotNil(err, "should have error")
} }
...@@ -215,10 +216,11 @@ func TestTemplate_Build(t *testing.T) { ...@@ -215,10 +216,11 @@ func TestTemplate_Build(t *testing.T) {
} }
builderFactory := func(n string) (Builder, error) { return builderMap[n], nil } builderFactory := func(n string) (Builder, error) { return builderMap[n], nil }
components := &ComponentFinder{Builder: builderFactory}
// Get the build, verifying we can get it without issue, but also // Get the build, verifying we can get it without issue, but also
// that the proper builder was looked up and used for the build. // that the proper builder was looked up and used for the build.
build, err := template.Build("test1", builderFactory) build, err := template.Build("test1", components)
assert.Nil(err, "should not error") assert.Nil(err, "should not error")
build.Prepare() build.Prepare()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment