packer: builds now have post processors as part of them
This commit is contained in:
parent
18f9677b54
commit
91a6a7797d
|
@ -44,17 +44,25 @@ type Build interface {
|
|||
// multiple files, of course, but it should be for only a single provider
|
||||
// (such as VirtualBox, EC2, etc.).
|
||||
type coreBuild struct {
|
||||
name string
|
||||
builder Builder
|
||||
builderConfig interface{}
|
||||
hooks map[string][]Hook
|
||||
provisioners []coreBuildProvisioner
|
||||
name string
|
||||
builder Builder
|
||||
builderConfig interface{}
|
||||
hooks map[string][]Hook
|
||||
postProcessors [][]coreBuildPostProcessor
|
||||
provisioners []coreBuildProvisioner
|
||||
|
||||
debug bool
|
||||
l sync.Mutex
|
||||
prepareCalled bool
|
||||
}
|
||||
|
||||
// Keeps track of the post-processor and the configuration of the
|
||||
// post-processor used within a build.
|
||||
type coreBuildPostProcessor struct {
|
||||
processor PostProcessor
|
||||
config interface{}
|
||||
}
|
||||
|
||||
// Keeps track of the provisioner and the configuration of the provisioner
|
||||
// within the build.
|
||||
type coreBuildProvisioner struct {
|
||||
|
|
|
@ -285,6 +285,29 @@ func (t *Template) Build(name string, components *ComponentFinder) (b Build, err
|
|||
hooks[tplEvent] = curHooks
|
||||
}
|
||||
|
||||
// Prepare the post-processors
|
||||
postProcessors := make([][]coreBuildPostProcessor, 0, len(t.PostProcessors))
|
||||
for _, rawPPs := range t.PostProcessors {
|
||||
current := make([]coreBuildPostProcessor, len(rawPPs))
|
||||
for i, rawPP := range rawPPs {
|
||||
pp, err := components.PostProcessor(rawPP.Type)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if pp == nil {
|
||||
return nil, fmt.Errorf("PostProcessor type not found: %s", rawPP.Type)
|
||||
}
|
||||
|
||||
current[i] = coreBuildPostProcessor{
|
||||
processor: pp,
|
||||
config: rawPP.rawConfig,
|
||||
}
|
||||
}
|
||||
|
||||
postProcessors = append(postProcessors, current)
|
||||
}
|
||||
|
||||
// Prepare the provisioners
|
||||
provisioners := make([]coreBuildProvisioner, 0, len(t.Provisioners))
|
||||
for _, rawProvisioner := range t.Provisioners {
|
||||
|
@ -313,11 +336,12 @@ func (t *Template) Build(name string, components *ComponentFinder) (b Build, err
|
|||
}
|
||||
|
||||
b = &coreBuild{
|
||||
name: name,
|
||||
builder: builder,
|
||||
builderConfig: builderConfig.rawConfig,
|
||||
hooks: hooks,
|
||||
provisioners: provisioners,
|
||||
name: name,
|
||||
builder: builder,
|
||||
builderConfig: builderConfig.rawConfig,
|
||||
hooks: hooks,
|
||||
postProcessors: postProcessors,
|
||||
provisioners: provisioners,
|
||||
}
|
||||
|
||||
return
|
||||
|
|
|
@ -443,6 +443,11 @@ func TestTemplate_Build(t *testing.T) {
|
|||
{
|
||||
"type": "test-prov"
|
||||
}
|
||||
],
|
||||
|
||||
"post-processors": [
|
||||
"simple",
|
||||
["simple", "simple"]
|
||||
]
|
||||
}
|
||||
`
|
||||
|
@ -465,11 +470,18 @@ func TestTemplate_Build(t *testing.T) {
|
|||
"test-prov": provisioner,
|
||||
}
|
||||
|
||||
pp := new(TestPostProcessor)
|
||||
ppMap := map[string]PostProcessor{
|
||||
"simple": pp,
|
||||
}
|
||||
|
||||
builderFactory := func(n string) (Builder, error) { return builderMap[n], nil }
|
||||
ppFactory := func(n string) (PostProcessor, error) { return ppMap[n], nil }
|
||||
provFactory := func(n string) (Provisioner, error) { return provisionerMap[n], nil }
|
||||
components := &ComponentFinder{
|
||||
Builder: builderFactory,
|
||||
Provisioner: provFactory,
|
||||
Builder: builderFactory,
|
||||
PostProcessor: ppFactory,
|
||||
Provisioner: provFactory,
|
||||
}
|
||||
|
||||
// Get the build, verifying we can get it without issue, but also
|
||||
|
@ -482,6 +494,9 @@ func TestTemplate_Build(t *testing.T) {
|
|||
assert.Equal(coreBuild.builder, builder, "should have the same builder")
|
||||
assert.Equal(coreBuild.builderConfig, expectedConfig, "should have proper config")
|
||||
assert.Equal(len(coreBuild.provisioners), 1, "should have one provisioner")
|
||||
assert.Equal(len(coreBuild.postProcessors), 2, "should have pps")
|
||||
assert.Equal(len(coreBuild.postProcessors[0]), 1, "should have correct number")
|
||||
assert.Equal(len(coreBuild.postProcessors[1]), 2, "should have correct number")
|
||||
}
|
||||
|
||||
func TestTemplate_Build_ProvisionerOverride(t *testing.T) {
|
||||
|
|
Loading…
Reference in New Issue