command/fix: add fixer to fix virtualbox to virtualbox-iso

This commit is contained in:
Mitchell Hashimoto 2013-12-22 16:01:28 -08:00
parent efac707078
commit 89ab009c3f
4 changed files with 98 additions and 0 deletions

View File

@ -24,6 +24,7 @@ func init() {
"createtime": new(FixerCreateTime),
"pp-vagrant-override": new(FixerVagrantPPOverride),
"virtualbox-gaattach": new(FixerVirtualBoxGAAttach),
"virtualbox-rename": new(FixerVirtualBoxRename),
}
FixerOrder = []string{
@ -31,5 +32,6 @@ func init() {
"createtime",
"virtualbox-gaattach",
"pp-vagrant-override",
"virtualbox-rename",
}
}

View File

@ -0,0 +1,46 @@
package fix
import (
"github.com/mitchellh/mapstructure"
)
// FixerVirtualBoxRename changes "virtualbox" builders to "virtualbox-iso"
type FixerVirtualBoxRename struct{}
func (FixerVirtualBoxRename) Fix(input map[string]interface{}) (map[string]interface{}, error) {
// The type we'll decode into; we only care about builders
type template struct {
Builders []map[string]interface{}
}
// Decode the input into our structure, if we can
var tpl template
if err := mapstructure.Decode(input, &tpl); err != nil {
return nil, err
}
for _, builder := range tpl.Builders {
builderTypeRaw, ok := builder["type"]
if !ok {
continue
}
builderType, ok := builderTypeRaw.(string)
if !ok {
continue
}
if builderType != "virtualbox" {
continue
}
builder["type"] = "virtualbox-iso"
}
input["builders"] = tpl.Builders
return input, nil
}
func (FixerVirtualBoxRename) Synopsis() string {
return `Updates "virtualbox" builders to "virtualbox-iso"`
}

View File

@ -0,0 +1,49 @@
package fix
import (
"reflect"
"testing"
)
func TestFixerVirtualBoxRename_impl(t *testing.T) {
var _ Fixer = new(FixerVirtualBoxRename)
}
func TestFixerVirtualBoxRename_Fix(t *testing.T) {
cases := []struct {
Input map[string]interface{}
Expected map[string]interface{}
}{
// No attach field
{
Input: map[string]interface{}{
"type": "virtualbox",
},
Expected: map[string]interface{}{
"type": "virtualbox-iso",
},
},
}
for _, tc := range cases {
var f FixerVirtualBoxRename
input := map[string]interface{}{
"builders": []map[string]interface{}{tc.Input},
}
expected := map[string]interface{}{
"builders": []map[string]interface{}{tc.Expected},
}
output, err := f.Fix(input)
if err != nil {
t.Fatalf("err: %s", err)
}
if !reflect.DeepEqual(output, expected) {
t.Fatalf("unexpected: %#v\nexpected: %#v\n", output, expected)
}
}
}

View File

@ -17,5 +17,6 @@ Fixes that are run:
to use "guest_additions_mode"
pp-vagrant-override Replaces old-style provider overrides for the Vagrant
post-processor to new-style as of Packer 0.5.0.
virtualbox-rename Updates "virtualbox" builders to "virtualbox-iso"
`