github.phpd.cn/hashicorp/packer@v1.3.2/fix/fixer_virtualbox_rename.go (about) 1 package fix 2 3 import ( 4 "github.com/mitchellh/mapstructure" 5 ) 6 7 // FixerVirtualBoxRename changes "virtualbox" builders to "virtualbox-iso" 8 type FixerVirtualBoxRename struct{} 9 10 func (FixerVirtualBoxRename) Fix(input map[string]interface{}) (map[string]interface{}, error) { 11 type template struct { 12 Builders []map[string]interface{} 13 Provisioners []interface{} 14 } 15 16 // Decode the input into our structure, if we can 17 var tpl template 18 if err := mapstructure.WeakDecode(input, &tpl); err != nil { 19 return nil, err 20 } 21 22 for _, builder := range tpl.Builders { 23 builderTypeRaw, ok := builder["type"] 24 if !ok { 25 continue 26 } 27 28 builderType, ok := builderTypeRaw.(string) 29 if !ok { 30 continue 31 } 32 33 if builderType != "virtualbox" { 34 continue 35 } 36 37 builder["type"] = "virtualbox-iso" 38 } 39 40 for i, raw := range tpl.Provisioners { 41 var m map[string]interface{} 42 if err := mapstructure.WeakDecode(raw, &m); err != nil { 43 // Ignore errors, could be a non-map 44 continue 45 } 46 47 raw, ok := m["override"] 48 if !ok { 49 continue 50 } 51 52 var override map[string]interface{} 53 if err := mapstructure.WeakDecode(raw, &override); err != nil { 54 return nil, err 55 } 56 57 if raw, ok := override["virtualbox"]; ok { 58 override["virtualbox-iso"] = raw 59 delete(override, "virtualbox") 60 61 // Set the change 62 m["override"] = override 63 tpl.Provisioners[i] = m 64 } 65 } 66 67 if len(tpl.Builders) > 0 { 68 input["builders"] = tpl.Builders 69 } 70 if len(tpl.Provisioners) > 0 { 71 input["provisioners"] = tpl.Provisioners 72 } 73 return input, nil 74 } 75 76 func (FixerVirtualBoxRename) Synopsis() string { 77 return `Updates "virtualbox" builders to "virtualbox-iso"` 78 }