83 lines
2.6 KiB
Go
83 lines
2.6 KiB
Go
//go:generate struct-markdown
|
|
|
|
package common
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
|
|
"github.com/hashicorp/packer/packer-plugin-sdk/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 {
|
|
// The flavor of the Parallels Tools ISO to
|
|
// install into the VM. Valid values are "win", "lin", "mac", "os2"
|
|
// and "other". This can be omitted only if parallels_tools_mode
|
|
// is "disable".
|
|
ParallelsToolsFlavor string `mapstructure:"parallels_tools_flavor" required:"true"`
|
|
// The path in the virtual machine to
|
|
// upload Parallels Tools. This only takes effect if parallels_tools_mode
|
|
// is "upload". This is a configuration
|
|
// template that has a single
|
|
// valid variable: Flavor, which will be the value of
|
|
// parallels_tools_flavor. By default this is `prl-tools-{{.Flavor}}.iso`
|
|
// which should upload into the login directory of the user.
|
|
ParallelsToolsGuestPath string `mapstructure:"parallels_tools_guest_path" required:"false"`
|
|
// The method by which Parallels Tools are
|
|
// made available to the guest for installation. Valid options are "upload",
|
|
// "attach", or "disable". If the mode is "attach" the Parallels Tools ISO will
|
|
// be attached as a CD device to the virtual machine. If the mode is "upload"
|
|
// the Parallels Tools ISO will be uploaded to the path specified by
|
|
// parallels_tools_guest_path. The default value is "upload".
|
|
ParallelsToolsMode string `mapstructure:"parallels_tools_mode" required:"false"`
|
|
}
|
|
|
|
// 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
|
|
}
|