Repository: kubean-io/kubean
Pull request #834 (2023-06-19 08:44:26)

[docs] fix a term `模板`
**What type of PR is this?**

/kind cleanup
/kind documentation

**What this PR does / why we need it**:

Replace a term from `模版` with `模板` globally. See how ChatGPT responds to this term:

<img width="809" alt="image" src="https://github.com/kubean-io/kubean/assets/79828097/a3c3e824-573e-4ddc-9be8-d4e55ec35c2f">



Patch:
diff --git a/docs/zh/usage/all-in-one-install.md b/docs/zh/usage/all-in-one-install.md
index 23a659fe6..2051076be 100644
--- a/docs/zh/usage/all-in-one-install.md
+++ b/docs/zh/usage/all-in-one-install.md
@@ -15,13 +15,13 @@ $ git clone https://github.com/kubean-io/kubean.git
 
 ## 开始部署
 
-本教程将使用您克隆至本地的 `kubean/example` 文件作为范例模版，进行集群部署演示。
+本教程将使用您克隆至本地的 `kubean/example` 文件作为范例模板，进行集群部署演示。
 
-借助案例模版，仅需两步我们就能使用 kubean 完成一个单节点集群的部署。
+借助案例模板，仅需两步我们就能使用 kubean 完成一个单节点集群的部署。
 
 #### 1. 配置 AllInOne.yml 参数
 
-进入 `kubean/examples/install/1.minimal` 文件路径下，编辑单节点模式部署模版 AllInOne.yml，将下列参数替换为您的真实参数。
+进入 `kubean/examples/install/1.minimal` 文件路径下，编辑单节点模式部署模板 AllInOne.yml，将下列参数替换为您的真实参数。
 
   - `<IP1>`：节点 IP。
   - `<USERNAME>`：登陆节点的用户名，建议使用 root 或具有 root 权限的用户登陆。
@@ -113,7 +113,7 @@ postHook:
 ```
 </details>
 
-执行如下命令编辑 AllInOne.yml 配置模版：
+执行如下命令编辑 AllInOne.yml 配置模板：
 
 ```bash
 $ vi kubean/examples/install/1.minimal/AllInOne.yml
diff --git a/docs/zh/usage/mirror-install.md b/docs/zh/usage/mirror-install.md
index 5fadf7320..69a4263bb 100644
--- a/docs/zh/usage/mirror-install.md
+++ b/docs/zh/usage/mirror-install.md
@@ -15,9 +15,9 @@ $ git clone https://github.com/kubean-io/kubean.git
 
 ## 开始部署
 
-本教程将使用您克隆至本地的 `kubean/example/2.mirror` 文件作为范例模版，进行集群加速部署演示。
+本教程将使用您克隆至本地的 `kubean/example/2.mirror` 文件作为范例模板，进行集群加速部署演示。
 
-在加速部署模版 `2.mirror` 内已经内置了加速参数配置，您只需要将 `/2.mirror`文件路径下的 **`HostsConfCM.yml` ** 和 **`ClusterOperation.yml`** 两个配置模版文件内的主机等信息改成您的真实参数。
+在加速部署模板 `2.mirror` 内已经内置了加速参数配置，您只需要将 `/2.mirror`文件路径下的 **`HostsConfCM.yml` ** 和 **`ClusterOperation.yml`** 两个配置模板文件内的主机等信息改成您的真实参数。
 
 <details open>
 <summary> 2.mirror` 文件内主要的配置文件及用途如下：</summary>
@@ -32,7 +32,7 @@ $ git clone https://github.com/kubean-io/kubean.git
 </details>
 
 #### 1. 配置主机配置参数 HostsConfCM.yml
-进入 `kubean/examples/install/2.mirror/` 路径，编辑待建集群节点配置信息模版 `HostsConfCM.yml`，将下列参数替换为您的真实参数：
+进入 `kubean/examples/install/2.mirror/` 路径，编辑待建集群节点配置信息模板 `HostsConfCM.yml`，将下列参数替换为您的真实参数：
 
   - `<IP1>`：节点 IP。
   - `<USERNAME>`：登陆节点的用户名，建议使用 root 或具有 root 权限的用户登陆。
@@ -85,7 +85,7 @@ data:
 ```
 </details>
 
-执行如下命令编辑 HostsConfCM.yml 配置模版：
+执行如下命令编辑 HostsConfCM.yml 配置模板：
 
 ```bash
 $ vi kubean/examples/install/2.mirror/HostsConfCM.yml
@@ -93,7 +93,7 @@ $ vi kubean/examples/install/2.mirror/HostsConfCM.yml
 
 #### 2. 配置 kubean 任务配置参数 ClusterOperation.yml
 
-进入 `kubean/examples/install/2.mirror/` 路径，编辑待建集群节点配置信息模版 `ClusterOperation.yml`，将下列参数替换为您的真实参数：
+进入 `kubean/examples/install/2.mirror/` 路径，编辑待建集群节点配置信息模板 `ClusterOperation.yml`，将下列参数替换为您的真实参数：
 
   - `<TAG>`：kubean 镜像版本，推荐使用最新版本，[参阅 kubean 版本列表](https://github.com/kubean-io/kubean/tags)。
 
@@ -124,7 +124,7 @@ spec:
 ```
 </details>
 
-执行如下命令编辑 ClusterOperation.yml 配置模版：
+执行如下命令编辑 ClusterOperation.yml 配置模板：
 
 ```bash
 $ vi kubean/examples/install/2.mirror/ClusterOperation.yml
diff --git a/docs/zh/usage/scale-worknode.md b/docs/zh/usage/scale-worknode.md
index f7a62eb48..577c08b3a 100644
--- a/docs/zh/usage/scale-worknode.md
+++ b/docs/zh/usage/scale-worknode.md
@@ -2,23 +2,23 @@
 
 在软件开发运维的过程中，业务的发展往往需要添加集群的工作节点以满足业务增长，对于使用 kubean 部署的集群，在 kubean 中我们可以使用声明式的方式，快速扩缩容集群工作节点。
 
-在您克隆至本地的 `kubean/example/scale` 文件内，同样提供了工作节点扩缩容的样例模版：
+在您克隆至本地的 `kubean/example/scale` 文件内，同样提供了工作节点扩缩容的样例模板：
 
 <details open>
 <summary> sacle 文件内主要的配置文件及用途如下：</summary>
 
 ```yaml
     scale
-    ├── 1.addWorkNode                             # 增加工作节点模版
+    ├── 1.addWorkNode                             # 增加工作节点模板
     │   ├── ClusterOperation.yml                       # kubean 版本及任务配置
     │   └── HostsConfCM.yml                            #当前集群的节点信息配置
-    └── 2.delWorkNode                             # 删除工作节点模版
+    └── 2.delWorkNode                             # 删除工作节点模板
     │   ├── ClusterOperation.yml                       # kubean 版本及任务配置
     │   └── HostsConfCM.yml                             #当前集群的节点信息配置
 ```
 </details>
 
-观察伸缩配置模版 `scale` 文件可以发现，对集群工作节点进行扩缩容只需执行 `HostsConfCM.yml` 和 `ClusterOperation.yml` 两个配置文件，并将新增节点信息等参数改成替换成您的真实参数。
+观察伸缩配置模板 `scale` 文件可以发现，对集群工作节点进行扩缩容只需执行 `HostsConfCM.yml` 和 `ClusterOperation.yml` 两个配置文件，并将新增节点信息等参数改成替换成您的真实参数。
 
 下面以[使用 all-in-one 模式部署的单节点集群](./all-in-one-install.md)为例，来演示集群节点的扩缩容操作。
 > 注意：执行集群扩缩容前，您必须已经使用 kubean 完成了一套集群的部署。
@@ -29,13 +29,13 @@
 
 我们要在原有的 all-in-one 模式中，对名为 `mini-hosts-conf` 的 ConfigMap 进行新增节点配置，在原来 `node1` 主节点的基础上, 新增 `node2` 工作节点；
 
-具体地，我们可以进入 `kubean/examples/scale/1.addWorkNode/` 路径，编辑已准备好的节点配置 ConfigMap 模版 `HostsConfCM.yml`，将下列参数替换为您的真实参数：
+具体地，我们可以进入 `kubean/examples/scale/1.addWorkNode/` 路径，编辑已准备好的节点配置 ConfigMap 模板 `HostsConfCM.yml`，将下列参数替换为您的真实参数：
 
   - `<IP2>`：节点 IP。
   - `<USERNAME>`：登陆节点的用户名，建议使用 root 或具有 root 权限的用户登陆。
   - `<PASSWORD>`：登陆节点的密码。
 
-`kubean/examples/scale/1.addWorkNode/` 路径下 **`HostsConfCM.yml`** 的模版内容如下：
+`kubean/examples/scale/1.addWorkNode/` 路径下 **`HostsConfCM.yml`** 的模板内容如下：
 
 <details>
 <summary> HostsConfCM.yml 模板</summary>
@@ -176,11 +176,11 @@ data:
 
 #### 2. 通过 ClusterOperation.yml 新增扩容任务  
 
-进入 `kubean/examples/scale/1.addWorkNode/` 路径，编辑模版 `ClusterOperation.yml`，将下列参数替换为您的真实参数：
+进入 `kubean/examples/scale/1.addWorkNode/` 路径，编辑模板 `ClusterOperation.yml`，将下列参数替换为您的真实参数：
 
   - `<TAG>`：kubean 镜像版本，推荐使用最新版本，[参阅 kubean 版本列表](https://github.com/kubean-io/kubean/tags)。
 
-`kubean/examples/scale/1.addWorkNode/` 路径下 **`ClusterOperation.yml`** 的模版内容如下：
+`kubean/examples/scale/1.addWorkNode/` 路径下 **`ClusterOperation.yml`** 的模板内容如下：
 
 ```yaml
 apiVersion: kubean.io/v1alpha1
@@ -234,11 +234,11 @@ $ kubectl apply -f examples/install/scale/1.addWorkNode/
 
 #### 1. 通过 ClusterOperation.yml 新增缩容任务 
 
-进入 `kubean/examples/scale/2.delWorkNode/` 路径，编辑模版 `ClusterOperation.yml`，将下列参数替换为您的真实参数：
+进入 `kubean/examples/scale/2.delWorkNode/` 路径，编辑模板 `ClusterOperation.yml`，将下列参数替换为您的真实参数：
 
   - `<TAG>`：kubean 镜像版本，推荐使用最新版本，[参阅 kubean 版本列表](https://github.com/kubean-io/kubean/tags)。
 
-`kubean/examples/scale/2.delWorkNode/` 路径下 **`ClusterOperation.yml`** 的模版内容如下：
+`kubean/examples/scale/2.delWorkNode/` 路径下 **`ClusterOperation.yml`** 的模板内容如下：
 
 ```yaml
 apiVersion: kubean.io/v1alpha1
@@ -296,7 +296,7 @@ $ kubectl -n kubean-system get pod | grep cluster-mini-dwn-ops
 
 我们已经通过如上两步操作执行了缩容任务，待缩容任务执行完成后，`node2` 将从现有集群中永久移除，则此时我们还需要完成最后一步，将节点配置相关 Configmap 中的 node2 信息移除;
 
-进入 `kubean/examples/scale/2.delWorkNode/` 路径，编辑已准备好的节点配置模版 `HostsConfCM.yml`，删除需要移除的工作节点配置。
+进入 `kubean/examples/scale/2.delWorkNode/` 路径，编辑已准备好的节点配置模板 `HostsConfCM.yml`，删除需要移除的工作节点配置。
 
 **删除参数如下：**
 
diff --git a/docs/zh/usage/uninstall.md b/docs/zh/usage/uninstall.md
index c26de7bb4..eb3a570b0 100644
--- a/docs/zh/usage/uninstall.md
+++ b/docs/zh/usage/uninstall.md
@@ -1,6 +1,6 @@
 # 集群卸载
 
-本节将向您介绍如何使用 kubean 卸载集群。在您克隆至本地的 `kubean/example/uninstall` 文件内，同样提供了卸载集群的样例模版：
+本节将向您介绍如何使用 kubean 卸载集群。在您克隆至本地的 `kubean/example/uninstall` 文件内，同样提供了卸载集群的样例模板：
 
 <details open>
 <summary> uninsatall 文件内主要的配置文件及用途如下：</summary>
@@ -15,11 +15,11 @@
 > 注意：执行集群卸载前，您必须已经使用 kubean 完成了一套集群的部署。
 
 #### 1. 新增卸载任务
-进入 `kubean/examples/uninstall/` 路径，编辑模版 `ClusterOperation.yml`，将下列参数替换为您的真实参数：
+进入 `kubean/examples/uninstall/` 路径，编辑模板 `ClusterOperation.yml`，将下列参数替换为您的真实参数：
 
   - `<TAG>`：kubean 镜像版本，推荐使用最新版本，[参阅 kubean 版本列表](https://github.com/kubean-io/kubean/tags)。
 
-`kubean/examples/uninstall/` 路径下 **`ClusterOperation.yml`** 的模版内容如下：
+`kubean/examples/uninstall/` 路径下 **`ClusterOperation.yml`** 的模板内容如下：
 
 ```yaml
 apiVersion: kubean.io/v1alpha1
diff --git a/docs/zh/usage/upgrade.md b/docs/zh/usage/upgrade.md
index 3791b305e..e29ff6add 100644
--- a/docs/zh/usage/upgrade.md
+++ b/docs/zh/usage/upgrade.md
@@ -1,6 +1,6 @@
 # 集群版本升级
 
-本节将向您介绍如何使用 kubean 升级集群的 kubernnetes 版本。在您克隆至本地的 `kubean/example/upgrade` 文件内，同样提供了集群版本升级的样例模版：
+本节将向您介绍如何使用 kubean 升级集群的 kubernnetes 版本。在您克隆至本地的 `kubean/example/upgrade` 文件内，同样提供了集群版本升级的样例模板：
 
 <details open>
 <summary> upgrade 文件内主要的配置文件及用途如下：</summary>
@@ -17,11 +17,11 @@
 
 #### 1. 新增升级任务
 
-进入 `kubean/examples/upgrade/` 路径，编辑模版 `ClusterOperation.yml`，将下列参数替换为您的真实参数：
+进入 `kubean/examples/upgrade/` 路径，编辑模板 `ClusterOperation.yml`，将下列参数替换为您的真实参数：
 
   - `<TAG>`：kubean 镜像版本，推荐使用最新版本，[参阅 kubean 版本列表](https://github.com/kubean-io/kubean/tags)。
 
-`kubean/examples/upgrade/` 路径下 **`ClusterOperation.yml`** 的模版内容如下：
+`kubean/examples/upgrade/` 路径下 **`ClusterOperation.yml`** 的模板内容如下：
 
 ```yaml
 apiVersion: kubean.io/v1alpha1
@@ -41,9 +41,9 @@ spec:
 
 #### 2. 指定集群升级版本
 
-进入 `kubean/examples/upgrade/` 路径，编辑模版 `VarsConfCM.yml`，通过配置 `kube_version` 参数，指定集群升级的版本。
+进入 `kubean/examples/upgrade/` 路径，编辑模板 `VarsConfCM.yml`，通过配置 `kube_version` 参数，指定集群升级的版本。
 
-`kubean/examples/upgrade/` 路径下 **`VarsConfCM.yml`** 的模版内容如下：
+`kubean/examples/upgrade/` 路径下 **`VarsConfCM.yml`** 的模板内容如下：
 
 ```yaml
 apiVersion: v1
diff --git a/pkg/controllers/clusterops/controller.go b/pkg/controllers/clusterops/controller.go
index d2c1783c4..656d97803 100644
--- a/pkg/controllers/clusterops/controller.go
+++ b/pkg/controllers/clusterops/controller.go
@@ -123,10 +123,10 @@ func (c *Controller) FetchGlobalInfoManifest() (*manifestv1alpha1.Manifest, erro
 	return global, nil
 }
 
-func (c *Controller) UpdateStatusLoop(clusterOps *clusteroperationv1alpha1.ClusterOperation, fetchJobStatus func(*clusteroperationv1alpha1.ClusterOperation) (clusteroperationv1alpha1.OpsStatus, *metav1.Time, error)) (bool, error) {
+func (c *Controller) UpdateStatusLoop(clusterOps *clusteroperationv1alpha1.ClusterOperation, fetchJobStatus func(*clusteroperationv1alpha1.ClusterOperation) (clusteroperationv1alpha1.OpsStatus, error)) (bool, error) {
 	if clusterOps.Status.Status == clusteroperationv1alpha1.RunningStatus || len(clusterOps.Status.Status) == 0 {
 		// need fetch jobStatus again when the last status of job is running
-		jobStatus, completionTime, err := fetchJobStatus(clusterOps)
+		jobStatus, err := fetchJobStatus(clusterOps)
 		if err != nil {
 			return false, err
 		}
@@ -137,9 +137,6 @@ func (c *Controller) UpdateStatusLoop(clusterOps *clusteroperationv1alpha1.Clust
 		// the status  succeed or failed
 		clusterOps.Status.Status = jobStatus
 		clusterOps.Status.EndTime = &metav1.Time{Time: time.Now()}
-		if completionTime != nil {
-			clusterOps.Status.EndTime = completionTime
-		}
 		if err := c.Client.Status().Update(context.Background(), clusterOps); err != nil {
 			return false, err
 		}
@@ -149,29 +146,29 @@ func (c *Controller) UpdateStatusLoop(clusterOps *clusteroperationv1alpha1.Clust
 	return false, nil
 }
 
-func (c *Controller) FetchJobConditionStatusAndCompletionTime(clusterOps *clusteroperationv1alpha1.ClusterOperation) (clusteroperationv1alpha1.OpsStatus, *metav1.Time, error) {
+func (c *Controller) FetchJobStatus(clusterOps *clusteroperationv1alpha1.ClusterOperation) (clusteroperationv1alpha1.OpsStatus, error) {
 	if clusterOps.Status.JobRef.IsEmpty() {
-		return "", nil, fmt.Errorf("clusterOps %s no job", clusterOps.Name)
+		return "", fmt.Errorf("clusterOps %s no job", clusterOps.Name)
 	}
 	targetJob, err := c.ClientSet.BatchV1().Jobs(clusterOps.Status.JobRef.NameSpace).Get(context.Background(), clusterOps.Status.JobRef.Name, metav1.GetOptions{})
 	if apierrors.IsNotFound(err) {
 		// maybe the job is removed.
 		klog.Errorf("clusterOps %s  job %s not found", clusterOps.Name, clusterOps.Status.JobRef.Name)
-		return clusteroperationv1alpha1.FailedStatus, nil, nil
+		return clusteroperationv1alpha1.FailedStatus, nil
 	}
 	if err != nil {
-		return "", nil, err
+		return "", err
 	}
 	// according to the job condtions, return success or failed
 	for _, contion := range targetJob.Status.Conditions {
 		if contion.Type == batchv1.JobComplete && contion.Status == corev1.ConditionTrue {
-			return clusteroperationv1alpha1.SucceededStatus, targetJob.Status.CompletionTime, nil
+			return clusteroperationv1alpha1.SucceededStatus, nil
 		} else if contion.Type == batchv1.JobFailed && contion.Status == corev1.ConditionTrue {
-			return clusteroperationv1alpha1.FailedStatus, targetJob.Status.CompletionTime, nil
+			return clusteroperationv1alpha1.FailedStatus, nil
 		}
 	}
 
-	return clusteroperationv1alpha1.RunningStatus, nil, nil
+	return clusteroperationv1alpha1.RunningStatus, nil
 }
 
 func (c *Controller) ListClusterOps(clusterName string) ([]clusteroperationv1alpha1.ClusterOperation, error) {
@@ -323,7 +320,7 @@ func (c *Controller) Reconcile(ctx context.Context, req controllerruntime.Reques
 		return controllerruntime.Result{RequeueAfter: RequeueAfter}, nil
 	}
 
-	needRequeue, err = c.UpdateStatusLoop(clusterOps, c.FetchJobConditionStatusAndCompletionTime)
+	needRequeue, err = c.UpdateStatusLoop(clusterOps, c.FetchJobStatus)
 	if err != nil {
 		klog.Error(err)
 		return controllerruntime.Result{RequeueAfter: RequeueAfter}, err
diff --git a/playbooks/precheck.yml b/playbooks/precheck.yml
index b8e197d88..2c23a98bb 100644
--- a/playbooks/precheck.yml
+++ b/playbooks/precheck.yml
@@ -93,7 +93,6 @@
         ( if [ ! -f /tmp/kubean_data_temp_cache ]; then touch /tmp/kubean_data_temp_cache ; fi )
         yq -i '.{{inventory_hostname}}.os_kernel_version_output="{{ ansible_kernel }}"' /tmp/kubean_data_temp_cache
         yq -i '.{{inventory_hostname}}.os_kernel_version="{{ ansible_kernel.split('-')[0] }}"' /tmp/kubean_data_temp_cache
-        yq -i '.{{inventory_hostname}}.pkg_mgr="{{ ansible_pkg_mgr }}"' /tmp/kubean_data_temp_cache
       ignore_errors: true
       delegate_to: localhost
       when:


Test patch:
diff --git a/pkg/controllers/clusterops/controller_test.go b/pkg/controllers/clusterops/controller_test.go
index 5dd87d77c..a1a539691 100644
--- a/pkg/controllers/clusterops/controller_test.go
+++ b/pkg/controllers/clusterops/controller_test.go
@@ -89,8 +89,8 @@ func TestUpdateStatusLoop(t *testing.T) {
 			name: "the status is Running and the result of fetchJobStatus is err",
 			args: func(ops *clusteroperationv1alpha1.ClusterOperation) bool {
 				ops.Status.Status = clusteroperationv1alpha1.RunningStatus
-				needRequeue, err := controller.UpdateStatusLoop(ops, func(ops *clusteroperationv1alpha1.ClusterOperation) (clusteroperationv1alpha1.OpsStatus, *metav1.Time, error) {
-					return "", nil, fmt.Errorf("one error")
+				needRequeue, err := controller.UpdateStatusLoop(ops, func(ops *clusteroperationv1alpha1.ClusterOperation) (clusteroperationv1alpha1.OpsStatus, error) {
+					return "", fmt.Errorf("one error")
 				})
 				return err != nil && err.Error() == "one error" && !needRequeue
 			},
@@ -100,8 +100,8 @@ func TestUpdateStatusLoop(t *testing.T) {
 			name: "the status is Running and the result of fetchJobStatus is still Running",
 			args: func(ops *clusteroperationv1alpha1.ClusterOperation) bool {
 				ops.Status.Status = clusteroperationv1alpha1.RunningStatus
-				needRequeue, err := controller.UpdateStatusLoop(ops, func(ops *clusteroperationv1alpha1.ClusterOperation) (clusteroperationv1alpha1.OpsStatus, *metav1.Time, error) {
-					return clusteroperationv1alpha1.RunningStatus, nil, nil
+				needRequeue, err := controller.UpdateStatusLoop(ops, func(ops *clusteroperationv1alpha1.ClusterOperation) (clusteroperationv1alpha1.OpsStatus, error) {
+					return clusteroperationv1alpha1.RunningStatus, nil
 				})
 				return err == nil && needRequeue
 			},
@@ -112,8 +112,8 @@ func TestUpdateStatusLoop(t *testing.T) {
 			args: func(ops *clusteroperationv1alpha1.ClusterOperation) bool {
 				ops.Status.Status = clusteroperationv1alpha1.RunningStatus
 				ops.Status.EndTime = nil
-				needRequeue, err := controller.UpdateStatusLoop(ops, func(ops *clusteroperationv1alpha1.ClusterOperation) (clusteroperationv1alpha1.OpsStatus, *metav1.Time, error) {
-					return clusteroperationv1alpha1.SucceededStatus, &metav1.Time{}, nil
+				needRequeue, err := controller.UpdateStatusLoop(ops, func(ops *clusteroperationv1alpha1.ClusterOperation) (clusteroperationv1alpha1.OpsStatus, error) {
+					return clusteroperationv1alpha1.SucceededStatus, nil
 				})
 				resultOps := &clusteroperationv1alpha1.ClusterOperation{}
 				controller.Client.Get(context.Background(), client.ObjectKey{Name: "clusteropsname"}, resultOps)
@@ -130,8 +130,8 @@ func TestUpdateStatusLoop(t *testing.T) {
 				controller.Client.Get(context.Background(), client.ObjectKey{Name: "clusteropsname"}, ops)
 				ops.Status.Status = clusteroperationv1alpha1.RunningStatus
 				ops.Status.EndTime = nil
-				needRequeue, err := controller.UpdateStatusLoop(ops, func(ops *clusteroperationv1alpha1.ClusterOperation) (clusteroperationv1alpha1.OpsStatus, *metav1.Time, error) {
-					return clusteroperationv1alpha1.FailedStatus, nil, nil
+				needRequeue, err := controller.UpdateStatusLoop(ops, func(ops *clusteroperationv1alpha1.ClusterOperation) (clusteroperationv1alpha1.OpsStatus, error) {
+					return clusteroperationv1alpha1.FailedStatus, nil
 				})
 				return err == nil && !needRequeue && ops.Status.EndTime != nil && ops.Status.Status == clusteroperationv1alpha1.FailedStatus
 			},
@@ -1745,7 +1745,7 @@ func Test_FetchJobStatus(t *testing.T) {
 			name: "jobRef is empty",
 			args: func() bool {
 				clusterOps := &clusteroperationv1alpha1.ClusterOperation{}
-				_, _, err := controller.FetchJobConditionStatusAndCompletionTime(clusterOps)
+				_, err := controller.FetchJobStatus(clusterOps)
 				return err != nil
 			},
 			want: true,
@@ -1755,7 +1755,7 @@ func Test_FetchJobStatus(t *testing.T) {
 			args: func() bool {
 				clusterOps := &clusteroperationv1alpha1.ClusterOperation{}
 				clusterOps.Status.JobRef = &apis.JobRef{NameSpace: "kubean-system", Name: "job123"}
-				status, _, err := controller.FetchJobConditionStatusAndCompletionTime(clusterOps)
+				status, err := controller.FetchJobStatus(clusterOps)
 				return err == nil && status == clusteroperationv1alpha1.FailedStatus
 			},
 			want: true,
@@ -1784,7 +1784,7 @@ func Test_FetchJobStatus(t *testing.T) {
 					},
 				}
 				controller.ClientSet.BatchV1().Jobs("kubean-system").Create(context.Background(), targetJob, metav1.CreateOptions{})
-				status, _, err := controller.FetchJobConditionStatusAndCompletionTime(clusterOps)
+				status, err := controller.FetchJobStatus(clusterOps)
 				return err == nil && status == clusteroperationv1alpha1.SucceededStatus
 			},
 			want: true,
@@ -1813,7 +1813,7 @@ func Test_FetchJobStatus(t *testing.T) {
 					},
 				}
 				controller.ClientSet.BatchV1().Jobs("kubean-system").Create(context.Background(), targetJob, metav1.CreateOptions{})
-				status, _, err := controller.FetchJobConditionStatusAndCompletionTime(clusterOps)
+				status, err := controller.FetchJobStatus(clusterOps)
 				return err == nil && status == clusteroperationv1alpha1.FailedStatus
 			},
 			want: true,
@@ -1834,8 +1834,8 @@ func Test_FetchJobStatus(t *testing.T) {
 					},
 				}
 				controller.ClientSet.BatchV1().Jobs("kubean-system").Create(context.Background(), targetJob, metav1.CreateOptions{})
-				status, completionTime, err := controller.FetchJobConditionStatusAndCompletionTime(clusterOps)
-				return err == nil && status == clusteroperationv1alpha1.RunningStatus && completionTime == nil
+				status, err := controller.FetchJobStatus(clusterOps)
+				return err == nil && status == clusteroperationv1alpha1.RunningStatus
 			},
 			want: true,
 		},