Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Obtaing the ip address of the guest and update address cache #3935

Merged
merged 1 commit into from
Aug 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions virttest/utils_net.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
utils_misc,
utils_package,
utils_selinux,
virsh,
)
from virttest.remote import RemoteRunner
from virttest.staging import service, utils_memory
Expand Down Expand Up @@ -4867,3 +4868,21 @@ def check_class_rules(ifname, rule_id, bandwidth):
stacktrace.log_exc_info(sys.exc_info())
return False
return True

def obtain_guest_ip_from_dhcp_leases(mac):
"""
Obtaining the guest ip address from virsh-net-dhcp-leases command

:param: Mac address of the guest
:return: return ip-address if found for given mac in the
virsh-net-dhcp-leases default table, else return None
"""
output = virsh.net_dhcp_leases("default")
lines = output.stdout.splitlines()
for line in lines:
if mac in line:
parts = line.split()
for part in parts:
if '/' in part:
return part.split('/')[0]
return None
9 changes: 5 additions & 4 deletions virttest/virt_vm.py
Original file line number Diff line number Diff line change
Expand Up @@ -935,10 +935,11 @@ def _get_address():

ipaddr = utils_misc.wait_for(_get_address, timeout, step=interval)
if not ipaddr:
# Read guest address via serial console and update VM address
# cache to avoid get out-dated address.
utils_net.update_mac_ip_address(self, timeout)
ipaddr = self.get_address(nic_index, ip_version)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The function "utils_net.update_mac_ip_address" is trying to do serial login (create session and login) and then update the mac_ip_address in address.cache but as there is no ip address, the connection to serial console fails and following function self.get_address also fails.
Hence removing this approach and trying to get the ip address from virsh-net-dhcp-leases command

# obatining ip address from virsh-net-dhcp-leases command
mac = self.get_mac_address(nic_index).lower()
ipaddr = utils_net.obtain_guest_ip_from_dhcp_leases(mac)
# updating cache with the latest ip address value
self.address_cache[mac] = ipaddr
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @TasmiyaNalatwad Could you please help redesign this part? Because of the current usage let all the releated
nic_hotplug cases failed which blocking my test.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @yanglei-rh there is patch already shared by @luckyh #3989 to revert this patch, Which would unblock your tests. Also i will share the new patch with the approach we had discussed in above comments soon.

Thank you.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Got it, thanks a lot.

msg = "Found/Verified IP %s for VM %s NIC %s" % (ipaddr, self.name, nic_index)
LOG.debug(msg)
return ipaddr
Expand Down