mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 01:32:18 +02:00
VMware: match nic mac for ip address fetch (#10641)
This commit is contained in:
parent
e12813de49
commit
8e4dc0a66d
@ -5837,11 +5837,20 @@ public class VmwareResource extends ServerResourceBase implements StoragePoolRes
|
||||
if (toolsStatus == VirtualMachineToolsStatus.TOOLS_NOT_INSTALLED) {
|
||||
details += "Vmware tools not installed.";
|
||||
} else {
|
||||
ip = guestInfo.getIpAddress();
|
||||
if (ip != null) {
|
||||
result = true;
|
||||
var normalizedMac = cmd.getMacAddress().replaceAll("-", ":");
|
||||
for(var guestInfoNic : guestInfo.getNet()) {
|
||||
var normalizedNicMac = guestInfoNic.getMacAddress().replaceAll("-", ":");
|
||||
if (!result && normalizedNicMac.equalsIgnoreCase(normalizedMac)) {
|
||||
result = true;
|
||||
details = null;
|
||||
for (var ipAddr : guestInfoNic.getIpAddress()) {
|
||||
if (NetUtils.isValidIp4(ipAddr) && (cmd.getVmNetworkCidr() == null || NetUtils.isIpWithInCidrRange(ipAddr, cmd.getVmNetworkCidr()))) {
|
||||
details = ipAddr;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
details = ip;
|
||||
}
|
||||
} else {
|
||||
details += "VM " + vmName + " no longer exists on vSphere host: " + hyperHost.getHyperHostName();
|
||||
|
||||
@ -753,7 +753,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
||||
String networkCidr;
|
||||
String macAddress;
|
||||
|
||||
public VmIpAddrFetchThread(long vmId, long nicId, String instanceName, boolean windows, Long hostId, String networkCidr, String macAddress) {
|
||||
public VmIpAddrFetchThread(long vmId, String vmUuid, long nicId, String instanceName, boolean windows, Long hostId, String networkCidr, String macAddress) {
|
||||
this.vmId = vmId;
|
||||
this.vmUuid = vmUuid;
|
||||
this.nicId = nicId;
|
||||
@ -775,8 +775,13 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
||||
Answer answer = _agentMgr.send(hostId, cmd);
|
||||
if (answer.getResult()) {
|
||||
String vmIp = answer.getDetails();
|
||||
|
||||
if (NetUtils.isValidIp4(vmIp)) {
|
||||
if (vmIp == null) {
|
||||
// we got a valid response and the NIC does not have an IP assigned, as such we will update the database with null
|
||||
if (nic.getIPv4Address() != null) {
|
||||
nic.setIPv4Address(null);
|
||||
_nicDao.update(nicId, nic);
|
||||
}
|
||||
} else if (NetUtils.isValidIp4(vmIp)) {
|
||||
// set this vm ip addr in vm nic.
|
||||
if (nic != null) {
|
||||
nic.setIPv4Address(vmIp);
|
||||
@ -791,12 +796,8 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//previously vm has ip and nic table has ip address. After vm restart or stop/start
|
||||
//if vm doesnot get the ip then set the ip in nic table to null
|
||||
if (nic.getIPv4Address() != null) {
|
||||
nic.setIPv4Address(null);
|
||||
_nicDao.update(nicId, nic);
|
||||
}
|
||||
// since no changes are being done, we should not decrement IP usage
|
||||
decrementCount = false;
|
||||
if (answer.getDetails() != null) {
|
||||
logger.debug("Failed to get vm ip for Vm [id: {}, uuid: {}, name: {}], details: {}",
|
||||
vmId, vmUuid, vmName, answer.getDetails());
|
||||
@ -2693,7 +2694,8 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
||||
VirtualMachineProfile vmProfile = new VirtualMachineProfileImpl(userVm);
|
||||
VirtualMachine vm = vmProfile.getVirtualMachine();
|
||||
boolean isWindows = _guestOSCategoryDao.findById(_guestOSDao.findById(vm.getGuestOSId()).getCategoryId()).getName().equalsIgnoreCase("Windows");
|
||||
_vmIpFetchThreadExecutor.execute(new VmIpAddrFetchThread(vmId, nicId, vmInstance.getInstanceName(),
|
||||
|
||||
_vmIpFetchThreadExecutor.execute(new VmIpAddrFetchThread(vmId, vmInstance.getUuid(), nicId, vmInstance.getInstanceName(),
|
||||
isWindows, vm.getHostId(), network.getCidr(), nicVo.getMacAddress()));
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user