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