From f7af571cd95718204c286b53588bffd5bd12e634 Mon Sep 17 00:00:00 2001 From: Mikhail Zholobov Date: Thu, 18 Jun 2015 12:04:02 +0300 Subject: [PATCH 1/2] builder/parallels: Add "SetDefaultConfiguration" function This functions applies the default configuration to the virtual machine. Also, it disables some integration features which should not present in the resulted VM image. Functions are different in PD 9 and 10 structs because some additional options appeared only in Parallels Desktop 10 release. --- builder/parallels/common/driver.go | 3 +++ builder/parallels/common/driver_10.go | 24 ++++++++++++++++++++++++ builder/parallels/common/driver_9.go | 19 +++++++++++++++++++ 3 files changed, 46 insertions(+) diff --git a/builder/parallels/common/driver.go b/builder/parallels/common/driver.go index 5c3d93c09..03a4e0f09 100644 --- a/builder/parallels/common/driver.go +++ b/builder/parallels/common/driver.go @@ -44,6 +44,9 @@ type Driver interface { // Send scancodes to the vm using the prltype python script. SendKeyScanCodes(string, ...string) error + // Apply default сonfiguration settings to the virtual machine + SetDefaultConfiguration(string) error + // Finds the MAC address of the NIC nic0 Mac(string) (string, error) diff --git a/builder/parallels/common/driver_10.go b/builder/parallels/common/driver_10.go index 9ab0754de..c37d421dc 100644 --- a/builder/parallels/common/driver_10.go +++ b/builder/parallels/common/driver_10.go @@ -5,3 +5,27 @@ package common type Parallels10Driver struct { Parallels9Driver } + +func (d *Parallels10Driver) SetDefaultConfiguration(vmName string) error { + commands := make([][]string, 12) + commands[0] = []string{"set", vmName, "--cpus", "1"} + commands[1] = []string{"set", vmName, "--memsize", "512"} + commands[2] = []string{"set", vmName, "--startup-view", "same"} + commands[3] = []string{"set", vmName, "--on-shutdown", "close"} + commands[4] = []string{"set", vmName, "--on-window-close", "keep-running"} + commands[5] = []string{"set", vmName, "--auto-share-camera", "off"} + commands[6] = []string{"set", vmName, "--smart-guard", "off"} + commands[7] = []string{"set", vmName, "--shared-cloud", "off"} + commands[8] = []string{"set", vmName, "--shared-profile", "off"} + commands[9] = []string{"set", vmName, "--smart-mount", "off"} + commands[10] = []string{"set", vmName, "--sh-app-guest-to-host", "off"} + commands[11] = []string{"set", vmName, "--sh-app-host-to-guest", "off"} + + for _, command := range commands { + err := d.Prlctl(command...) + if err != nil { + return err + } + } + return nil +} diff --git a/builder/parallels/common/driver_9.go b/builder/parallels/common/driver_9.go index 98d36cc24..c577151dc 100644 --- a/builder/parallels/common/driver_9.go +++ b/builder/parallels/common/driver_9.go @@ -255,6 +255,25 @@ func prepend(head string, tail []string) []string { return tmp } +func (d *Parallels9Driver) SetDefaultConfiguration(vmName string) error { + commands := make([][]string, 7) + commands[0] = []string{"set", vmName, "--cpus", "1"} + commands[1] = []string{"set", vmName, "--memsize", "512"} + commands[2] = []string{"set", vmName, "--startup-view", "same"} + commands[3] = []string{"set", vmName, "--on-shutdown", "close"} + commands[4] = []string{"set", vmName, "--on-window-close", "keep-running"} + commands[5] = []string{"set", vmName, "--auto-share-camera", "off"} + commands[6] = []string{"set", vmName, "--smart-guard", "off"} + + for _, command := range commands { + err := d.Prlctl(command...) + if err != nil { + return err + } + } + return nil +} + func (d *Parallels9Driver) Mac(vmName string) (string, error) { var stdout bytes.Buffer From 2860bfdf82eb84549f7f43619abd998144774593 Mon Sep 17 00:00:00 2001 From: Mikhail Zholobov Date: Thu, 18 Jun 2015 12:06:49 +0300 Subject: [PATCH 2/2] builder/parallels: Apply default settings on the VM creation step. --- builder/parallels/iso/step_create_vm.go | 40 +++++++++++-------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/builder/parallels/iso/step_create_vm.go b/builder/parallels/iso/step_create_vm.go index ebe7effa8..ca8c7c44e 100644 --- a/builder/parallels/iso/step_create_vm.go +++ b/builder/parallels/iso/step_create_vm.go @@ -23,37 +23,33 @@ func (s *stepCreateVM) Run(state multistep.StateBag) multistep.StepAction { ui := state.Get("ui").(packer.Ui) name := config.VMName - commands := make([][]string, 8) - commands[0] = []string{ + command := []string{ "create", name, "--distribution", config.GuestOSType, "--dst", config.OutputDir, "--vmtype", "vm", "--no-hdd", } - commands[1] = []string{"set", name, "--cpus", "1"} - commands[2] = []string{"set", name, "--memsize", "512"} - commands[3] = []string{"set", name, "--startup-view", "same"} - commands[4] = []string{"set", name, "--on-shutdown", "close"} - commands[5] = []string{"set", name, "--on-window-close", "keep-running"} - commands[6] = []string{"set", name, "--auto-share-camera", "off"} - commands[7] = []string{"set", name, "--smart-guard", "off"} ui.Say("Creating virtual machine...") - for _, command := range commands { - err := driver.Prlctl(command...) - ui.Say(fmt.Sprintf("Executing: prlctl %s", command)) - if err != nil { - err := fmt.Errorf("Error creating VM: %s", err) - state.Put("error", err) - ui.Error(err.Error()) - return multistep.ActionHalt - } + if err := driver.Prlctl(command...); err != nil { + err := fmt.Errorf("Error creating VM: %s", err) + state.Put("error", err) + ui.Error(err.Error()) + return multistep.ActionHalt + } + + ui.Say("Applying default settings...") + if err := driver.SetDefaultConfiguration(name); err != nil { + err := fmt.Errorf("Error VM configuration: %s", err) + state.Put("error", err) + ui.Error(err.Error()) + return multistep.ActionHalt + } - // Set the VM name property on the first command - if s.vmName == "" { - s.vmName = name - } + // Set the VM name property on the first command + if s.vmName == "" { + s.vmName = name } // Set the final name in the state bag so others can use it