github.com/askholme/packer@v0.7.2-0.20140924152349-70d9566a6852/builder/parallels/common/tools_config.go (about) 1 package common 2 3 import ( 4 "errors" 5 "fmt" 6 "github.com/mitchellh/packer/packer" 7 "text/template" 8 ) 9 10 // These are the different valid mode values for "parallels_tools_mode" which 11 // determine how guest additions are delivered to the guest. 12 const ( 13 ParallelsToolsModeDisable string = "disable" 14 ParallelsToolsModeAttach = "attach" 15 ParallelsToolsModeUpload = "upload" 16 ) 17 18 type ToolsConfig struct { 19 ParallelsToolsFlavor string `mapstructure:"parallels_tools_flavor"` 20 ParallelsToolsGuestPath string `mapstructure:"parallels_tools_guest_path"` 21 ParallelsToolsMode string `mapstructure:"parallels_tools_mode"` 22 } 23 24 func (c *ToolsConfig) Prepare(t *packer.ConfigTemplate) []error { 25 if c.ParallelsToolsMode == "" { 26 c.ParallelsToolsMode = ParallelsToolsModeUpload 27 } 28 29 if c.ParallelsToolsGuestPath == "" { 30 c.ParallelsToolsGuestPath = "prl-tools-{{.Flavor}}.iso" 31 } 32 33 templates := map[string]*string{ 34 "parallels_tools_flavor": &c.ParallelsToolsFlavor, 35 "parallels_tools_mode": &c.ParallelsToolsMode, 36 } 37 38 var err error 39 errs := make([]error, 0) 40 for n, ptr := range templates { 41 *ptr, err = t.Process(*ptr, nil) 42 if err != nil { 43 errs = append(errs, fmt.Errorf("Error processing %s: %s", n, err)) 44 } 45 } 46 47 if _, err := template.New("path").Parse(c.ParallelsToolsGuestPath); err != nil { 48 errs = append(errs, fmt.Errorf("parallels_tools_guest_path invalid: %s", err)) 49 } 50 51 validMode := false 52 validModes := []string{ 53 ParallelsToolsModeDisable, 54 ParallelsToolsModeAttach, 55 ParallelsToolsModeUpload, 56 } 57 58 for _, mode := range validModes { 59 if c.ParallelsToolsMode == mode { 60 validMode = true 61 break 62 } 63 } 64 65 if !validMode { 66 errs = append(errs, 67 fmt.Errorf("parallels_tools_mode is invalid. Must be one of: %v", 68 validModes)) 69 } 70 71 if c.ParallelsToolsFlavor == "" { 72 if c.ParallelsToolsMode != ParallelsToolsModeDisable { 73 errs = append(errs, errors.New("parallels_tools_flavor must be specified.")) 74 } 75 } 76 77 return errs 78 }