packer: template error if override specified for bad builder [GH-336]

This commit is contained in:
Mitchell Hashimoto 2013-08-27 21:34:55 -07:00
parent b4b68bce00
commit 747f260678
3 changed files with 38 additions and 0 deletions

View File

@ -26,6 +26,8 @@ IMPROVEMENTS:
BUG FIXES: BUG FIXES:
* core: Fixed a couple cases where a double ctrl-C could panic. * core: Fixed a couple cases where a double ctrl-C could panic.
* core: Template validation fails if an override is specified for a
non-existent builder. [GH-336]
* builder/amazon/instance: Remove check for ec2-ami-tools because it * builder/amazon/instance: Remove check for ec2-ami-tools because it
didn't allow absolute paths to work properly. [GH-330] didn't allow absolute paths to work properly. [GH-330]
* builder/digitalocean: Send a soft shutdown request so that files * builder/digitalocean: Send a soft shutdown request so that files

View File

@ -221,6 +221,14 @@ func ParseTemplate(data []byte) (t *Template, err error) {
// actively reject them as invalid configuration. // actively reject them as invalid configuration.
delete(v, "override") delete(v, "override")
// Verify that the override keys exist...
for name, _ := range raw.Override {
if _, ok := t.Builders[name]; !ok {
errors = append(
errors, fmt.Errorf("provisioner %d: build '%s' not found for override", i+1, name))
}
}
raw.RawConfig = v raw.RawConfig = v
} }

View File

@ -700,6 +700,34 @@ func TestTemplate_Build_ProvisionerOverride(t *testing.T) {
assert.Equal(len(coreBuild.provisioners[0].config), 2, "should have two configs on the provisioner") assert.Equal(len(coreBuild.provisioners[0].config), 2, "should have two configs on the provisioner")
} }
func TestTemplate_Build_ProvisionerOverrideBad(t *testing.T) {
data := `
{
"builders": [
{
"name": "test1",
"type": "test-builder"
}
],
"provisioners": [
{
"type": "test-prov",
"override": {
"testNope": {}
}
}
]
}
`
_, err := ParseTemplate([]byte(data))
if err == nil {
t.Fatal("should have error")
}
}
func TestTemplateBuild_variables(t *testing.T) { func TestTemplateBuild_variables(t *testing.T) {
data := ` data := `
{ {