64 lines
1.6 KiB
Go
64 lines
1.6 KiB
Go
package common
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
|
|
"github.com/hashicorp/packer/template/interpolate"
|
|
)
|
|
|
|
// These are the different valid mode values for "parallels_tools_mode" which
|
|
// determine how guest additions are delivered to the guest.
|
|
const (
|
|
ParallelsToolsModeDisable string = "disable"
|
|
ParallelsToolsModeAttach = "attach"
|
|
ParallelsToolsModeUpload = "upload"
|
|
)
|
|
|
|
// ToolsConfig contains the builder configuration related to Parallels Tools.
|
|
type ToolsConfig struct {
|
|
ParallelsToolsFlavor string `mapstructure:"parallels_tools_flavor"`
|
|
ParallelsToolsGuestPath string `mapstructure:"parallels_tools_guest_path"`
|
|
ParallelsToolsMode string `mapstructure:"parallels_tools_mode"`
|
|
}
|
|
|
|
// Prepare validates & sets up configuration options related to Parallels Tools.
|
|
func (c *ToolsConfig) Prepare(ctx *interpolate.Context) []error {
|
|
if c.ParallelsToolsMode == "" {
|
|
c.ParallelsToolsMode = ParallelsToolsModeUpload
|
|
}
|
|
|
|
if c.ParallelsToolsGuestPath == "" {
|
|
c.ParallelsToolsGuestPath = "prl-tools-{{.Flavor}}.iso"
|
|
}
|
|
|
|
validMode := false
|
|
validModes := []string{
|
|
ParallelsToolsModeDisable,
|
|
ParallelsToolsModeAttach,
|
|
ParallelsToolsModeUpload,
|
|
}
|
|
|
|
for _, mode := range validModes {
|
|
if c.ParallelsToolsMode == mode {
|
|
validMode = true
|
|
break
|
|
}
|
|
}
|
|
|
|
var errs []error
|
|
if !validMode {
|
|
errs = append(errs,
|
|
fmt.Errorf("parallels_tools_mode is invalid. Must be one of: %v",
|
|
validModes))
|
|
}
|
|
|
|
if c.ParallelsToolsFlavor == "" {
|
|
if c.ParallelsToolsMode != ParallelsToolsModeDisable {
|
|
errs = append(errs, errors.New("parallels_tools_flavor must be specified"))
|
|
}
|
|
}
|
|
|
|
return errs
|
|
}
|