Merge pull request #3566 from imduffy15/virtualbox

Allow configurable VRDP bind IP for VirtualBox builders
This commit is contained in:
Chris Bednarski 2016-05-25 11:27:29 -07:00
commit e13b7fbfcd
7 changed files with 51 additions and 12 deletions

View File

@ -11,6 +11,7 @@ type RunConfig struct {
Headless bool `mapstructure:"headless"` Headless bool `mapstructure:"headless"`
RawBootWait string `mapstructure:"boot_wait"` RawBootWait string `mapstructure:"boot_wait"`
VRDPBindAddress string `mapstructure:"vrdp_bind_address"`
VRDPPortMin uint `mapstructure:"vrdp_port_min"` VRDPPortMin uint `mapstructure:"vrdp_port_min"`
VRDPPortMax uint `mapstructure:"vrdp_port_max"` VRDPPortMax uint `mapstructure:"vrdp_port_max"`
@ -22,6 +23,10 @@ func (c *RunConfig) Prepare(ctx *interpolate.Context) []error {
c.RawBootWait = "10s" c.RawBootWait = "10s"
} }
if c.VRDPBindAddress == "" {
c.VRDPBindAddress = "127.0.0.1"
}
if c.VRDPPortMin == 0 { if c.VRDPPortMin == 0 {
c.VRDPPortMin = 5900 c.VRDPPortMin = 5900
} }

View File

@ -35,3 +35,27 @@ func TestRunConfigPrepare_BootWait(t *testing.T) {
t.Fatalf("should not have error: %s", errs) 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)
}
}

View File

@ -21,6 +21,7 @@ import (
// Produces: // Produces:
// vrdp_port unit - The port that VRDP is configured to listen on. // vrdp_port unit - The port that VRDP is configured to listen on.
type StepConfigureVRDP struct { type StepConfigureVRDP struct {
VRDPBindAddress string
VRDPPortMin uint VRDPPortMin uint
VRDPPortMax uint VRDPPortMax uint
} }
@ -30,7 +31,7 @@ func (s *StepConfigureVRDP) Run(state multistep.StateBag) multistep.StepAction {
ui := state.Get("ui").(packer.Ui) ui := state.Get("ui").(packer.Ui)
vmName := state.Get("vmName").(string) 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 var vrdpPort uint
portRange := int(s.VRDPPortMax - s.VRDPPortMin) 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) 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 { if err == nil {
defer l.Close() defer l.Close()
break break
@ -51,7 +52,7 @@ func (s *StepConfigureVRDP) Run(state multistep.StateBag) multistep.StepAction {
command := []string{ command := []string{
"modifyvm", vmName, "modifyvm", vmName,
"--vrdeaddress", "127.0.0.1", "--vrdeaddress", fmt.Sprintf("%s", s.VRDPBindAddress),
"--vrdeauthtype", "null", "--vrdeauthtype", "null",
"--vrde", "on", "--vrde", "on",
"--vrdeport", "--vrdeport",
@ -64,7 +65,7 @@ func (s *StepConfigureVRDP) Run(state multistep.StateBag) multistep.StepAction {
return multistep.ActionHalt return multistep.ActionHalt
} }
state.Put("vrdpIp", "127.0.0.1") state.Put("vrdpIp", s.VRDPBindAddress)
state.Put("vrdpPort", vrdpPort) state.Put("vrdpPort", vrdpPort)
return multistep.ActionContinue return multistep.ActionContinue

View File

@ -209,6 +209,7 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
GuestAdditionsMode: b.config.GuestAdditionsMode, GuestAdditionsMode: b.config.GuestAdditionsMode,
}, },
&vboxcommon.StepConfigureVRDP{ &vboxcommon.StepConfigureVRDP{
VRDPBindAddress: b.config.VRDPBindAddress,
VRDPPortMin: b.config.VRDPPortMin, VRDPPortMin: b.config.VRDPPortMin,
VRDPPortMax: b.config.VRDPPortMax, VRDPPortMax: b.config.VRDPPortMax,
}, },

View File

@ -78,6 +78,7 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
GuestAdditionsMode: b.config.GuestAdditionsMode, GuestAdditionsMode: b.config.GuestAdditionsMode,
}, },
&vboxcommon.StepConfigureVRDP{ &vboxcommon.StepConfigureVRDP{
VRDPBindAddress: b.config.VRDPBindAddress,
VRDPPortMin: b.config.VRDPPortMin, VRDPPortMin: b.config.VRDPPortMin,
VRDPPortMax: b.config.VRDPPortMax, VRDPPortMax: b.config.VRDPPortMax,
}, },

View File

@ -242,6 +242,10 @@ builder.
machine, without the file extension. By default this is "packer-BUILDNAME", machine, without the file extension. By default this is "packer-BUILDNAME",
where "BUILDNAME" is the name of the build. where "BUILDNAME" is the name of the build.
- `vrdp_bind_address` (string / IP address) - The IP address that should be binded
to for VRDP. By default packer will use 127.0.0.1 for this. If you wish to bind
to all interfaces use 0.0.0.0
- `vrdp_port_min` and `vrdp_port_max` (integer) - The minimum and maximum port - `vrdp_port_min` and `vrdp_port_max` (integer) - The minimum and maximum port
to use for VRDP access to the virtual machine. Packer uses a randomly chosen to use for VRDP access to the virtual machine. Packer uses a randomly chosen
port in this range that appears available. By default this is 5900 to 6000. port in this range that appears available. By default this is 5900 to 6000.

View File

@ -207,6 +207,9 @@ builder.
is exported. By default this is "packer-BUILDNAME", where "BUILDNAME" is the is exported. By default this is "packer-BUILDNAME", where "BUILDNAME" is the
name of the build. name of the build.
- `vrdp_bind_address` (string / IP address) - The IP address that should be binded
to for VRDP. By default packer will use 127.0.0.1 for this.
- `vrdp_port_min` and `vrdp_port_max` (integer) - The minimum and maximum port - `vrdp_port_min` and `vrdp_port_max` (integer) - The minimum and maximum port
to use for VRDP access to the virtual machine. Packer uses a randomly chosen to use for VRDP access to the virtual machine. Packer uses a randomly chosen
port in this range that appears available. By default this is 5900 to 6000. port in this range that appears available. By default this is 5900 to 6000.