use port as ints

This commit is contained in:
Adrien Delorme 2019-03-19 14:47:21 +01:00
parent f828b72c10
commit 5a6dffde9a
47 changed files with 112 additions and 113 deletions

View File

@ -37,7 +37,7 @@ type Config struct {
Network string `mapstructure:"network"` Network string `mapstructure:"network"`
Project string `mapstructure:"project"` Project string `mapstructure:"project"`
PublicIPAddress string `mapstructure:"public_ip_address"` PublicIPAddress string `mapstructure:"public_ip_address"`
PublicPort uint `mapstructure:"public_port"` PublicPort int `mapstructure:"public_port"`
SecurityGroups []string `mapstructure:"security_groups"` SecurityGroups []string `mapstructure:"security_groups"`
ServiceOffering string `mapstructure:"service_offering"` ServiceOffering string `mapstructure:"service_offering"`
PreventFirewallChanges bool `mapstructure:"prevent_firewall_changes"` PreventFirewallChanges bool `mapstructure:"prevent_firewall_changes"`

View File

@ -15,8 +15,8 @@ func commHost(state multistep.StateBag) (string, error) {
return ip, nil return ip, nil
} }
func commPort(state multistep.StateBag) (uint, error) { func commPort(state multistep.StateBag) (int, error) {
commPort, hasPort := state.Get("commPort").(uint) commPort, hasPort := state.Get("commPort").(int)
if !hasPort { if !hasPort {
return 0, fmt.Errorf("Failed to retrieve communication port") return 0, fmt.Errorf("Failed to retrieve communication port")
} }

View File

@ -13,8 +13,8 @@ import (
) )
type stepSetupNetworking struct { type stepSetupNetworking struct {
privatePort uint privatePort int
publicPort uint publicPort int
} }
func (s *stepSetupNetworking) Run(_ context.Context, state multistep.StateBag) multistep.StepAction { func (s *stepSetupNetworking) Run(_ context.Context, state multistep.StateBag) multistep.StepAction {
@ -36,7 +36,7 @@ func (s *stepSetupNetworking) Run(_ context.Context, state multistep.StateBag) m
} else { } else {
// Generate a random public port used to configure our port forward. // Generate a random public port used to configure our port forward.
rand.Seed(time.Now().UnixNano()) rand.Seed(time.Now().UnixNano())
s.publicPort = uint(50000 + rand.Intn(10000)) s.publicPort = 50000 + rand.Intn(10000)
} }
state.Put("commPort", s.publicPort) state.Put("commPort", s.publicPort)
@ -99,9 +99,9 @@ func (s *stepSetupNetworking) Run(_ context.Context, state multistep.StateBag) m
ui.Message("Creating port forward...") ui.Message("Creating port forward...")
p := client.Firewall.NewCreatePortForwardingRuleParams( p := client.Firewall.NewCreatePortForwardingRuleParams(
config.PublicIPAddress, config.PublicIPAddress,
int(s.privatePort), s.privatePort,
"TCP", "TCP",
int(s.publicPort), s.publicPort,
instanceID, instanceID,
) )
@ -143,8 +143,8 @@ func (s *stepSetupNetworking) Run(_ context.Context, state multistep.StateBag) m
p.SetAclid(network.Aclid) p.SetAclid(network.Aclid)
p.SetAction("allow") p.SetAction("allow")
p.SetCidrlist(config.CIDRList) p.SetCidrlist(config.CIDRList)
p.SetStartport(int(s.privatePort)) p.SetStartport(s.privatePort)
p.SetEndport(int(s.privatePort)) p.SetEndport(s.privatePort)
p.SetTraffictype("ingress") p.SetTraffictype("ingress")
// Create the network ACL rule. // Create the network ACL rule.
@ -166,8 +166,8 @@ func (s *stepSetupNetworking) Run(_ context.Context, state multistep.StateBag) m
// Configure the firewall rule. // Configure the firewall rule.
p.SetCidrlist(config.CIDRList) p.SetCidrlist(config.CIDRList)
p.SetStartport(int(s.publicPort)) p.SetStartport(s.publicPort)
p.SetEndport(int(s.publicPort)) p.SetEndport(s.publicPort)
fwRule, err := client.Firewall.CreateFirewallRule(p) fwRule, err := client.Firewall.CreateFirewallRule(p)
if err != nil { if err != nil {

View File

@ -18,7 +18,7 @@ import (
// userDataTemplateData represents variables for user_data interpolation // userDataTemplateData represents variables for user_data interpolation
type userDataTemplateData struct { type userDataTemplateData struct {
HTTPIP string HTTPIP string
HTTPPort uint HTTPPort int
} }
// stepCreateInstance represents a Packer build step that creates CloudStack instances. // stepCreateInstance represents a Packer build step that creates CloudStack instances.
@ -86,7 +86,7 @@ func (s *stepCreateInstance) Run(_ context.Context, state multistep.StateBag) mu
} }
if config.UserData != "" { if config.UserData != "" {
httpPort := state.Get("http_port").(uint) httpPort := state.Get("http_port").(int)
httpIP, err := hostIP() httpIP, err := hostIP()
if err != nil { if err != nil {
err := fmt.Errorf("Failed to determine host IP: %s", err) err := fmt.Errorf("Failed to determine host IP: %s", err)

View File

@ -54,8 +54,8 @@ func (s *stepCreateSecurityGroup) Run(_ context.Context, state multistep.StateBa
i.SetCidrlist(config.CIDRList) i.SetCidrlist(config.CIDRList)
i.SetProtocol("TCP") i.SetProtocol("TCP")
i.SetSecuritygroupid(sg.Id) i.SetSecuritygroupid(sg.Id)
i.SetStartport(int(config.Comm.Port())) i.SetStartport(config.Comm.Port())
i.SetEndport(int(config.Comm.Port())) i.SetEndport(config.Comm.Port())
if config.Project != "" { if config.Project != "" {
i.SetProjectid(config.Project) i.SetProjectid(config.Project)
} }

View File

@ -15,7 +15,7 @@ import (
type bootCommandTemplateData struct { type bootCommandTemplateData struct {
HTTPIP string HTTPIP string
HTTPPort uint HTTPPort int
Name string Name string
} }
@ -29,7 +29,7 @@ type StepTypeBootCommand struct {
} }
func (s *StepTypeBootCommand) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction { func (s *StepTypeBootCommand) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction {
httpPort := state.Get("http_port").(uint) httpPort := state.Get("http_port").(int)
ui := state.Get("ui").(packer.Ui) ui := state.Get("ui").(packer.Ui)
driver := state.Get("driver").(Driver) driver := state.Get("driver").(Driver)
vmName := state.Get("vmName").(string) vmName := state.Get("vmName").(string)

View File

@ -610,7 +610,7 @@ func TestUserVariablesInBootCommand(t *testing.T) {
state.Put("config", &b.config) state.Put("config", &b.config)
state.Put("driver", driver) state.Put("driver", driver)
state.Put("hook", hook) state.Put("hook", hook)
state.Put("http_port", uint(0)) state.Put("http_port", 0)
state.Put("ui", ui) state.Put("ui", ui)
state.Put("vmName", "packer-foo") state.Put("vmName", "packer-foo")

View File

@ -511,7 +511,7 @@ func TestUserVariablesInBootCommand(t *testing.T) {
state.Put("config", &b.config) state.Put("config", &b.config)
state.Put("driver", driver) state.Put("driver", driver)
state.Put("hook", hook) state.Put("hook", hook)
state.Put("http_port", uint(0)) state.Put("http_port", 0)
state.Put("ui", ui) state.Put("ui", ui)
state.Put("vmName", "packer-foo") state.Put("vmName", "packer-foo")

View File

@ -14,7 +14,7 @@ import (
type bootCommandTemplateData struct { type bootCommandTemplateData struct {
HTTPIP string HTTPIP string
HTTPPort uint HTTPPort int
Name string Name string
} }
@ -32,7 +32,7 @@ type StepTypeBootCommand struct {
// Run types the boot command by sending key scancodes into the VM. // Run types the boot command by sending key scancodes into the VM.
func (s *StepTypeBootCommand) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction { func (s *StepTypeBootCommand) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction {
debug := state.Get("debug").(bool) debug := state.Get("debug").(bool)
httpPort := state.Get("http_port").(uint) httpPort := state.Get("http_port").(int)
ui := state.Get("ui").(packer.Ui) ui := state.Get("ui").(packer.Ui)
driver := state.Get("driver").(Driver) driver := state.Get("driver").(Driver)

View File

@ -46,7 +46,7 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook) (packer.Artifact, error) {
state.Put("driver", driver) state.Put("driver", driver)
state.Put("hook", hook) state.Put("hook", hook)
state.Put("ui", ui) state.Put("ui", ui)
state.Put("http_port", uint(0)) state.Put("http_port", 0)
// Build the steps. // Build the steps.
steps := []multistep.Step{ steps := []multistep.Step{

View File

@ -116,12 +116,12 @@ type Config struct {
QemuArgs [][]string `mapstructure:"qemuargs"` QemuArgs [][]string `mapstructure:"qemuargs"`
QemuBinary string `mapstructure:"qemu_binary"` QemuBinary string `mapstructure:"qemu_binary"`
ShutdownCommand string `mapstructure:"shutdown_command"` ShutdownCommand string `mapstructure:"shutdown_command"`
SSHHostPortMin uint `mapstructure:"ssh_host_port_min"` SSHHostPortMin int `mapstructure:"ssh_host_port_min"`
SSHHostPortMax uint `mapstructure:"ssh_host_port_max"` SSHHostPortMax int `mapstructure:"ssh_host_port_max"`
UseDefaultDisplay bool `mapstructure:"use_default_display"` UseDefaultDisplay bool `mapstructure:"use_default_display"`
VNCBindAddress string `mapstructure:"vnc_bind_address"` VNCBindAddress string `mapstructure:"vnc_bind_address"`
VNCPortMin uint `mapstructure:"vnc_port_min"` VNCPortMin int `mapstructure:"vnc_port_min"`
VNCPortMax uint `mapstructure:"vnc_port_max"` VNCPortMax int `mapstructure:"vnc_port_max"`
VMName string `mapstructure:"vm_name"` VMName string `mapstructure:"vm_name"`
// These are deprecated, but we keep them around for BC // These are deprecated, but we keep them around for BC

View File

@ -8,7 +8,7 @@ func commHost(state multistep.StateBag) (string, error) {
return "127.0.0.1", nil return "127.0.0.1", nil
} }
func commPort(state multistep.StateBag) (uint, error) { func commPort(state multistep.StateBag) (int, error) {
sshHostPort := state.Get("sshHostPort").(uint) sshHostPort := state.Get("sshHostPort").(int)
return sshHostPort, nil return int(sshHostPort), nil
} }

View File

@ -17,7 +17,7 @@ import (
// ui packer.Ui // ui packer.Ui
// //
// Produces: // Produces:
// vnc_port uint - The port that VNC is configured to listen on. // vnc_port int - The port that VNC is configured to listen on.
type stepConfigureVNC struct { type stepConfigureVNC struct {
l *net.Listener l *net.Listener
} }

View File

@ -21,11 +21,11 @@ type stepRun struct {
type qemuArgsTemplateData struct { type qemuArgsTemplateData struct {
HTTPIP string HTTPIP string
HTTPPort uint HTTPPort int
HTTPDir string HTTPDir string
OutputDir string OutputDir string
Name string Name string
SSHHostPort uint SSHHostPort int
} }
func (s *stepRun) Run(_ context.Context, state multistep.StateBag) multistep.StepAction { func (s *stepRun) Run(_ context.Context, state multistep.StateBag) multistep.StepAction {
@ -63,7 +63,7 @@ func getCommandArgs(bootDrive string, state multistep.StateBag) ([]string, error
config := state.Get("config").(*Config) config := state.Get("config").(*Config)
isoPath := state.Get("iso_path").(string) isoPath := state.Get("iso_path").(string)
vncIP := state.Get("vnc_ip").(string) vncIP := state.Get("vnc_ip").(string)
vncPort := state.Get("vnc_port").(uint) vncPort := state.Get("vnc_port").(int)
ui := state.Get("ui").(packer.Ui) ui := state.Get("ui").(packer.Ui)
driver := state.Get("driver").(Driver) driver := state.Get("driver").(Driver)
@ -74,12 +74,12 @@ func getCommandArgs(bootDrive string, state multistep.StateBag) ([]string, error
defaultArgs := make(map[string]interface{}) defaultArgs := make(map[string]interface{})
var deviceArgs []string var deviceArgs []string
var driveArgs []string var driveArgs []string
var sshHostPort uint var sshHostPort int
defaultArgs["-name"] = vmName defaultArgs["-name"] = vmName
defaultArgs["-machine"] = fmt.Sprintf("type=%s", config.MachineType) defaultArgs["-machine"] = fmt.Sprintf("type=%s", config.MachineType)
if config.Comm.Type != "none" { if config.Comm.Type != "none" {
sshHostPort = state.Get("sshHostPort").(uint) sshHostPort = state.Get("sshHostPort").(int)
defaultArgs["-netdev"] = fmt.Sprintf("user,id=user.0,hostfwd=tcp::%v-:%d", sshHostPort, config.Comm.Port()) defaultArgs["-netdev"] = fmt.Sprintf("user,id=user.0,hostfwd=tcp::%v-:%d", sshHostPort, config.Comm.Port())
} else { } else {
defaultArgs["-netdev"] = fmt.Sprintf("user,id=user.0") defaultArgs["-netdev"] = fmt.Sprintf("user,id=user.0")
@ -121,7 +121,7 @@ func getCommandArgs(bootDrive string, state multistep.StateBag) ([]string, error
if vncIpOk && vncPortOk { if vncIpOk && vncPortOk {
vncIp := vncIpRaw.(string) vncIp := vncIpRaw.(string)
vncPort := vncPortRaw.(uint) vncPort := vncPortRaw.(int)
ui.Message(fmt.Sprintf( ui.Message(fmt.Sprintf(
"The VM will be run headless, without a GUI. If you want to\n"+ "The VM will be run headless, without a GUI. If you want to\n"+
@ -175,7 +175,7 @@ func getCommandArgs(bootDrive string, state multistep.StateBag) ([]string, error
if len(config.QemuArgs) > 0 { if len(config.QemuArgs) > 0 {
ui.Say("Overriding defaults Qemu arguments with QemuArgs...") ui.Say("Overriding defaults Qemu arguments with QemuArgs...")
httpPort := state.Get("http_port").(uint) httpPort := state.Get("http_port").(int)
ctx := config.ctx ctx := config.ctx
if config.Comm.Type != "none" { if config.Comm.Type != "none" {
ctx.Data = qemuArgsTemplateData{ ctx.Data = qemuArgsTemplateData{

View File

@ -19,7 +19,7 @@ const KeyLeftShift uint32 = 0xFFE1
type bootCommandTemplateData struct { type bootCommandTemplateData struct {
HTTPIP string HTTPIP string
HTTPPort uint HTTPPort int
Name string Name string
} }
@ -29,7 +29,7 @@ type bootCommandTemplateData struct {
// config *config // config *config
// http_port int // http_port int
// ui packer.Ui // ui packer.Ui
// vnc_port uint // vnc_port int
// //
// Produces: // Produces:
// <nothing> // <nothing>
@ -38,9 +38,9 @@ type stepTypeBootCommand struct{}
func (s *stepTypeBootCommand) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction { func (s *stepTypeBootCommand) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction {
config := state.Get("config").(*Config) config := state.Get("config").(*Config)
debug := state.Get("debug").(bool) debug := state.Get("debug").(bool)
httpPort := state.Get("http_port").(uint) httpPort := state.Get("http_port").(int)
ui := state.Get("ui").(packer.Ui) ui := state.Get("ui").(packer.Ui)
vncPort := state.Get("vnc_port").(uint) vncPort := state.Get("vnc_port").(int)
vncIP := state.Get("vnc_ip").(string) vncIP := state.Get("vnc_ip").(string)
if config.VNCConfig.DisableVNC { if config.VNCConfig.DisableVNC {

View File

@ -11,8 +11,8 @@ func CommHost() func(multistep.StateBag) (string, error) {
} }
} }
func SSHPort() func(multistep.StateBag) (uint, error) { func SSHPort() func(multistep.StateBag) (int, error) {
return func(state multistep.StateBag) (uint, error) { return func(state multistep.StateBag) (int, error) {
config := state.Get("config").(*Config) config := state.Get("config").(*Config)
return config.Comm.SSHPort, nil return config.Comm.SSHPort, nil
} }

View File

@ -44,7 +44,7 @@ func (s *StepSSHConfig) Run(_ context.Context, state multistep.StateBag) multist
state.Put("error", err) state.Put("error", err)
return multistep.ActionHalt return multistep.ActionHalt
} }
config.Comm.SSHPort = uint(port) config.Comm.SSHPort = port
return multistep.ActionContinue return multistep.ActionContinue
} }

View File

@ -10,8 +10,8 @@ type RunConfig struct {
Headless bool `mapstructure:"headless"` Headless bool `mapstructure:"headless"`
VRDPBindAddress string `mapstructure:"vrdp_bind_address"` VRDPBindAddress string `mapstructure:"vrdp_bind_address"`
VRDPPortMin uint `mapstructure:"vrdp_port_min"` VRDPPortMin int `mapstructure:"vrdp_port_min"`
VRDPPortMax uint `mapstructure:"vrdp_port_max"` VRDPPortMax int `mapstructure:"vrdp_port_max"`
} }
func (c *RunConfig) Prepare(ctx *interpolate.Context) (errs []error) { func (c *RunConfig) Prepare(ctx *interpolate.Context) (errs []error) {

View File

@ -10,7 +10,7 @@ func CommHost(host string) func(multistep.StateBag) (string, error) {
} }
} }
func SSHPort(state multistep.StateBag) (uint, error) { func SSHPort(state multistep.StateBag) (int, error) {
sshHostPort := state.Get("sshHostPort").(uint) sshHostPort := state.Get("sshHostPort").(int)
return sshHostPort, nil return sshHostPort, nil
} }

View File

@ -11,8 +11,8 @@ import (
type SSHConfig struct { type SSHConfig struct {
Comm communicator.Config `mapstructure:",squash"` Comm communicator.Config `mapstructure:",squash"`
SSHHostPortMin uint `mapstructure:"ssh_host_port_min"` SSHHostPortMin int `mapstructure:"ssh_host_port_min"`
SSHHostPortMax uint `mapstructure:"ssh_host_port_max"` SSHHostPortMax int `mapstructure:"ssh_host_port_max"`
SSHSkipNatMapping bool `mapstructure:"ssh_skip_nat_mapping"` SSHSkipNatMapping bool `mapstructure:"ssh_skip_nat_mapping"`
// These are deprecated, but we keep them around for BC // These are deprecated, but we keep them around for BC

View File

@ -22,8 +22,8 @@ import (
// 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 VRDPBindAddress string
VRDPPortMin uint VRDPPortMin int
VRDPPortMax uint VRDPPortMax int
l *net.Listener l *net.Listener
} }

View File

@ -22,8 +22,8 @@ import (
// Produces: // Produces:
type StepForwardSSH struct { type StepForwardSSH struct {
CommConfig *communicator.Config CommConfig *communicator.Config
HostPortMin uint HostPortMin int
HostPortMax uint HostPortMax int
SkipNatMapping bool SkipNatMapping bool
l *net.Listener l *net.Listener
@ -40,7 +40,7 @@ func (s *StepForwardSSH) Run(ctx context.Context, state multistep.StateBag) mult
return multistep.ActionContinue return multistep.ActionContinue
} }
guestPort := uint(s.CommConfig.Port()) guestPort := s.CommConfig.Port()
sshHostPort := guestPort sshHostPort := guestPort
if !s.SkipNatMapping { if !s.SkipNatMapping {
log.Printf("Looking for available communicator (SSH, WinRM, etc) port between %d and %d", log.Printf("Looking for available communicator (SSH, WinRM, etc) port between %d and %d",

View File

@ -35,7 +35,7 @@ func (s *StepRun) Run(_ context.Context, state multistep.StateBag) multistep.Ste
if vrdpIpOk && vrdpPortOk { if vrdpIpOk && vrdpPortOk {
vrdpIp := vrdpIpRaw.(string) vrdpIp := vrdpIpRaw.(string)
vrdpPort := vrdpPortRaw.(uint) vrdpPort := vrdpPortRaw.(int)
ui.Message(fmt.Sprintf( ui.Message(fmt.Sprintf(
"The VM will be run headless, without a GUI. If you want to\n"+ "The VM will be run headless, without a GUI. If you want to\n"+

View File

@ -22,7 +22,7 @@ type bootCommandTemplateData struct {
HTTPIP string HTTPIP string
// HTTPPort is the HTTP server port. // HTTPPort is the HTTP server port.
HTTPPort uint HTTPPort int
// Name is the VM's name. // Name is the VM's name.
Name string Name string
@ -43,7 +43,7 @@ type StepTypeBootCommand struct {
func (s *StepTypeBootCommand) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction { func (s *StepTypeBootCommand) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction {
debug := state.Get("debug").(bool) debug := state.Get("debug").(bool)
driver := state.Get("driver").(Driver) driver := state.Get("driver").(Driver)
httpPort := state.Get("http_port").(uint) httpPort := state.Get("http_port").(int)
ui := state.Get("ui").(packer.Ui) ui := state.Get("ui").(packer.Ui)
vmName := state.Get("vmName").(string) vmName := state.Get("vmName").(string)

View File

@ -20,7 +20,7 @@ type DriverConfig struct {
RemoteCacheDatastore string `mapstructure:"remote_cache_datastore"` RemoteCacheDatastore string `mapstructure:"remote_cache_datastore"`
RemoteCacheDirectory string `mapstructure:"remote_cache_directory"` RemoteCacheDirectory string `mapstructure:"remote_cache_directory"`
RemoteHost string `mapstructure:"remote_host"` RemoteHost string `mapstructure:"remote_host"`
RemotePort uint `mapstructure:"remote_port"` RemotePort int `mapstructure:"remote_port"`
RemoteUser string `mapstructure:"remote_username"` RemoteUser string `mapstructure:"remote_username"`
RemotePassword string `mapstructure:"remote_password"` RemotePassword string `mapstructure:"remote_password"`
RemotePrivateKey string `mapstructure:"remote_private_key_file"` RemotePrivateKey string `mapstructure:"remote_private_key_file"`

View File

@ -31,7 +31,7 @@ type ESX5Driver struct {
base VmwareDriver base VmwareDriver
Host string Host string
Port uint Port int
Username string Username string
Password string Password string
PrivateKeyFile string PrivateKeyFile string
@ -360,8 +360,8 @@ func (d *ESX5Driver) GuestAddress(multistep.StateBag) (string, error) {
return result, nil return result, nil
} }
func (d *ESX5Driver) VNCAddress(ctx context.Context, _ string, portMin, portMax uint) (string, uint, error) { func (d *ESX5Driver) VNCAddress(ctx context.Context, _ string, portMin, portMax int) (string, int, error) {
var vncPort uint var vncPort int
//Process ports ESXi is listening on to determine which are available //Process ports ESXi is listening on to determine which are available
//This process does best effort to detect ports that are unavailable, //This process does best effort to detect ports that are unavailable,
@ -427,7 +427,7 @@ func (d *ESX5Driver) VNCAddress(ctx context.Context, _ string, portMin, portMax
} }
// UpdateVMX, adds the VNC port to the VMX data. // UpdateVMX, adds the VNC port to the VMX data.
func (ESX5Driver) UpdateVMX(_, password string, port uint, data map[string]string) { func (ESX5Driver) UpdateVMX(_, password string, port int, data map[string]string) {
// Do not set remotedisplay.vnc.ip - this breaks ESXi. // Do not set remotedisplay.vnc.ip - this breaks ESXi.
data["remotedisplay.vnc.enabled"] = "TRUE" data["remotedisplay.vnc.enabled"] = "TRUE"
data["remotedisplay.vnc.port"] = fmt.Sprintf("%d", port) data["remotedisplay.vnc.port"] = fmt.Sprintf("%d", port)

View File

@ -50,7 +50,7 @@ func TestESX5Driver_HostIP(t *testing.T) {
port := listen.Addr().(*net.TCPAddr).Port port := listen.Addr().(*net.TCPAddr).Port
defer listen.Close() defer listen.Close()
driver := ESX5Driver{Host: "localhost", Port: uint(port)} driver := ESX5Driver{Host: "localhost", Port: port}
state := new(multistep.BasicStateBag) state := new(multistep.BasicStateBag)
if host, _ := driver.HostIP(state); host != expected_host { if host, _ := driver.HostIP(state); host != expected_host {

View File

@ -10,8 +10,8 @@ type RunConfig struct {
Headless bool `mapstructure:"headless"` Headless bool `mapstructure:"headless"`
VNCBindAddress string `mapstructure:"vnc_bind_address"` VNCBindAddress string `mapstructure:"vnc_bind_address"`
VNCPortMin uint `mapstructure:"vnc_port_min"` VNCPortMin int `mapstructure:"vnc_port_min"`
VNCPortMax uint `mapstructure:"vnc_port_max"` VNCPortMax int `mapstructure:"vnc_port_max"`
VNCDisablePassword bool `mapstructure:"vnc_disable_password"` VNCDisablePassword bool `mapstructure:"vnc_disable_password"`
} }

View File

@ -18,25 +18,25 @@ import (
// vmx_path string // vmx_path string
// //
// Produces: // Produces:
// vnc_port uint - The port that VNC is configured to listen on. // vnc_port int - The port that VNC is configured to listen on.
type StepConfigureVNC struct { type StepConfigureVNC struct {
Enabled bool Enabled bool
VNCBindAddress string VNCBindAddress string
VNCPortMin uint VNCPortMin int
VNCPortMax uint VNCPortMax int
VNCDisablePassword bool VNCDisablePassword bool
l *net.Listener l *net.Listener
} }
type VNCAddressFinder interface { type VNCAddressFinder interface {
VNCAddress(context.Context, string, uint, uint) (string, uint, error) VNCAddress(context.Context, string, int, int) (string, int, error)
// UpdateVMX, sets driver specific VNC values to VMX data. // UpdateVMX, sets driver specific VNC values to VMX data.
UpdateVMX(vncAddress, vncPassword string, vncPort uint, vmxData map[string]string) UpdateVMX(vncAddress, vncPassword string, vncPort int, vmxData map[string]string)
} }
func (s *StepConfigureVNC) VNCAddress(ctx context.Context, vncBindAddress string, portMin, portMax uint) (string, uint, error) { func (s *StepConfigureVNC) VNCAddress(ctx context.Context, vncBindAddress string, portMin, portMax int) (string, int, error) {
var err error var err error
s.l, err = net.ListenRangeConfig{ s.l, err = net.ListenRangeConfig{
Addr: s.VNCBindAddress, Addr: s.VNCBindAddress,
@ -125,7 +125,7 @@ func (s *StepConfigureVNC) Run(ctx context.Context, state multistep.StateBag) mu
return multistep.ActionContinue return multistep.ActionContinue
} }
func (StepConfigureVNC) UpdateVMX(address, password string, port uint, data map[string]string) { func (*StepConfigureVNC) UpdateVMX(address, password string, port int, data map[string]string) {
data["remotedisplay.vnc.enabled"] = "TRUE" data["remotedisplay.vnc.enabled"] = "TRUE"
data["remotedisplay.vnc.port"] = fmt.Sprintf("%d", port) data["remotedisplay.vnc.port"] = fmt.Sprintf("%d", port)
data["remotedisplay.vnc.ip"] = address data["remotedisplay.vnc.ip"] = address

View File

@ -43,7 +43,7 @@ func (s *StepRun) Run(_ context.Context, state multistep.StateBag) multistep.Ste
if vncIpOk && vncPortOk && vncPasswordOk { if vncIpOk && vncPortOk && vncPasswordOk {
vncIp := vncIpRaw.(string) vncIp := vncIpRaw.(string)
vncPort := vncPortRaw.(uint) vncPort := vncPortRaw.(int)
vncPassword := vncPasswordRaw.(string) vncPassword := vncPasswordRaw.(string)
ui.Message(fmt.Sprintf( ui.Message(fmt.Sprintf(

View File

@ -20,7 +20,7 @@ import (
// Uses: // Uses:
// http_port int // http_port int
// ui packer.Ui // ui packer.Ui
// vnc_port uint // vnc_port int
// //
// Produces: // Produces:
// <nothing> // <nothing>
@ -34,7 +34,7 @@ type StepTypeBootCommand struct {
} }
type bootCommandTemplateData struct { type bootCommandTemplateData struct {
HTTPIP string HTTPIP string
HTTPPort uint HTTPPort int
Name string Name string
} }
@ -46,10 +46,10 @@ func (s *StepTypeBootCommand) Run(ctx context.Context, state multistep.StateBag)
debug := state.Get("debug").(bool) debug := state.Get("debug").(bool)
driver := state.Get("driver").(Driver) driver := state.Get("driver").(Driver)
httpPort := state.Get("http_port").(uint) httpPort := state.Get("http_port").(int)
ui := state.Get("ui").(packer.Ui) ui := state.Get("ui").(packer.Ui)
vncIp := state.Get("vnc_ip").(string) vncIp := state.Get("vnc_ip").(string)
vncPort := state.Get("vnc_port").(uint) vncPort := state.Get("vnc_port").(int)
vncPassword := state.Get("vnc_password") vncPassword := state.Get("vnc_password")
// Wait the for the vm to boot. // Wait the for the vm to boot.

View File

@ -9,8 +9,8 @@ import (
// HTTPConfig contains configuration for the local HTTP Server // HTTPConfig contains configuration for the local HTTP Server
type HTTPConfig struct { type HTTPConfig struct {
HTTPDir string `mapstructure:"http_directory"` HTTPDir string `mapstructure:"http_directory"`
HTTPPortMin uint `mapstructure:"http_port_min"` HTTPPortMin int `mapstructure:"http_port_min"`
HTTPPortMax uint `mapstructure:"http_port_max"` HTTPPortMax int `mapstructure:"http_port_max"`
} }
func (c *HTTPConfig) Prepare(ctx *interpolate.Context) []error { func (c *HTTPConfig) Prepare(ctx *interpolate.Context) []error {

View File

@ -24,11 +24,11 @@ func TestHTTPConfigPrepare_Bounds(t *testing.T) {
if err != nil { if err != nil {
t.Fatalf("should not have error: %s", err) t.Fatalf("should not have error: %s", err)
} }
portMin := uint(8000) portMin := 8000
if h.HTTPPortMin != portMin { if h.HTTPPortMin != portMin {
t.Fatalf("HTTPPortMin: expected %d got %d", portMin, h.HTTPPortMin) t.Fatalf("HTTPPortMin: expected %d got %d", portMin, h.HTTPPortMin)
} }
portMax := uint(9000) portMax := 9000
if h.HTTPPortMax != portMax { if h.HTTPPortMax != portMax {
t.Fatalf("HTTPPortMax: expected %d got %d", portMax, h.HTTPPortMax) t.Fatalf("HTTPPortMax: expected %d got %d", portMax, h.HTTPPortMax)
} }

View File

@ -7,6 +7,7 @@ import (
"log" "log"
"math/rand" "math/rand"
"net" "net"
"strconv"
"github.com/gofrs/flock" "github.com/gofrs/flock"
@ -24,7 +25,7 @@ type Listener struct {
// Listener can be closed but Port will be file locked by packer until // Listener can be closed but Port will be file locked by packer until
// Close is called. // Close is called.
net.Listener net.Listener
Port uint Port int
Address string Address string
lock *flock.Flock lock *flock.Flock
} }
@ -43,7 +44,7 @@ type ListenRangeConfig struct {
// tcp", "udp" // tcp", "udp"
Network string Network string
Addr string Addr string
Min, Max uint Min, Max int
net.ListenConfig net.ListenConfig
} }
@ -64,9 +65,9 @@ func (lc ListenRangeConfig) Listen(ctx context.Context) (*Listener, error) {
return nil, err return nil, err
} }
port := uint(rand.Intn(portRange)) + lc.Min port := rand.Intn(portRange) + lc.Min
lockFilePath, err := packer.CachePath("port", fmt.Sprintf("%d", port)) lockFilePath, err := packer.CachePath("port", strconv.Itoa(port))
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -23,8 +23,8 @@ import (
// http_port int - The port the HTTP server started on. // http_port int - The port the HTTP server started on.
type StepHTTPServer struct { type StepHTTPServer struct {
HTTPDir string HTTPDir string
HTTPPortMin uint HTTPPortMin int
HTTPPortMax uint HTTPPortMax int
l *net.Listener l *net.Listener
} }
@ -33,7 +33,7 @@ func (s *StepHTTPServer) Run(ctx context.Context, state multistep.StateBag) mult
ui := state.Get("ui").(packer.Ui) ui := state.Get("ui").(packer.Ui)
if s.HTTPDir == "" { if s.HTTPDir == "" {
state.Put("http_port", uint(0)) state.Put("http_port", 0)
return multistep.ActionContinue return multistep.ActionContinue
} }

View File

@ -27,7 +27,7 @@ type Communicator struct {
func New(config *Config) (*Communicator, error) { func New(config *Config) (*Communicator, error) {
endpoint := &winrm.Endpoint{ endpoint := &winrm.Endpoint{
Host: config.Host, Host: config.Host,
Port: int(config.Port), // it's a uint Port: config.Port,
HTTPS: config.Https, HTTPS: config.Https,
Insecure: config.Insecure, Insecure: config.Insecure,

View File

@ -9,7 +9,7 @@ import (
// Config is used to configure the WinRM connection // Config is used to configure the WinRM connection
type Config struct { type Config struct {
Host string Host string
Port uint Port int
Username string Username string
Password string Password string
Timeout time.Duration Timeout time.Duration

View File

@ -24,8 +24,8 @@ const PACKERSPACE = "-PACKERSPACE-"
type config struct { type config struct {
DisableCheckpoint bool `json:"disable_checkpoint"` DisableCheckpoint bool `json:"disable_checkpoint"`
DisableCheckpointSignature bool `json:"disable_checkpoint_signature"` DisableCheckpointSignature bool `json:"disable_checkpoint_signature"`
PluginMinPort uint PluginMinPort int
PluginMaxPort uint PluginMaxPort int
Builders map[string]string Builders map[string]string
PostProcessors map[string]string `json:"post-processors"` PostProcessors map[string]string `json:"post-processors"`

View File

@ -25,7 +25,7 @@ type Config struct {
// SSH // SSH
SSHHost string `mapstructure:"ssh_host"` SSHHost string `mapstructure:"ssh_host"`
SSHPort uint `mapstructure:"ssh_port"` SSHPort int `mapstructure:"ssh_port"`
SSHUsername string `mapstructure:"ssh_username"` SSHUsername string `mapstructure:"ssh_username"`
SSHPassword string `mapstructure:"ssh_password"` SSHPassword string `mapstructure:"ssh_password"`
SSHKeyPairName string `mapstructure:"ssh_keypair_name"` SSHKeyPairName string `mapstructure:"ssh_keypair_name"`
@ -60,7 +60,7 @@ type Config struct {
WinRMUser string `mapstructure:"winrm_username"` WinRMUser string `mapstructure:"winrm_username"`
WinRMPassword string `mapstructure:"winrm_password"` WinRMPassword string `mapstructure:"winrm_password"`
WinRMHost string `mapstructure:"winrm_host"` WinRMHost string `mapstructure:"winrm_host"`
WinRMPort uint `mapstructure:"winrm_port"` WinRMPort int `mapstructure:"winrm_port"`
WinRMTimeout time.Duration `mapstructure:"winrm_timeout"` WinRMTimeout time.Duration `mapstructure:"winrm_timeout"`
WinRMUseSSL bool `mapstructure:"winrm_use_ssl"` WinRMUseSSL bool `mapstructure:"winrm_use_ssl"`
WinRMInsecure bool `mapstructure:"winrm_insecure"` WinRMInsecure bool `mapstructure:"winrm_insecure"`
@ -150,7 +150,7 @@ func (c *Config) SSHConfigFunc() func(multistep.StateBag) (*ssh.ClientConfig, er
} }
// Port returns the port that will be used for access based on config. // Port returns the port that will be used for access based on config.
func (c *Config) Port() uint { func (c *Config) Port() int {
switch c.Type { switch c.Type {
case "ssh": case "ssh":
return c.SSHPort return c.SSHPort

View File

@ -28,14 +28,14 @@ type StepConnect struct {
// SSHConfig should return the default configuration for // SSHConfig should return the default configuration for
// connecting via SSH. // connecting via SSH.
SSHConfig func(multistep.StateBag) (*gossh.ClientConfig, error) SSHConfig func(multistep.StateBag) (*gossh.ClientConfig, error)
SSHPort func(multistep.StateBag) (uint, error) SSHPort func(multistep.StateBag) (int, error)
// The fields below are callbacks to assist with connecting to WinRM. // The fields below are callbacks to assist with connecting to WinRM.
// //
// WinRMConfig should return the default configuration for // WinRMConfig should return the default configuration for
// connecting via WinRM. // connecting via WinRM.
WinRMConfig func(multistep.StateBag) (*WinRMConfig, error) WinRMConfig func(multistep.StateBag) (*WinRMConfig, error)
WinRMPort func(multistep.StateBag) (uint, error) WinRMPort func(multistep.StateBag) (int, error)
// CustomConnect can be set to have custom connectors for specific // CustomConnect can be set to have custom connectors for specific
// types. These take highest precedence so you can also override // types. These take highest precedence so you can also override

View File

@ -27,7 +27,7 @@ type StepConnectSSH struct {
Config *Config Config *Config
Host func(multistep.StateBag) (string, error) Host func(multistep.StateBag) (string, error)
SSHConfig func(multistep.StateBag) (*gossh.ClientConfig, error) SSHConfig func(multistep.StateBag) (*gossh.ClientConfig, error)
SSHPort func(multistep.StateBag) (uint, error) SSHPort func(multistep.StateBag) (int, error)
} }
func (s *StepConnectSSH) Run(_ context.Context, state multistep.StateBag) multistep.StepAction { func (s *StepConnectSSH) Run(_ context.Context, state multistep.StateBag) multistep.StepAction {

View File

@ -30,7 +30,7 @@ type StepConnectWinRM struct {
Config *Config Config *Config
Host func(multistep.StateBag) (string, error) Host func(multistep.StateBag) (string, error)
WinRMConfig func(multistep.StateBag) (*WinRMConfig, error) WinRMConfig func(multistep.StateBag) (*WinRMConfig, error)
WinRMPort func(multistep.StateBag) (uint, error) WinRMPort func(multistep.StateBag) (int, error)
} }
func (s *StepConnectWinRM) Run(_ context.Context, state multistep.StateBag) multistep.StepAction { func (s *StepConnectWinRM) Run(_ context.Context, state multistep.StateBag) multistep.StepAction {

View File

@ -56,7 +56,7 @@ type ClientConfig struct {
// The minimum and maximum port to use for communicating with // The minimum and maximum port to use for communicating with
// the subprocess. If not set, this defaults to 10,000 and 25,000 // the subprocess. If not set, this defaults to 10,000 and 25,000
// respectively. // respectively.
MinPort, MaxPort uint MinPort, MaxPort int
// StartTimeout is the timeout to wait for the plugin to say it // StartTimeout is the timeout to wait for the plugin to say it
// has started successfully. // has started successfully.

View File

@ -52,7 +52,7 @@ type Config struct {
EmptyGroups []string `mapstructure:"empty_groups"` EmptyGroups []string `mapstructure:"empty_groups"`
HostAlias string `mapstructure:"host_alias"` HostAlias string `mapstructure:"host_alias"`
User string `mapstructure:"user"` User string `mapstructure:"user"`
LocalPort uint `mapstructure:"local_port"` LocalPort int `mapstructure:"local_port"`
SSHHostKeyFile string `mapstructure:"ssh_host_key_file"` SSHHostKeyFile string `mapstructure:"ssh_host_key_file"`
SSHAuthorizedKeyFile string `mapstructure:"ssh_authorized_key_file"` SSHAuthorizedKeyFile string `mapstructure:"ssh_authorized_key_file"`
SFTPCmd string `mapstructure:"sftp_command"` SFTPCmd string `mapstructure:"sftp_command"`
@ -271,12 +271,11 @@ func (p *Provisioner) Provision(ui packer.Ui, comm packer.Communicator) error {
ui.Say(err.Error()) ui.Say(err.Error())
continue continue
} }
portUint64, err := strconv.ParseUint(portStr, 10, 0) p.config.LocalPort, err = strconv.Atoi(portStr)
if err != nil { if err != nil {
ui.Say(err.Error()) ui.Say(err.Error())
continue continue
} }
p.config.LocalPort = uint(portUint64)
return l, nil return l, nil
} }
return nil, errors.New("Error setting up SSH proxy connection") return nil, errors.New("Error setting up SSH proxy connection")

View File

@ -245,13 +245,13 @@ func TestProvisionerPrepare_LocalPort(t *testing.T) {
config["ssh_authorized_key_file"] = publickey_file.Name() config["ssh_authorized_key_file"] = publickey_file.Name()
config["playbook_file"] = playbook_file.Name() config["playbook_file"] = playbook_file.Name()
config["local_port"] = uint(65537) config["local_port"] = 65537
err = p.Prepare(config) err = p.Prepare(config)
if err == nil { if err == nil {
t.Fatal("should have error") t.Fatal("should have error")
} }
config["local_port"] = uint(22222) config["local_port"] = 22222
err = p.Prepare(config) err = p.Prepare(config)
if err != nil { if err != nil {
t.Fatalf("err: %s", err) t.Fatalf("err: %s", err)

View File

@ -52,7 +52,7 @@ type Config struct {
Backend string `mapstructure:"backend"` Backend string `mapstructure:"backend"`
User string `mapstructure:"user"` User string `mapstructure:"user"`
Host string `mapstructure:"host"` Host string `mapstructure:"host"`
LocalPort uint `mapstructure:"local_port"` LocalPort int `mapstructure:"local_port"`
SSHHostKeyFile string `mapstructure:"ssh_host_key_file"` SSHHostKeyFile string `mapstructure:"ssh_host_key_file"`
SSHAuthorizedKeyFile string `mapstructure:"ssh_authorized_key_file"` SSHAuthorizedKeyFile string `mapstructure:"ssh_authorized_key_file"`
} }
@ -264,12 +264,11 @@ func (p *Provisioner) Provision(ui packer.Ui, comm packer.Communicator) error {
ui.Say(err.Error()) ui.Say(err.Error())
continue continue
} }
portUint64, err := strconv.ParseUint(portStr, 10, 0) p.config.LocalPort, err = strconv.Atoi(portStr)
if err != nil { if err != nil {
ui.Say(err.Error()) ui.Say(err.Error())
continue continue
} }
p.config.LocalPort = uint(portUint64)
return l, nil return l, nil
} }
return nil, errors.New("Error setting up SSH proxy connection") return nil, errors.New("Error setting up SSH proxy connection")
@ -338,7 +337,7 @@ func (p *Provisioner) executeInspec(ui packer.Ui, comm packer.Communicator, priv
args = append(args, "--key-files", privKeyFile) args = append(args, "--key-files", privKeyFile)
} }
args = append(args, "--user", p.config.User) args = append(args, "--user", p.config.User)
args = append(args, "--port", strconv.FormatUint(uint64(p.config.LocalPort), 10)) args = append(args, "--port", strconv.Itoa(p.config.LocalPort))
} }
args = append(args, "--attrs") args = append(args, "--attrs")

View File

@ -254,13 +254,13 @@ func TestProvisionerPrepare_LocalPort(t *testing.T) {
config["ssh_authorized_key_file"] = publickey_file.Name() config["ssh_authorized_key_file"] = publickey_file.Name()
config["profile"] = profile_file.Name() config["profile"] = profile_file.Name()
config["local_port"] = uint(65537) config["local_port"] = 65537
err = p.Prepare(config) err = p.Prepare(config)
if err == nil { if err == nil {
t.Fatal("should have error") t.Fatal("should have error")
} }
config["local_port"] = uint(22222) config["local_port"] = 22222
err = p.Prepare(config) err = p.Prepare(config)
if err != nil { if err != nil {
t.Fatalf("err: %s", err) t.Fatalf("err: %s", err)