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  }