Merge "Try to get a valid hypervisor_host from ssh config"

This commit is contained in:
Zuul 2024-07-29 11:54:27 +00:00 committed by Gerrit Code Review
commit 072f8c7e29

View File

@ -1351,30 +1351,44 @@ class BaseDisruptiveTempestTestCase(BaseTempestWhiteboxTestCase):
try:
cls.proxy_host_client.exec_command(
"timeout 10 ssh {} virsh list".format(WB_CONF.hypervisor_host))
cls.hypervisor_host = WB_CONF.hypervisor_host
return
except lib_exceptions.SSHExecCommandFailed:
LOG.debug("Attempt to execute virsh command on hypervisor_host: "
"'{}' failed. Trying to discover hypervisor host from "
".ssh/config file.".format(WB_CONF.hypervisor_host))
host = cls.proxy_host_client.exec_command(
r"grep 'Host.*\ hypervisor$' ~/.ssh/config "
"| cut -d' ' -f 2").strip()
try:
cls.proxy_host_client.exec_command(
"timeout 10 ssh {} virsh list".format(host))
except lib_exceptions.SSHExecCommandFailed:
raise cls.skipException(
"No access to virsh tool on hypervisor node. Please make sure "
"that hypervisor_host is configured properly and/or virsh "
"is deployed there.")
cls.hypervisor_host = host
@classmethod
def find_host_virsh_name(cls, host):
cmd = ("timeout 10 ssh {} sudo virsh list --all --name "
"| grep -w {}").format(
WB_CONF.hypervisor_host, host)
cls.hypervisor_host, host)
return cls.proxy_host_client.exec_command(cmd).strip()
@classmethod
def is_host_state_is_shut_off(cls, host):
cmd = ("timeout 10 ssh {} virsh list --state-shutoff | grep -w {} "
"|| true".format(WB_CONF.hypervisor_host, host))
"|| true".format(cls.hypervisor_host, host))
output = cls.proxy_host_client.exec_command(cmd)
return True if host in output else False
@classmethod
def is_host_loginable(cls, host):
cmd = "timeout 10 ssh {} ssh {} hostname || true".format(
WB_CONF.hypervisor_host, host)
cls.hypervisor_host, host)
output = cls.proxy_host_client.exec_command(cmd)
return True if host in output else False
@ -1383,7 +1397,7 @@ class BaseDisruptiveTempestTestCase(BaseTempestWhiteboxTestCase):
if not WB_CONF.run_power_operations_tests:
raise cls.skipException("Power operations are not allowed")
cmd = "timeout 10 ssh {} sudo virsh destroy {}".format(
WB_CONF.hypervisor_host, cls.find_host_virsh_name(host))
cls.hypervisor_host, cls.find_host_virsh_name(host))
cls.proxy_host_client.exec_command(cmd)
common_utils.wait_until_true(
lambda: cls.is_host_state_is_shut_off(host),
@ -1394,7 +1408,7 @@ class BaseDisruptiveTempestTestCase(BaseTempestWhiteboxTestCase):
if not WB_CONF.run_power_operations_tests:
raise cls.skipException("Power operations are not allowed")
cmd = "timeout 10 ssh {} sudo virsh start {}".format(
WB_CONF.hypervisor_host, cls.find_host_virsh_name(host))
cls.hypervisor_host, cls.find_host_virsh_name(host))
cls.proxy_host_client.exec_command(cmd)
# TODO(rsafrono): implement and apply additional health checks
common_utils.wait_until_true(
@ -1406,7 +1420,7 @@ class BaseDisruptiveTempestTestCase(BaseTempestWhiteboxTestCase):
if not WB_CONF.run_power_operations_tests:
raise cls.skipException("Power operations are not allowed")
cmd = "timeout 10 ssh {} sudo virsh reboot {}".format(
WB_CONF.hypervisor_host, cls.find_host_virsh_name(host))
cls.hypervisor_host, cls.find_host_virsh_name(host))
cls.proxy_host_client.exec_command(cmd)
common_utils.wait_until_true(
lambda: cls.is_host_loginable(host),
@ -1417,7 +1431,7 @@ class BaseDisruptiveTempestTestCase(BaseTempestWhiteboxTestCase):
"""
hosts = self.proxy_host_client.exec_command(
"timeout 10 ssh {} sudo virsh list --all --name".format(
WB_CONF.hypervisor_host)).strip().split()
self.hypervisor_host)).strip().split()
for host in hosts:
if self.is_host_state_is_shut_off(host):
self.power_on_host(host)