Merge pull request #2790 from daehyeok/vmwarefusion_dhcp

VMWARE Fusion get IP from multiple leases files
This commit is contained in:
David Gageot 2016-01-15 16:46:54 +01:00
commit dd5dd5d178
1 changed files with 28 additions and 13 deletions

View File

@ -449,19 +449,10 @@ func (d *Driver) vmdkPath() string {
}
func (d *Driver) getIPfromDHCPLease() (string, error) {
var vmxfh *os.File
var dhcpfh *os.File
var vmxcontent []byte
var dhcpcontent []byte
var macaddr string
var err error
var lastipmatch string
var currentip string
var lastleaseendtime time.Time
var currentleadeendtime time.Time
// DHCP lease table for NAT vmnet interface
var dhcpfile = "/var/db/vmware/vmnet-dhcpd-vmnet8.leases"
var vmxfh *os.File
var vmxcontent []byte
var err error
if vmxfh, err = os.Open(d.vmxPath()); err != nil {
return "", err
@ -473,6 +464,7 @@ func (d *Driver) getIPfromDHCPLease() (string, error) {
}
// Look for generatedAddress as we're passing a VMX with addressType = "generated".
var macaddr string
vmxparse := regexp.MustCompile(`^ethernet0.generatedAddress\s*=\s*"(.*?)"\s*$`)
for _, line := range strings.Split(string(vmxcontent), "\n") {
if matches := vmxparse.FindStringSubmatch(line); matches == nil {
@ -487,6 +479,29 @@ func (d *Driver) getIPfromDHCPLease() (string, error) {
}
log.Debugf("MAC address in VMX: %s", macaddr)
// DHCP lease table for NAT vmnet interface
leasesFiles, _ := filepath.Glob("/var/db/vmware/*.leases")
for _, dhcpfile := range leasesFiles {
log.Debugf("Trying to find IP address in leases file: %s", dhcpfile)
if ipaddr, err := d.getIPfromDHCPLeaseFile(dhcpfile, macaddr); err == nil {
return ipaddr, err
}
}
return "", fmt.Errorf("IP not found for MAC %s in DHCP leases", macaddr)
}
func (d *Driver) getIPfromDHCPLeaseFile(dhcpfile, macaddr string) (string, error) {
var dhcpfh *os.File
var dhcpcontent []byte
var lastipmatch string
var currentip string
var lastleaseendtime time.Time
var currentleadeendtime time.Time
var err error
if dhcpfh, err = os.Open(dhcpfile); err != nil {
return "", err
}
@ -526,8 +541,8 @@ func (d *Driver) getIPfromDHCPLease() (string, error) {
}
log.Debugf("IP found in DHCP lease table: %s", currentip)
return currentip, nil
return currentip, nil
}
func (d *Driver) publicSSHKeyPath() string {