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  }