diff --git a/builder/virtualbox/common/run_config.go b/builder/virtualbox/common/run_config.go index 653b19294..595667b11 100644 --- a/builder/virtualbox/common/run_config.go +++ b/builder/virtualbox/common/run_config.go @@ -11,8 +11,9 @@ type RunConfig struct { Headless bool `mapstructure:"headless"` RawBootWait string `mapstructure:"boot_wait"` - VRDPPortMin uint `mapstructure:"vrdp_port_min"` - VRDPPortMax uint `mapstructure:"vrdp_port_max"` + VRDPBindAddress string `mapstructure:"vrdp_bind_address"` + VRDPPortMin uint `mapstructure:"vrdp_port_min"` + VRDPPortMax uint `mapstructure:"vrdp_port_max"` BootWait time.Duration `` } @@ -22,6 +23,10 @@ func (c *RunConfig) Prepare(ctx *interpolate.Context) []error { c.RawBootWait = "10s" } + if c.VRDPBindAddress == "" { + c.VRDPBindAddress = "127.0.0.1" + } + if c.VRDPPortMin == 0 { c.VRDPPortMin = 5900 } diff --git a/builder/virtualbox/common/run_config_test.go b/builder/virtualbox/common/run_config_test.go index 8068fe625..87b9b1b69 100644 --- a/builder/virtualbox/common/run_config_test.go +++ b/builder/virtualbox/common/run_config_test.go @@ -35,3 +35,27 @@ func TestRunConfigPrepare_BootWait(t *testing.T) { t.Fatalf("should not have error: %s", errs) } } + +func TestRunConfigPrepare_VRDPBindAddress(t *testing.T) { + var c *RunConfig + var errs []error + + // Test a default VRDPBindAddress + c = new(RunConfig) + errs = c.Prepare(testConfigTemplate(t)) + if len(errs) > 0 { + t.Fatalf("should not have error: %s", errs) + } + + if c.VRDPBindAddress != "127.0.0.1" { + t.Fatalf("bad value: %s", c.VRDPBindAddress) + } + + // Test with a good one + c = new(RunConfig) + c.VRDPBindAddress = "192.168.0.1" + errs = c.Prepare(testConfigTemplate(t)) + if len(errs) > 0 { + t.Fatalf("should not have error: %s", errs) + } +} diff --git a/builder/virtualbox/common/step_configure_vrdp.go b/builder/virtualbox/common/step_configure_vrdp.go index ba4f6b9c0..b48a70d60 100644 --- a/builder/virtualbox/common/step_configure_vrdp.go +++ b/builder/virtualbox/common/step_configure_vrdp.go @@ -21,8 +21,9 @@ import ( // Produces: // vrdp_port unit - The port that VRDP is configured to listen on. type StepConfigureVRDP struct { - VRDPPortMin uint - VRDPPortMax uint + VRDPBindAddress string + VRDPPortMin uint + VRDPPortMax uint } func (s *StepConfigureVRDP) Run(state multistep.StateBag) multistep.StepAction { @@ -30,7 +31,7 @@ func (s *StepConfigureVRDP) Run(state multistep.StateBag) multistep.StepAction { ui := state.Get("ui").(packer.Ui) vmName := state.Get("vmName").(string) - log.Printf("Looking for available port between %d and %d", s.VRDPPortMin, s.VRDPPortMax) + log.Printf("Looking for available port between %d and %d on %s", s.VRDPPortMin, s.VRDPPortMax, s.VRDPBindAddress) var vrdpPort uint portRange := int(s.VRDPPortMax - s.VRDPPortMin) @@ -42,7 +43,7 @@ func (s *StepConfigureVRDP) Run(state multistep.StateBag) multistep.StepAction { } log.Printf("Trying port: %d", vrdpPort) - l, err := net.Listen("tcp", fmt.Sprintf(":%d", vrdpPort)) + l, err := net.Listen("tcp", fmt.Sprintf("%s:%d", s.VRDPBindAddress, vrdpPort)) if err == nil { defer l.Close() break @@ -51,7 +52,7 @@ func (s *StepConfigureVRDP) Run(state multistep.StateBag) multistep.StepAction { command := []string{ "modifyvm", vmName, - "--vrdeaddress", "127.0.0.1", + "--vrdeaddress", fmt.Sprintf("%s", s.VRDPBindAddress), "--vrdeauthtype", "null", "--vrde", "on", "--vrdeport", @@ -64,7 +65,7 @@ func (s *StepConfigureVRDP) Run(state multistep.StateBag) multistep.StepAction { return multistep.ActionHalt } - state.Put("vrdpIp", "127.0.0.1") + state.Put("vrdpIp", s.VRDPBindAddress) state.Put("vrdpPort", vrdpPort) return multistep.ActionContinue diff --git a/builder/virtualbox/iso/builder.go b/builder/virtualbox/iso/builder.go index e4f9ebb2e..99dff6263 100644 --- a/builder/virtualbox/iso/builder.go +++ b/builder/virtualbox/iso/builder.go @@ -209,8 +209,9 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe GuestAdditionsMode: b.config.GuestAdditionsMode, }, &vboxcommon.StepConfigureVRDP{ - VRDPPortMin: b.config.VRDPPortMin, - VRDPPortMax: b.config.VRDPPortMax, + VRDPBindAddress: b.config.VRDPBindAddress, + VRDPPortMin: b.config.VRDPPortMin, + VRDPPortMax: b.config.VRDPPortMax, }, new(vboxcommon.StepAttachFloppy), &vboxcommon.StepForwardSSH{ diff --git a/builder/virtualbox/ovf/builder.go b/builder/virtualbox/ovf/builder.go index fa9c68c2f..ab99f6544 100644 --- a/builder/virtualbox/ovf/builder.go +++ b/builder/virtualbox/ovf/builder.go @@ -78,8 +78,9 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe GuestAdditionsMode: b.config.GuestAdditionsMode, }, &vboxcommon.StepConfigureVRDP{ - VRDPPortMin: b.config.VRDPPortMin, - VRDPPortMax: b.config.VRDPPortMax, + VRDPBindAddress: b.config.VRDPBindAddress, + VRDPPortMin: b.config.VRDPPortMin, + VRDPPortMax: b.config.VRDPPortMax, }, new(vboxcommon.StepAttachFloppy), &vboxcommon.StepForwardSSH{