зеркало из https://github.com/microsoft/lisa.git
Raise exception when getting timeout for running cmd to detect OS
This commit is contained in:
Родитель
717e7c400b
Коммит
71701aadc8
|
@ -59,6 +59,17 @@ if TYPE_CHECKING:
|
||||||
_get_init_logger = partial(get_logger, name="os")
|
_get_init_logger = partial(get_logger, name="os")
|
||||||
|
|
||||||
|
|
||||||
|
def get_matched_os_name(cmd_result: ExecutableResult, pattern: Pattern[str]) -> str:
|
||||||
|
# Check if the command is timedout. If it is, the system might be in a bad state
|
||||||
|
# Then raise an exception to avoid more timedout commands.
|
||||||
|
if cmd_result.is_timeout:
|
||||||
|
raise LisaTimeoutException(
|
||||||
|
f"Command timed out: {cmd_result.cmd}. "
|
||||||
|
"Please check if the system allows to run command from remote."
|
||||||
|
)
|
||||||
|
return get_matched_str(cmd_result.stdout, pattern)
|
||||||
|
|
||||||
|
|
||||||
class CpuArchitecture(str, Enum):
|
class CpuArchitecture(str, Enum):
|
||||||
X64 = "x86_64"
|
X64 = "x86_64"
|
||||||
ARM64 = "aarch64"
|
ARM64 = "aarch64"
|
||||||
|
@ -215,47 +226,59 @@ class OperatingSystem:
|
||||||
@classmethod
|
@classmethod
|
||||||
def _get_detect_string(cls, node: Any) -> Iterable[str]:
|
def _get_detect_string(cls, node: Any) -> Iterable[str]:
|
||||||
typed_node: Node = node
|
typed_node: Node = node
|
||||||
cmd_result = typed_node.execute(cmd="lsb_release -d", no_error_log=True)
|
cmd_result = typed_node.execute(
|
||||||
yield get_matched_str(cmd_result.stdout, cls.__lsb_release_pattern)
|
cmd="lsb_release -d", no_error_log=True, timeout=60
|
||||||
|
)
|
||||||
|
yield get_matched_os_name(cmd_result, cls.__lsb_release_pattern)
|
||||||
|
|
||||||
cmd_result = typed_node.execute(cmd="cat /etc/os-release", no_error_log=True)
|
cmd_result = typed_node.execute(
|
||||||
yield get_matched_str(cmd_result.stdout, cls.__os_release_pattern_name)
|
cmd="cat /etc/os-release", no_error_log=True, timeout=60
|
||||||
yield get_matched_str(cmd_result.stdout, cls.__os_release_pattern_id)
|
)
|
||||||
|
yield get_matched_os_name(cmd_result, cls.__os_release_pattern_name)
|
||||||
|
yield get_matched_os_name(cmd_result, cls.__os_release_pattern_id)
|
||||||
cmd_result_os_release = cmd_result
|
cmd_result_os_release = cmd_result
|
||||||
|
|
||||||
# for RedHat, CentOS 6.x
|
# for RedHat, CentOS 6.x
|
||||||
cmd_result = typed_node.execute(
|
cmd_result = typed_node.execute(
|
||||||
cmd="cat /etc/redhat-release", no_error_log=True
|
cmd="cat /etc/redhat-release", no_error_log=True, timeout=60
|
||||||
)
|
)
|
||||||
yield get_matched_str(cmd_result.stdout, cls.__redhat_release_pattern_header)
|
yield get_matched_os_name(cmd_result, cls.__redhat_release_pattern_header)
|
||||||
yield get_matched_str(cmd_result.stdout, cls.__redhat_release_pattern_bracket)
|
yield get_matched_os_name(cmd_result, cls.__redhat_release_pattern_bracket)
|
||||||
|
|
||||||
# for FreeBSD
|
# for FreeBSD
|
||||||
cmd_result = typed_node.execute(cmd="uname", no_error_log=True)
|
cmd_result = typed_node.execute(cmd="uname", no_error_log=True, timeout=60)
|
||||||
yield cmd_result.stdout
|
yield cmd_result.stdout
|
||||||
|
|
||||||
# for Debian
|
# for Debian
|
||||||
cmd_result = typed_node.execute(cmd="cat /etc/issue", no_error_log=True)
|
cmd_result = typed_node.execute(
|
||||||
yield get_matched_str(cmd_result.stdout, cls.__debian_issue_pattern)
|
cmd="cat /etc/issue", no_error_log=True, timeout=60
|
||||||
|
)
|
||||||
|
yield get_matched_os_name(cmd_result, cls.__debian_issue_pattern)
|
||||||
|
|
||||||
# note, cat /etc/*release doesn't work in some images, so try them one by one
|
# note, cat /etc/*release doesn't work in some images, so try them one by one
|
||||||
# try best for other distros, like Sapphire
|
# try best for other distros, like Sapphire
|
||||||
cmd_result = typed_node.execute(cmd="cat /etc/release", no_error_log=True)
|
cmd_result = typed_node.execute(
|
||||||
yield get_matched_str(cmd_result.stdout, cls.__release_pattern)
|
cmd="cat /etc/release", no_error_log=True, timeout=60
|
||||||
|
)
|
||||||
|
yield get_matched_os_name(cmd_result, cls.__release_pattern)
|
||||||
|
|
||||||
# try best for other distros, like VeloCloud
|
# try best for other distros, like VeloCloud
|
||||||
cmd_result = typed_node.execute(cmd="cat /etc/lsb-release", no_error_log=True)
|
cmd_result = typed_node.execute(
|
||||||
yield get_matched_str(cmd_result.stdout, cls.__release_pattern)
|
cmd="cat /etc/lsb-release", no_error_log=True, timeout=60
|
||||||
|
)
|
||||||
|
yield get_matched_os_name(cmd_result, cls.__release_pattern)
|
||||||
|
|
||||||
# try best for some suse derives, like netiq
|
# try best for some suse derives, like netiq
|
||||||
cmd_result = typed_node.execute(cmd="cat /etc/SuSE-release", no_error_log=True)
|
cmd_result = typed_node.execute(
|
||||||
yield get_matched_str(cmd_result.stdout, cls.__suse_release_pattern)
|
cmd="cat /etc/SuSE-release", no_error_log=True, timeout=60
|
||||||
|
)
|
||||||
|
yield get_matched_os_name(cmd_result, cls.__suse_release_pattern)
|
||||||
|
|
||||||
cmd_result = typed_node.execute(cmd="wcscli", no_error_log=True)
|
cmd_result = typed_node.execute(cmd="wcscli", no_error_log=True, timeout=60)
|
||||||
yield get_matched_str(cmd_result.stdout, cls.__bmc_release_pattern)
|
yield get_matched_os_name(cmd_result, cls.__bmc_release_pattern)
|
||||||
|
|
||||||
cmd_result = typed_node.execute(cmd="vmware -lv", no_error_log=True)
|
cmd_result = typed_node.execute(cmd="vmware -lv", no_error_log=True, timeout=60)
|
||||||
yield get_matched_str(cmd_result.stdout, cls.__vmware_esxi_release_pattern)
|
yield get_matched_os_name(cmd_result, cls.__vmware_esxi_release_pattern)
|
||||||
|
|
||||||
# try best from distros'family through ID_LIKE
|
# try best from distros'family through ID_LIKE
|
||||||
yield get_matched_str(
|
yield get_matched_str(
|
||||||
|
|
Загрузка…
Ссылка в новой задаче