diff --git a/builder/cloudstack/config.go b/builder/cloudstack/config.go index f74a89502..5be4c58b1 100644 --- a/builder/cloudstack/config.go +++ b/builder/cloudstack/config.go @@ -37,7 +37,7 @@ type Config struct { Network string `mapstructure:"network"` Project string `mapstructure:"project"` PublicIPAddress string `mapstructure:"public_ip_address"` - PublicPort int `mapstructure:"public_port"` + PublicPort uint `mapstructure:"public_port"` SecurityGroups []string `mapstructure:"security_groups"` ServiceOffering string `mapstructure:"service_offering"` PreventFirewallChanges bool `mapstructure:"prevent_firewall_changes"` diff --git a/builder/cloudstack/ssh.go b/builder/cloudstack/ssh.go index ec9fbe123..f50c7e77d 100644 --- a/builder/cloudstack/ssh.go +++ b/builder/cloudstack/ssh.go @@ -15,8 +15,8 @@ func commHost(state multistep.StateBag) (string, error) { return ip, nil } -func commPort(state multistep.StateBag) (int, error) { - commPort, hasPort := state.Get("commPort").(int) +func commPort(state multistep.StateBag) (uint, error) { + commPort, hasPort := state.Get("commPort").(uint) if !hasPort { return 0, fmt.Errorf("Failed to retrieve communication port") } diff --git a/builder/cloudstack/step_configure_networking.go b/builder/cloudstack/step_configure_networking.go index 39636b54f..a08280f9c 100644 --- a/builder/cloudstack/step_configure_networking.go +++ b/builder/cloudstack/step_configure_networking.go @@ -13,8 +13,8 @@ import ( ) type stepSetupNetworking struct { - privatePort int - publicPort int + privatePort uint + publicPort uint } 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 { // Generate a random public port used to configure our port forward. rand.Seed(time.Now().UnixNano()) - s.publicPort = 50000 + rand.Intn(10000) + s.publicPort = uint(50000 + rand.Intn(10000)) } state.Put("commPort", s.publicPort) @@ -99,9 +99,9 @@ func (s *stepSetupNetworking) Run(_ context.Context, state multistep.StateBag) m ui.Message("Creating port forward...") p := client.Firewall.NewCreatePortForwardingRuleParams( config.PublicIPAddress, - s.privatePort, + int(s.privatePort), "TCP", - s.publicPort, + int(s.publicPort), instanceID, ) @@ -143,8 +143,8 @@ func (s *stepSetupNetworking) Run(_ context.Context, state multistep.StateBag) m p.SetAclid(network.Aclid) p.SetAction("allow") p.SetCidrlist(config.CIDRList) - p.SetStartport(s.privatePort) - p.SetEndport(s.privatePort) + p.SetStartport(int(s.privatePort)) + p.SetEndport(int(s.privatePort)) p.SetTraffictype("ingress") // Create the network ACL rule. @@ -166,8 +166,8 @@ func (s *stepSetupNetworking) Run(_ context.Context, state multistep.StateBag) m // Configure the firewall rule. p.SetCidrlist(config.CIDRList) - p.SetStartport(s.publicPort) - p.SetEndport(s.publicPort) + p.SetStartport(int(s.publicPort)) + p.SetEndport(int(s.publicPort)) fwRule, err := client.Firewall.CreateFirewallRule(p) if err != nil { diff --git a/builder/cloudstack/step_create_security_group.go b/builder/cloudstack/step_create_security_group.go index c42eec5d5..1e3e251bc 100644 --- a/builder/cloudstack/step_create_security_group.go +++ b/builder/cloudstack/step_create_security_group.go @@ -54,8 +54,8 @@ func (s *stepCreateSecurityGroup) Run(_ context.Context, state multistep.StateBa i.SetCidrlist(config.CIDRList) i.SetProtocol("TCP") i.SetSecuritygroupid(sg.Id) - i.SetStartport(config.Comm.Port()) - i.SetEndport(config.Comm.Port()) + i.SetStartport(int(config.Comm.Port())) + i.SetEndport(int(config.Comm.Port())) if config.Project != "" { i.SetProjectid(config.Project) } diff --git a/builder/qemu/builder.go b/builder/qemu/builder.go index b03adfc28..c30f22f3e 100644 --- a/builder/qemu/builder.go +++ b/builder/qemu/builder.go @@ -120,8 +120,8 @@ type Config struct { SSHHostPortMax uint `mapstructure:"ssh_host_port_max"` UseDefaultDisplay bool `mapstructure:"use_default_display"` VNCBindAddress string `mapstructure:"vnc_bind_address"` - VNCPortMin int `mapstructure:"vnc_port_min"` - VNCPortMax int `mapstructure:"vnc_port_max"` + VNCPortMin uint `mapstructure:"vnc_port_min"` + VNCPortMax uint `mapstructure:"vnc_port_max"` VMName string `mapstructure:"vm_name"` // These are deprecated, but we keep them around for BC diff --git a/builder/qemu/ssh.go b/builder/qemu/ssh.go index ec030df2e..b2f6ed150 100644 --- a/builder/qemu/ssh.go +++ b/builder/qemu/ssh.go @@ -8,7 +8,7 @@ func commHost(state multistep.StateBag) (string, error) { return "127.0.0.1", nil } -func commPort(state multistep.StateBag) (int, error) { +func commPort(state multistep.StateBag) (uint, error) { sshHostPort := state.Get("sshHostPort").(uint) - return int(sshHostPort), nil + return sshHostPort, nil } diff --git a/builder/vagrant/ssh.go b/builder/vagrant/ssh.go index d4a56cb17..4b4f23650 100644 --- a/builder/vagrant/ssh.go +++ b/builder/vagrant/ssh.go @@ -11,8 +11,8 @@ func CommHost() func(multistep.StateBag) (string, error) { } } -func SSHPort() func(multistep.StateBag) (int, error) { - return func(state multistep.StateBag) (int, error) { +func SSHPort() func(multistep.StateBag) (uint, error) { + return func(state multistep.StateBag) (uint, error) { config := state.Get("config").(*Config) return config.Comm.SSHPort, nil } diff --git a/builder/vagrant/step_ssh_config.go b/builder/vagrant/step_ssh_config.go index 68fc13aa3..2a5a878e2 100644 --- a/builder/vagrant/step_ssh_config.go +++ b/builder/vagrant/step_ssh_config.go @@ -44,7 +44,7 @@ func (s *StepSSHConfig) Run(_ context.Context, state multistep.StateBag) multist state.Put("error", err) return multistep.ActionHalt } - config.Comm.SSHPort = port + config.Comm.SSHPort = uint(port) return multistep.ActionContinue } diff --git a/builder/virtualbox/common/run_config.go b/builder/virtualbox/common/run_config.go index e5cae02a6..cf94c306b 100644 --- a/builder/virtualbox/common/run_config.go +++ b/builder/virtualbox/common/run_config.go @@ -10,8 +10,8 @@ type RunConfig struct { Headless bool `mapstructure:"headless"` VRDPBindAddress string `mapstructure:"vrdp_bind_address"` - VRDPPortMin int `mapstructure:"vrdp_port_min"` - VRDPPortMax int `mapstructure:"vrdp_port_max"` + VRDPPortMin uint `mapstructure:"vrdp_port_min"` + VRDPPortMax uint `mapstructure:"vrdp_port_max"` } func (c *RunConfig) Prepare(ctx *interpolate.Context) (errs []error) { diff --git a/builder/virtualbox/common/ssh.go b/builder/virtualbox/common/ssh.go index 7734dc6b2..494274e15 100644 --- a/builder/virtualbox/common/ssh.go +++ b/builder/virtualbox/common/ssh.go @@ -10,7 +10,7 @@ func CommHost(host string) func(multistep.StateBag) (string, error) { } } -func SSHPort(state multistep.StateBag) (int, error) { - sshHostPort := state.Get("sshHostPort").(int) +func SSHPort(state multistep.StateBag) (uint, error) { + sshHostPort := state.Get("sshHostPort").(uint) return sshHostPort, nil } diff --git a/builder/virtualbox/common/ssh_config.go b/builder/virtualbox/common/ssh_config.go index 10159cc86..3136bca98 100644 --- a/builder/virtualbox/common/ssh_config.go +++ b/builder/virtualbox/common/ssh_config.go @@ -11,8 +11,8 @@ import ( type SSHConfig struct { Comm communicator.Config `mapstructure:",squash"` - SSHHostPortMin int `mapstructure:"ssh_host_port_min"` - SSHHostPortMax int `mapstructure:"ssh_host_port_max"` + SSHHostPortMin uint `mapstructure:"ssh_host_port_min"` + SSHHostPortMax uint `mapstructure:"ssh_host_port_max"` SSHSkipNatMapping bool `mapstructure:"ssh_skip_nat_mapping"` // These are deprecated, but we keep them around for BC diff --git a/builder/virtualbox/common/step_configure_vrdp.go b/builder/virtualbox/common/step_configure_vrdp.go index 54bde727b..ea14723d3 100644 --- a/builder/virtualbox/common/step_configure_vrdp.go +++ b/builder/virtualbox/common/step_configure_vrdp.go @@ -22,8 +22,8 @@ import ( // vrdp_port unit - The port that VRDP is configured to listen on. type StepConfigureVRDP struct { VRDPBindAddress string - VRDPPortMin int - VRDPPortMax int + VRDPPortMin uint + VRDPPortMax uint l *net.Listener } diff --git a/builder/virtualbox/common/step_forward_ssh.go b/builder/virtualbox/common/step_forward_ssh.go index 345b9c55f..5f5c6fd62 100644 --- a/builder/virtualbox/common/step_forward_ssh.go +++ b/builder/virtualbox/common/step_forward_ssh.go @@ -22,8 +22,8 @@ import ( // Produces: type StepForwardSSH struct { CommConfig *communicator.Config - HostPortMin int - HostPortMax int + HostPortMin uint + HostPortMax uint SkipNatMapping bool l *net.Listener @@ -40,7 +40,7 @@ func (s *StepForwardSSH) Run(ctx context.Context, state multistep.StateBag) mult return multistep.ActionContinue } - guestPort := s.CommConfig.Port() + guestPort := uint(s.CommConfig.Port()) sshHostPort := guestPort if !s.SkipNatMapping { log.Printf("Looking for available communicator (SSH, WinRM, etc) port between %d and %d", diff --git a/builder/vmware/common/run_config.go b/builder/vmware/common/run_config.go index e8b6a3d37..c4bfc3413 100644 --- a/builder/vmware/common/run_config.go +++ b/builder/vmware/common/run_config.go @@ -10,8 +10,8 @@ type RunConfig struct { Headless bool `mapstructure:"headless"` VNCBindAddress string `mapstructure:"vnc_bind_address"` - VNCPortMin int `mapstructure:"vnc_port_min"` - VNCPortMax int `mapstructure:"vnc_port_max"` + VNCPortMin uint `mapstructure:"vnc_port_min"` + VNCPortMax uint `mapstructure:"vnc_port_max"` VNCDisablePassword bool `mapstructure:"vnc_disable_password"` } diff --git a/builder/vmware/common/step_configure_vnc.go b/builder/vmware/common/step_configure_vnc.go index 284c58edd..b3ef92bf3 100644 --- a/builder/vmware/common/step_configure_vnc.go +++ b/builder/vmware/common/step_configure_vnc.go @@ -18,12 +18,12 @@ import ( // vmx_path string // // Produces: -// vnc_port int - The port that VNC is configured to listen on. +// vnc_port uint - The port that VNC is configured to listen on. type StepConfigureVNC struct { Enabled bool VNCBindAddress string - VNCPortMin int - VNCPortMax int + VNCPortMin uint + VNCPortMax uint VNCDisablePassword bool l *net.Listener @@ -31,7 +31,7 @@ type StepConfigureVNC struct { type VNCAddressFinder interface { // UpdateVMX, sets driver specific VNC values to VMX data. - UpdateVMX(vncAddress, vncPassword string, vncPort int, vmxData map[string]string) + UpdateVMX(vncAddress, vncPassword string, vncPort uint, vmxData map[string]string) } func VNCPassword(skipPassword bool) string { @@ -105,12 +105,14 @@ func (s *StepConfigureVNC) Run(ctx context.Context, state multistep.StateBag) mu return multistep.ActionHalt } + state.Put("vnc_port", s.l.Port) + state.Put("vnc_ip", s.l.Address) state.Put("vnc_password", vncPassword) return multistep.ActionContinue } -func (*StepConfigureVNC) UpdateVMX(address, password string, port int, data map[string]string) { +func (StepConfigureVNC) UpdateVMX(address, password string, port uint, data map[string]string) { data["remotedisplay.vnc.enabled"] = "TRUE" data["remotedisplay.vnc.port"] = fmt.Sprintf("%d", port) data["remotedisplay.vnc.ip"] = address diff --git a/common/http_config.go b/common/http_config.go index 8a6809ac4..bb9b46b26 100644 --- a/common/http_config.go +++ b/common/http_config.go @@ -9,8 +9,8 @@ import ( // HTTPConfig contains configuration for the local HTTP Server type HTTPConfig struct { HTTPDir string `mapstructure:"http_directory"` - HTTPPortMin int `mapstructure:"http_port_min"` - HTTPPortMax int `mapstructure:"http_port_max"` + HTTPPortMin uint `mapstructure:"http_port_min"` + HTTPPortMax uint `mapstructure:"http_port_max"` } func (c *HTTPConfig) Prepare(ctx *interpolate.Context) []error { diff --git a/common/net/configure_port.go b/common/net/configure_port.go index cb1fe66bf..91fbf5f17 100644 --- a/common/net/configure_port.go +++ b/common/net/configure_port.go @@ -7,7 +7,6 @@ import ( "log" "math/rand" "net" - "strconv" "github.com/gofrs/flock" @@ -25,7 +24,7 @@ type Listener struct { // Listener can be closed but Port will be file locked by packer until // Close is called. net.Listener - Port int + Port uint Address string lock *flock.Flock } @@ -44,7 +43,7 @@ type ListenRangeConfig struct { // tcp", "udp" Network string Addr string - Min, Max int + Min, Max uint net.ListenConfig } @@ -65,9 +64,9 @@ func (lc ListenRangeConfig) Listen(ctx context.Context) (*Listener, error) { return nil, err } - port := rand.Intn(portRange) + lc.Min + port := uint(rand.Intn(portRange)) + lc.Min - lockFilePath, err := packer.CachePath("port", strconv.Itoa(port)) + lockFilePath, err := packer.CachePath("port", fmt.Sprintf("%d", port)) if err != nil { return nil, err } diff --git a/common/step_http_server.go b/common/step_http_server.go index b4eb7b00e..282d4f969 100644 --- a/common/step_http_server.go +++ b/common/step_http_server.go @@ -23,8 +23,8 @@ import ( // http_port int - The port the HTTP server started on. type StepHTTPServer struct { HTTPDir string - HTTPPortMin int - HTTPPortMax int + HTTPPortMin uint + HTTPPortMax uint l *net.Listener } diff --git a/communicator/winrm/communicator.go b/communicator/winrm/communicator.go index fc639ccb0..09f125508 100644 --- a/communicator/winrm/communicator.go +++ b/communicator/winrm/communicator.go @@ -27,7 +27,7 @@ type Communicator struct { func New(config *Config) (*Communicator, error) { endpoint := &winrm.Endpoint{ Host: config.Host, - Port: config.Port, + Port: int(config.Port), // it's a uint HTTPS: config.Https, Insecure: config.Insecure, diff --git a/communicator/winrm/config.go b/communicator/winrm/config.go index 728336734..44ec989c0 100644 --- a/communicator/winrm/config.go +++ b/communicator/winrm/config.go @@ -9,7 +9,7 @@ import ( // Config is used to configure the WinRM connection type Config struct { Host string - Port int + Port uint Username string Password string Timeout time.Duration diff --git a/helper/communicator/config.go b/helper/communicator/config.go index fa02810d7..80d148e63 100644 --- a/helper/communicator/config.go +++ b/helper/communicator/config.go @@ -25,7 +25,7 @@ type Config struct { // SSH SSHHost string `mapstructure:"ssh_host"` - SSHPort int `mapstructure:"ssh_port"` + SSHPort uint `mapstructure:"ssh_port"` SSHUsername string `mapstructure:"ssh_username"` SSHPassword string `mapstructure:"ssh_password"` SSHKeyPairName string `mapstructure:"ssh_keypair_name"` @@ -60,7 +60,7 @@ type Config struct { WinRMUser string `mapstructure:"winrm_username"` WinRMPassword string `mapstructure:"winrm_password"` WinRMHost string `mapstructure:"winrm_host"` - WinRMPort int `mapstructure:"winrm_port"` + WinRMPort uint `mapstructure:"winrm_port"` WinRMTimeout time.Duration `mapstructure:"winrm_timeout"` WinRMUseSSL bool `mapstructure:"winrm_use_ssl"` 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. -func (c *Config) Port() int { +func (c *Config) Port() uint { switch c.Type { case "ssh": return c.SSHPort diff --git a/helper/communicator/step_connect.go b/helper/communicator/step_connect.go index 6bb062f80..eed1fe7b4 100644 --- a/helper/communicator/step_connect.go +++ b/helper/communicator/step_connect.go @@ -28,14 +28,14 @@ type StepConnect struct { // SSHConfig should return the default configuration for // connecting via SSH. SSHConfig func(multistep.StateBag) (*gossh.ClientConfig, error) - SSHPort func(multistep.StateBag) (int, error) + SSHPort func(multistep.StateBag) (uint, error) // The fields below are callbacks to assist with connecting to WinRM. // // WinRMConfig should return the default configuration for // connecting via WinRM. WinRMConfig func(multistep.StateBag) (*WinRMConfig, error) - WinRMPort func(multistep.StateBag) (int, error) + WinRMPort func(multistep.StateBag) (uint, error) // CustomConnect can be set to have custom connectors for specific // types. These take highest precedence so you can also override diff --git a/helper/communicator/step_connect_ssh.go b/helper/communicator/step_connect_ssh.go index 37db32eae..6d6c10271 100644 --- a/helper/communicator/step_connect_ssh.go +++ b/helper/communicator/step_connect_ssh.go @@ -27,7 +27,7 @@ type StepConnectSSH struct { Config *Config Host func(multistep.StateBag) (string, error) SSHConfig func(multistep.StateBag) (*gossh.ClientConfig, error) - SSHPort func(multistep.StateBag) (int, error) + SSHPort func(multistep.StateBag) (uint, error) } func (s *StepConnectSSH) Run(_ context.Context, state multistep.StateBag) multistep.StepAction { diff --git a/helper/communicator/step_connect_winrm.go b/helper/communicator/step_connect_winrm.go index 06e6236f8..6c7e5d456 100644 --- a/helper/communicator/step_connect_winrm.go +++ b/helper/communicator/step_connect_winrm.go @@ -30,7 +30,7 @@ type StepConnectWinRM struct { Config *Config Host func(multistep.StateBag) (string, error) WinRMConfig func(multistep.StateBag) (*WinRMConfig, error) - WinRMPort func(multistep.StateBag) (int, error) + WinRMPort func(multistep.StateBag) (uint, error) } func (s *StepConnectWinRM) Run(_ context.Context, state multistep.StateBag) multistep.StepAction {