github.phpd.cn/hashicorp/packer@v1.3.2/builder/parallels/common/tools_config.go (about) 1 package common 2 3 import ( 4 "errors" 5 "fmt" 6 7 "github.com/hashicorp/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 // ToolsConfig contains the builder configuration related to Parallels Tools. 19 type ToolsConfig struct { 20 ParallelsToolsFlavor string `mapstructure:"parallels_tools_flavor"` 21 ParallelsToolsGuestPath string `mapstructure:"parallels_tools_guest_path"` 22 ParallelsToolsMode string `mapstructure:"parallels_tools_mode"` 23 } 24 25 // Prepare validates & sets up configuration options related to Parallels Tools. 26 func (c *ToolsConfig) Prepare(ctx *interpolate.Context) []error { 27 if c.ParallelsToolsMode == "" { 28 c.ParallelsToolsMode = ParallelsToolsModeUpload 29 } 30 31 if c.ParallelsToolsGuestPath == "" { 32 c.ParallelsToolsGuestPath = "prl-tools-{{.Flavor}}.iso" 33 } 34 35 validMode := false 36 validModes := []string{ 37 ParallelsToolsModeDisable, 38 ParallelsToolsModeAttach, 39 ParallelsToolsModeUpload, 40 } 41 42 for _, mode := range validModes { 43 if c.ParallelsToolsMode == mode { 44 validMode = true 45 break 46 } 47 } 48 49 var errs []error 50 if !validMode { 51 errs = append(errs, 52 fmt.Errorf("parallels_tools_mode is invalid. Must be one of: %v", 53 validModes)) 54 } 55 56 if c.ParallelsToolsFlavor == "" { 57 if c.ParallelsToolsMode != ParallelsToolsModeDisable { 58 errs = append(errs, errors.New("parallels_tools_flavor must be specified")) 59 } 60 } 61 62 return errs 63 }