153 lines
7.0 KiB
Diff
153 lines
7.0 KiB
Diff
From 88f2784a4673edb9ff0a185ea43beccb5108ece0 Mon Sep 17 00:00:00 2001
|
|
From: wang-guangge <wangguangge@huawei.com>
|
|
Date: Fri, 22 Dec 2023 18:44:27 +0800
|
|
Subject: [PATCH] improve rollback_manage.py
|
|
|
|
---
|
|
ceres/manages/rollback_manage.py | 73 ++++++++++++++++++++++++++------
|
|
1 file changed, 61 insertions(+), 12 deletions(-)
|
|
|
|
diff --git a/ceres/manages/rollback_manage.py b/ceres/manages/rollback_manage.py
|
|
index 0f30d29..160a74c 100644
|
|
--- a/ceres/manages/rollback_manage.py
|
|
+++ b/ceres/manages/rollback_manage.py
|
|
@@ -237,19 +237,67 @@ class RollbackManage:
|
|
log.append(result_log)
|
|
if result_code != TaskExecuteRes.SUCCEED:
|
|
return TaskExecuteRes.FAIL, os.linesep.join(log)
|
|
+
|
|
+ result_code, result_log = self._remove_kernel_rpm(installed_rpm)
|
|
+ if result_log:
|
|
+ log.append(result_log)
|
|
+ if result_code != TaskExecuteRes.SUCCEED:
|
|
+ return TaskExecuteRes.FAIL, os.linesep.join(log)
|
|
|
|
result_code, result_log = self._change_boot_kernel_version(target_rpm)
|
|
if result_log:
|
|
log.append(result_log)
|
|
if result_code != TaskExecuteRes.SUCCEED:
|
|
return TaskExecuteRes.FAIL, os.linesep.join(log)
|
|
-
|
|
+
|
|
return TaskExecuteRes.SUCCEED, os.linesep.join(log)
|
|
-
|
|
+
|
|
+ def _remove_kernel_rpm(self, installed_rpm: str) -> Tuple[str, str]:
|
|
+ """
|
|
+ Remove the kernel rpm if the installed kernel rpm is not in use.
|
|
+
|
|
+ Args:
|
|
+ installed_rpm(str): the installed kernel in executed fix task
|
|
+
|
|
+ Returns:
|
|
+ Tuple[str, str]: a tuple containing two elements (remove result, log)
|
|
+ """
|
|
+ code, stdout, stderr = execute_shell_command(f"rpm -qa | grep {installed_rpm}")
|
|
+ # 'rpm -qa' shows installed rpm
|
|
+ # e.g.
|
|
+ # [root@openEuler ~]# rpm -qa | grep kernel-4.19.90-2112.8.0.0131.oe1.x86_64
|
|
+ # kernel-4.19.90-2112.8.0.0131.oe1.x86_64
|
|
+ if code != CommandExitCode.SUCCEED or installed_rpm not in stdout:
|
|
+ tmp_log = f"The {installed_rpm} is not installed. Please check the input parameter."
|
|
+ LOGGER.error(tmp_log)
|
|
+ return TaskExecuteRes.FAIL, tmp_log
|
|
+
|
|
+ code, current_evra, stderr = execute_shell_command(f"uname -r")
|
|
+ # 'uname -r' show the kernel version-release.arch of the current system
|
|
+ # e.g.
|
|
+ # [root@openEuler ~]# uname -r
|
|
+ # 5.10.0-136.12.0.86.oe2203sp1.x86_64
|
|
+ if code != CommandExitCode.SUCCEED:
|
|
+ LOGGER.error(stderr)
|
|
+ return TaskExecuteRes.FAIL, current_evra + stderr
|
|
+
|
|
+ # version-release.arch
|
|
+ installed_evra = installed_rpm.split("-", 1)[1]
|
|
+
|
|
+ if installed_evra == current_evra:
|
|
+ return TaskExecuteRes.SUCCEED, f"Preserve the {installed_rpm} due to it is in use."
|
|
+
|
|
+ code, stdout, stderr = execute_shell_command(f"dnf remove {installed_rpm} -y")
|
|
+ if code != CommandExitCode.SUCCEED:
|
|
+ LOGGER.error(stderr)
|
|
+ return TaskExecuteRes.FAIL, stdout + stderr
|
|
+
|
|
+ return TaskExecuteRes.SUCCEED, stdout
|
|
+
|
|
def _check_boot_kernel_version(self, installed_rpm: str) -> Tuple[str, str]:
|
|
"""
|
|
Check if the boot kernel version is consistent with the installed kernel version. If not, it indicates
|
|
- that the executed fix task has been tampered.
|
|
+ that the environment after executed fix task has been tampered.
|
|
|
|
Args:
|
|
installed_rpm(str): the installed rpm in executed fix task
|
|
@@ -270,8 +318,8 @@ class RollbackManage:
|
|
evra = installed_rpm.split("-", 1)[1]
|
|
if evra not in stdout:
|
|
tmp_log = (
|
|
- "The grubby default kernel version is not consistent with installed kernel version. "
|
|
- "The executed fix task has been tampered."
|
|
+ f"The default boot kernel version is not consistent with {installed_rpm}. "
|
|
+ "The environment after executed fix task has been tampered."
|
|
)
|
|
LOGGER.error(tmp_log)
|
|
return TaskExecuteRes.FAIL, tmp_log
|
|
@@ -281,7 +329,7 @@ class RollbackManage:
|
|
def _check_current_kernel_version(self, installed_rpm: str, target_rpm: str) -> Tuple[str, str]:
|
|
"""
|
|
Check if the current kernel version is consistent with the installed kernel version or target kernel
|
|
- version. If not, it indicates that the executed fix task has been tampered.
|
|
+ version. If not, it indicates that the environment after executed fix task has been tampered.
|
|
|
|
Args:
|
|
installed_rpm(str): the installed rpm in executed fix task
|
|
@@ -304,8 +352,8 @@ class RollbackManage:
|
|
|
|
if installed_evra != current_evra and target_evra != current_evra:
|
|
tmp_log = (
|
|
- "The current kernel version is not consistent with installed kernel version or target kernel version. "
|
|
- "The executed fix task has been tampered."
|
|
+ f"The current kernel version is neither {installed_rpm} nor {target_rpm}. "
|
|
+ "The environment after executed fix task has been tampered."
|
|
)
|
|
LOGGER.error(tmp_log)
|
|
return TaskExecuteRes.FAIL, tmp_log
|
|
@@ -314,7 +362,8 @@ class RollbackManage:
|
|
|
|
def _check_if_target_rpm_installed(self, target_rpm: str) -> Tuple[str, str]:
|
|
"""
|
|
- Check if the target kernel is installed. If not, it indicates that the executed fix task has been tampered.
|
|
+ Check if the target kernel is installed. If not, it indicates that the environment after executed fix
|
|
+ task has been tampered.
|
|
|
|
Args:
|
|
target_rpm(str): the target rpm for rollback task
|
|
@@ -328,7 +377,7 @@ class RollbackManage:
|
|
# [root@openEuler ~]# rpm -qa | grep kernel-4.19.90-2112.8.0.0131.oe1.x86_64
|
|
# kernel-4.19.90-2112.8.0.0131.oe1.x86_64
|
|
if code != CommandExitCode.SUCCEED or target_rpm not in stdout:
|
|
- tmp_log = "The target kernel of rollback task is not installed. The executed fix task has been tampered."
|
|
+ tmp_log = "The target kernel of rollback task is not installed. The environment after executed fix task has been tampered."
|
|
LOGGER.error(tmp_log)
|
|
return TaskExecuteRes.FAIL, tmp_log
|
|
|
|
@@ -336,7 +385,7 @@ class RollbackManage:
|
|
|
|
def _change_boot_kernel_version(self, target_rpm: str) -> Tuple[str, str]:
|
|
"""
|
|
- Change the grubby default kernel version to target kernel version.
|
|
+ Change the default boot kernel version to target kernel version.
|
|
|
|
Args:
|
|
target_rpm(str): the target rpm for rollback task
|
|
@@ -358,4 +407,4 @@ class RollbackManage:
|
|
LOGGER.error(stderr)
|
|
return TaskExecuteRes.FAIL, stdout + stderr
|
|
|
|
- return TaskExecuteRes.SUCCEED, f"Change boot kernel version to {target_rpm} successfully."
|
|
+ return TaskExecuteRes.SUCCEED, f"Change default boot kernel version to {target_rpm} successfully."
|
|
--
|
|
2.27.0
|
|
|