github.com/rothwerx/packer@v0.9.0/builder/parallels/common/tools_config.go (about) 1 package common 2 3 import ( 4 "errors" 5 "fmt" 6 7 "github.com/mitchellh/packer/template/interpolate" 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(ctx *interpolate.Context) []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 validMode := false 34 validModes := []string{ 35 ParallelsToolsModeDisable, 36 ParallelsToolsModeAttach, 37 ParallelsToolsModeUpload, 38 } 39 40 for _, mode := range validModes { 41 if c.ParallelsToolsMode == mode { 42 validMode = true 43 break 44 } 45 } 46 47 var errs []error 48 if !validMode { 49 errs = append(errs, 50 fmt.Errorf("parallels_tools_mode is invalid. Must be one of: %v", 51 validModes)) 52 } 53 54 if c.ParallelsToolsFlavor == "" { 55 if c.ParallelsToolsMode != ParallelsToolsModeDisable { 56 errs = append(errs, errors.New("parallels_tools_flavor must be specified.")) 57 } 58 } 59 60 return errs 61 }