From 736b7bb770087c150a6d11c994f183f3688e3839 Mon Sep 17 00:00:00 2001 From: Kirby Chin Date: Mon, 11 Mar 2024 14:35:43 -0400 Subject: [PATCH 01/12] Modify condition to be prepended --- api/v1/operations.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/api/v1/operations.go b/api/v1/operations.go index 389e7b9b..cd33e1b8 100644 --- a/api/v1/operations.go +++ b/api/v1/operations.go @@ -96,6 +96,7 @@ func SetOperationCondtion(c []OperationStatusCondition, oc OperationStatusCondit return c } oc.LastUpdateTime = metav1.Time{Time: time.Now()} - c = append(c, oc) + // c = append(c, oc) + c = append([]OperationStatusCondition{oc}, c...) return c } From 8f9552a4b787d2edd530cdd59f6598f6630b123d Mon Sep 17 00:00:00 2001 From: Kirby Chin Date: Mon, 11 Mar 2024 15:30:23 -0400 Subject: [PATCH 02/12] Add conditions annotation --- api/v1/operations.go | 3 +-- api/v1/webspherelibertydump_types.go | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api/v1/operations.go b/api/v1/operations.go index cd33e1b8..389e7b9b 100644 --- a/api/v1/operations.go +++ b/api/v1/operations.go @@ -96,7 +96,6 @@ func SetOperationCondtion(c []OperationStatusCondition, oc OperationStatusCondit return c } oc.LastUpdateTime = metav1.Time{Time: time.Now()} - // c = append(c, oc) - c = append([]OperationStatusCondition{oc}, c...) + c = append(c, oc) return c } diff --git a/api/v1/webspherelibertydump_types.go b/api/v1/webspherelibertydump_types.go index 87e72ca2..37b07b3a 100644 --- a/api/v1/webspherelibertydump_types.go +++ b/api/v1/webspherelibertydump_types.go @@ -52,6 +52,7 @@ const ( // Defines the observed state of WebSphereLibertyDump type WebSphereLibertyDumpStatus struct { // +listType=atomic + // +operator-sdk:csv:customresourcedefinitions:type=status,displayName="Status Conditions",xDescriptors="urn:alm:descriptor:io.kubernetes.conditions" Conditions []OperationStatusCondition `json:"conditions,omitempty"` Versions DumpStatusVersions `json:"versions,omitempty"` // Location of the generated dump file From 8f7d88282f0c99b005cabc77fa63109ef2466e74 Mon Sep 17 00:00:00 2001 From: Kirby Chin Date: Mon, 11 Mar 2024 15:42:21 -0400 Subject: [PATCH 03/12] Increase priority on completed tag --- api/v1/webspherelibertydump_types.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api/v1/webspherelibertydump_types.go b/api/v1/webspherelibertydump_types.go index 37b07b3a..f5482839 100644 --- a/api/v1/webspherelibertydump_types.go +++ b/api/v1/webspherelibertydump_types.go @@ -70,9 +70,9 @@ type DumpStatusVersions struct { // +kubebuilder:printcolumn:name="Started",type="string",JSONPath=".status.conditions[?(@.type=='Started')].status",priority=0,description="Indicates if dump operation has started" // +kubebuilder:printcolumn:name="Reason",type="string",JSONPath=".status.conditions[?(@.type=='Started')].reason",priority=1,description="Reason for dump operation failing to start" // +kubebuilder:printcolumn:name="Message",type="string",JSONPath=".status.conditions[?(@.type=='Started')].message",priority=1,description="Message for dump operation failing to start" -// +kubebuilder:printcolumn:name="Completed",type="string",JSONPath=".status.conditions[?(@.type=='Completed')].status",priority=0,description="Indicates if dump operation has completed" -// +kubebuilder:printcolumn:name="Reason",type="string",JSONPath=".status.conditions[?(@.type=='Completed')].reason",priority=1,description="Reason for dump operation failing to complete" -// +kubebuilder:printcolumn:name="Message",type="string",JSONPath=".status.conditions[?(@.type=='Completed')].message",priority=1,description="Message for dump operation failing to complete" +// +kubebuilder:printcolumn:name="Completed",type="string",JSONPath=".status.conditions[?(@.type=='Completed')].status",priority=2,description="Indicates if dump operation has completed" +// +kubebuilder:printcolumn:name="Reason",type="string",JSONPath=".status.conditions[?(@.type=='Completed')].reason",priority=3,description="Reason for dump operation failing to complete" +// +kubebuilder:printcolumn:name="Message",type="string",JSONPath=".status.conditions[?(@.type=='Completed')].message",priority=3,description="Message for dump operation failing to complete" // +kubebuilder:printcolumn:name="Dump file",type="string",JSONPath=".status.dumpFile",priority=0,description="Indicates filename of the server dump" // +operator-sdk:csv:customresourcedefinitions:displayName="WebSphereLibertyDump" // Day-2 operation for generating server dumps. Documentation: For more information about installation parameters, see https://ibm.biz/wlo-crs. License: By installing this product, you accept the license terms at https://ibm.biz/was-license. From d9ad411c80356ee1c50e2c8b7e0adb6482d3d6cf Mon Sep 17 00:00:00 2001 From: Kirby Chin Date: Mon, 11 Mar 2024 16:36:30 -0400 Subject: [PATCH 04/12] Update manifests --- api/v1/webspherelibertydump_types.go | 6 +++--- .../ibm-websphere-liberty.clusterserviceversion.yaml | 6 +++++- .../bases/ibm-websphere-liberty.clusterserviceversion.yaml | 4 ++++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/api/v1/webspherelibertydump_types.go b/api/v1/webspherelibertydump_types.go index f5482839..37b07b3a 100644 --- a/api/v1/webspherelibertydump_types.go +++ b/api/v1/webspherelibertydump_types.go @@ -70,9 +70,9 @@ type DumpStatusVersions struct { // +kubebuilder:printcolumn:name="Started",type="string",JSONPath=".status.conditions[?(@.type=='Started')].status",priority=0,description="Indicates if dump operation has started" // +kubebuilder:printcolumn:name="Reason",type="string",JSONPath=".status.conditions[?(@.type=='Started')].reason",priority=1,description="Reason for dump operation failing to start" // +kubebuilder:printcolumn:name="Message",type="string",JSONPath=".status.conditions[?(@.type=='Started')].message",priority=1,description="Message for dump operation failing to start" -// +kubebuilder:printcolumn:name="Completed",type="string",JSONPath=".status.conditions[?(@.type=='Completed')].status",priority=2,description="Indicates if dump operation has completed" -// +kubebuilder:printcolumn:name="Reason",type="string",JSONPath=".status.conditions[?(@.type=='Completed')].reason",priority=3,description="Reason for dump operation failing to complete" -// +kubebuilder:printcolumn:name="Message",type="string",JSONPath=".status.conditions[?(@.type=='Completed')].message",priority=3,description="Message for dump operation failing to complete" +// +kubebuilder:printcolumn:name="Completed",type="string",JSONPath=".status.conditions[?(@.type=='Completed')].status",priority=0,description="Indicates if dump operation has completed" +// +kubebuilder:printcolumn:name="Reason",type="string",JSONPath=".status.conditions[?(@.type=='Completed')].reason",priority=1,description="Reason for dump operation failing to complete" +// +kubebuilder:printcolumn:name="Message",type="string",JSONPath=".status.conditions[?(@.type=='Completed')].message",priority=1,description="Message for dump operation failing to complete" // +kubebuilder:printcolumn:name="Dump file",type="string",JSONPath=".status.dumpFile",priority=0,description="Indicates filename of the server dump" // +operator-sdk:csv:customresourcedefinitions:displayName="WebSphereLibertyDump" // Day-2 operation for generating server dumps. Documentation: For more information about installation parameters, see https://ibm.biz/wlo-crs. License: By installing this product, you accept the license terms at https://ibm.biz/was-license. diff --git a/bundle/manifests/ibm-websphere-liberty.clusterserviceversion.yaml b/bundle/manifests/ibm-websphere-liberty.clusterserviceversion.yaml index 44b7a1ac..d15e932d 100644 --- a/bundle/manifests/ibm-websphere-liberty.clusterserviceversion.yaml +++ b/bundle/manifests/ibm-websphere-liberty.clusterserviceversion.yaml @@ -62,7 +62,7 @@ metadata: capabilities: Auto Pilot categories: Application Runtime containerImage: icr.io/cpopen/websphere-liberty-operator:daily - createdAt: "2024-01-30T02:09:24Z" + createdAt: "2024-03-11T20:36:14Z" description: Deploy and manage containerized Liberty applications olm.skipRange: '>=1.0.0 <1.3.1' operators.openshift.io/infrastructure-features: '["disconnected"]' @@ -705,6 +705,10 @@ spec: x-descriptors: - urn:alm:descriptor:com.tectonic.ui:checkbox statusDescriptors: + - displayName: Status Conditions + path: conditions + x-descriptors: + - urn:alm:descriptor:io.kubernetes.conditions - description: Location of the generated dump file displayName: Dump File Path path: dumpFile diff --git a/config/manifests/bases/ibm-websphere-liberty.clusterserviceversion.yaml b/config/manifests/bases/ibm-websphere-liberty.clusterserviceversion.yaml index d8acf53a..70c69e2d 100644 --- a/config/manifests/bases/ibm-websphere-liberty.clusterserviceversion.yaml +++ b/config/manifests/bases/ibm-websphere-liberty.clusterserviceversion.yaml @@ -570,6 +570,10 @@ spec: x-descriptors: - urn:alm:descriptor:com.tectonic.ui:checkbox statusDescriptors: + - displayName: Status Conditions + path: conditions + x-descriptors: + - urn:alm:descriptor:io.kubernetes.conditions - description: Location of the generated dump file displayName: Dump File Path path: dumpFile From 0b28d8075c7f4feeb940d27d7db3141fe9889a2d Mon Sep 17 00:00:00 2001 From: Kirby Chin Date: Tue, 12 Mar 2024 10:11:19 -0400 Subject: [PATCH 05/12] Add a Failed Status Condition for the dump --- api/v1/operations.go | 2 ++ controllers/webspherelibertydump_controller.go | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/api/v1/operations.go b/api/v1/operations.go index 389e7b9b..38d43594 100644 --- a/api/v1/operations.go +++ b/api/v1/operations.go @@ -67,6 +67,8 @@ const ( OperationStatusConditionTypeEnabled OperationStatusConditionType = "Enabled" // OperationStatusConditionTypeStarted indicates whether operation has been started OperationStatusConditionTypeStarted OperationStatusConditionType = "Started" + // OperationStatusConditionTypeFailed indicates whether operation has failed + OperationStatusConditionTypeFailed OperationStatusConditionType = "Failed" // OperationStatusConditionTypeCompleted indicates whether operation has been completed OperationStatusConditionTypeCompleted OperationStatusConditionType = "Completed" ) diff --git a/controllers/webspherelibertydump_controller.go b/controllers/webspherelibertydump_controller.go index 95651361..cceef9ef 100644 --- a/controllers/webspherelibertydump_controller.go +++ b/controllers/webspherelibertydump_controller.go @@ -100,6 +100,14 @@ func (r *ReconcileWebSphereLibertyDump) Reconcile(ctx context.Context, request c Message: "Failed to find a pod or pod is not in running state", } instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, c) + // Additionally, set the condition to Failed to update the UI + c = webspherelibertyv1.OperationStatusCondition{ + Type: webspherelibertyv1.OperationStatusConditionTypeFailed, + Status: corev1.ConditionTrue, + Reason: "Error", + Message: "Failed to find a pod or pod is not in running state", + } + instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, c) instance.Status.Versions.Reconciled = utils.OperandVersion r.Client.Status().Update(context.TODO(), instance) return reconcile.Result{}, nil @@ -120,7 +128,6 @@ func (r *ReconcileWebSphereLibertyDump) Reconcile(ctx context.Context, request c Type: webspherelibertyv1.OperationStatusConditionTypeStarted, Status: corev1.ConditionTrue, } - instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, c) r.Client.Status().Update(context.TODO(), instance) @@ -136,6 +143,14 @@ func (r *ReconcileWebSphereLibertyDump) Reconcile(ctx context.Context, request c Message: err.Error(), } instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, c) + // Additionally, set the condition to Failed to update the UI + c = webspherelibertyv1.OperationStatusCondition{ + Type: webspherelibertyv1.OperationStatusConditionTypeFailed, + Status: corev1.ConditionTrue, + Reason: "Error", + Message: err.Error(), + } + instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, c) instance.Status.Versions.Reconciled = utils.OperandVersion r.Client.Status().Update(context.TODO(), instance) return reconcile.Result{}, nil From d60acdca3371e28eb57458f1e6e97a5ff80721b6 Mon Sep 17 00:00:00 2001 From: Kirby Chin Date: Tue, 12 Mar 2024 14:19:04 -0400 Subject: [PATCH 06/12] Add failed condition --- ...ibm-websphere-liberty.clusterserviceversion.yaml | 2 +- controllers/webspherelibertydump_controller.go | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/bundle/manifests/ibm-websphere-liberty.clusterserviceversion.yaml b/bundle/manifests/ibm-websphere-liberty.clusterserviceversion.yaml index d15e932d..923b01f2 100644 --- a/bundle/manifests/ibm-websphere-liberty.clusterserviceversion.yaml +++ b/bundle/manifests/ibm-websphere-liberty.clusterserviceversion.yaml @@ -62,7 +62,7 @@ metadata: capabilities: Auto Pilot categories: Application Runtime containerImage: icr.io/cpopen/websphere-liberty-operator:daily - createdAt: "2024-03-11T20:36:14Z" + createdAt: "2024-03-12T14:12:48Z" description: Deploy and manage containerized Liberty applications olm.skipRange: '>=1.0.0 <1.3.1' operators.openshift.io/infrastructure-features: '["disconnected"]' diff --git a/controllers/webspherelibertydump_controller.go b/controllers/webspherelibertydump_controller.go index cceef9ef..37721475 100644 --- a/controllers/webspherelibertydump_controller.go +++ b/controllers/webspherelibertydump_controller.go @@ -101,13 +101,13 @@ func (r *ReconcileWebSphereLibertyDump) Reconcile(ctx context.Context, request c } instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, c) // Additionally, set the condition to Failed to update the UI - c = webspherelibertyv1.OperationStatusCondition{ + f := webspherelibertyv1.OperationStatusCondition{ Type: webspherelibertyv1.OperationStatusConditionTypeFailed, Status: corev1.ConditionTrue, Reason: "Error", Message: "Failed to find a pod or pod is not in running state", } - instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, c) + instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, f) instance.Status.Versions.Reconciled = utils.OperandVersion r.Client.Status().Update(context.TODO(), instance) return reconcile.Result{}, nil @@ -129,6 +129,11 @@ func (r *ReconcileWebSphereLibertyDump) Reconcile(ctx context.Context, request c Status: corev1.ConditionTrue, } instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, c) + f := webspherelibertyv1.OperationStatusCondition{ + Type: webspherelibertyv1.OperationStatusConditionTypeFailed, + Status: corev1.ConditionFalse, + } + instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, f) r.Client.Status().Update(context.TODO(), instance) _, err = utils.ExecuteCommandInContainer(r.RestConfig, pod.Name, pod.Namespace, "app", []string{"/bin/sh", "-c", dumpCmd}) @@ -144,13 +149,13 @@ func (r *ReconcileWebSphereLibertyDump) Reconcile(ctx context.Context, request c } instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, c) // Additionally, set the condition to Failed to update the UI - c = webspherelibertyv1.OperationStatusCondition{ + f = webspherelibertyv1.OperationStatusCondition{ Type: webspherelibertyv1.OperationStatusConditionTypeFailed, Status: corev1.ConditionTrue, Reason: "Error", Message: err.Error(), } - instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, c) + instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, f) instance.Status.Versions.Reconciled = utils.OperandVersion r.Client.Status().Update(context.TODO(), instance) return reconcile.Result{}, nil From 2fe37bb741487f0b5b78dc451fdd74541017f47a Mon Sep 17 00:00:00 2001 From: Kirby Chin Date: Tue, 12 Mar 2024 14:41:21 -0400 Subject: [PATCH 07/12] Debug comments --- .../ibm-websphere-liberty.clusterserviceversion.yaml | 2 +- controllers/webspherelibertydump_controller.go | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/bundle/manifests/ibm-websphere-liberty.clusterserviceversion.yaml b/bundle/manifests/ibm-websphere-liberty.clusterserviceversion.yaml index 923b01f2..2ba5b4b0 100644 --- a/bundle/manifests/ibm-websphere-liberty.clusterserviceversion.yaml +++ b/bundle/manifests/ibm-websphere-liberty.clusterserviceversion.yaml @@ -62,7 +62,7 @@ metadata: capabilities: Auto Pilot categories: Application Runtime containerImage: icr.io/cpopen/websphere-liberty-operator:daily - createdAt: "2024-03-12T14:12:48Z" + createdAt: "2024-03-12T18:37:19Z" description: Deploy and manage containerized Liberty applications olm.skipRange: '>=1.0.0 <1.3.1' operators.openshift.io/infrastructure-features: '["disconnected"]' diff --git a/controllers/webspherelibertydump_controller.go b/controllers/webspherelibertydump_controller.go index 37721475..e0629d19 100644 --- a/controllers/webspherelibertydump_controller.go +++ b/controllers/webspherelibertydump_controller.go @@ -18,6 +18,7 @@ package controllers import ( "context" + "fmt" "os" "time" @@ -139,7 +140,7 @@ func (r *ReconcileWebSphereLibertyDump) Reconcile(ctx context.Context, request c _, err = utils.ExecuteCommandInContainer(r.RestConfig, pod.Name, pod.Namespace, "app", []string{"/bin/sh", "-c", dumpCmd}) if err != nil { //handle error - reqLogger.Error(err, "Execute dump cmd failed ", "cmd", dumpCmd) + reqLogger.Error(err, "Execute dump cmd failed.. ", "cmd", dumpCmd) r.Recorder.Event(instance, "Warning", "ProcessingError", err.Error()) c = webspherelibertyv1.OperationStatusCondition{ Type: webspherelibertyv1.OperationStatusConditionTypeCompleted, @@ -156,6 +157,7 @@ func (r *ReconcileWebSphereLibertyDump) Reconcile(ctx context.Context, request c Message: err.Error(), } instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, f) + reqLogger.Info("conditions:", fmt.Sprint(instance.Status.Conditions)) instance.Status.Versions.Reconciled = utils.OperandVersion r.Client.Status().Update(context.TODO(), instance) return reconcile.Result{}, nil From fea7c96a9d1525944b4c79bff058b8300ed0c275 Mon Sep 17 00:00:00 2001 From: Kirby Chin Date: Tue, 12 Mar 2024 16:44:19 -0400 Subject: [PATCH 08/12] Update webspherelibertydump_controller.go --- .../webspherelibertydump_controller.go | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/controllers/webspherelibertydump_controller.go b/controllers/webspherelibertydump_controller.go index e0629d19..b83e8d2f 100644 --- a/controllers/webspherelibertydump_controller.go +++ b/controllers/webspherelibertydump_controller.go @@ -18,7 +18,6 @@ package controllers import ( "context" - "fmt" "os" "time" @@ -82,6 +81,19 @@ func (r *ReconcileWebSphereLibertyDump) Reconcile(ctx context.Context, request c //do not reconcile if the dump already started oc := webspherelibertyv1.GetOperationCondtion(instance.Status.Conditions, webspherelibertyv1.OperationStatusConditionTypeStarted) if oc != nil && oc.Status == corev1.ConditionTrue { + //check if the Dump failed + oc = webspherelibertyv1.GetOperationCondtion(instance.Status.Conditions, webspherelibertyv1.OperationStatusConditionTypeCompleted) + if oc != nil && oc.Status == corev1.ConditionFalse { + f := webspherelibertyv1.OperationStatusCondition{ + Type: webspherelibertyv1.OperationStatusConditionTypeFailed, + Status: corev1.ConditionTrue, + Reason: oc.Reason, + Message: oc.Message, + } + instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, f) + instance.Status.Versions.Reconciled = utils.OperandVersion + r.Client.Status().Update(context.TODO(), instance) + } return reconcile.Result{}, err } @@ -130,11 +142,6 @@ func (r *ReconcileWebSphereLibertyDump) Reconcile(ctx context.Context, request c Status: corev1.ConditionTrue, } instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, c) - f := webspherelibertyv1.OperationStatusCondition{ - Type: webspherelibertyv1.OperationStatusConditionTypeFailed, - Status: corev1.ConditionFalse, - } - instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, f) r.Client.Status().Update(context.TODO(), instance) _, err = utils.ExecuteCommandInContainer(r.RestConfig, pod.Name, pod.Namespace, "app", []string{"/bin/sh", "-c", dumpCmd}) @@ -149,15 +156,6 @@ func (r *ReconcileWebSphereLibertyDump) Reconcile(ctx context.Context, request c Message: err.Error(), } instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, c) - // Additionally, set the condition to Failed to update the UI - f = webspherelibertyv1.OperationStatusCondition{ - Type: webspherelibertyv1.OperationStatusConditionTypeFailed, - Status: corev1.ConditionTrue, - Reason: "Error", - Message: err.Error(), - } - instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, f) - reqLogger.Info("conditions:", fmt.Sprint(instance.Status.Conditions)) instance.Status.Versions.Reconciled = utils.OperandVersion r.Client.Status().Update(context.TODO(), instance) return reconcile.Result{}, nil From 610a0864dcf95d9cc81963084415d39f33fa48a4 Mon Sep 17 00:00:00 2001 From: Kirby Chin Date: Wed, 13 Mar 2024 08:09:59 -0400 Subject: [PATCH 09/12] Add debug comment --- controllers/webspherelibertydump_controller.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/controllers/webspherelibertydump_controller.go b/controllers/webspherelibertydump_controller.go index b83e8d2f..cf0ba989 100644 --- a/controllers/webspherelibertydump_controller.go +++ b/controllers/webspherelibertydump_controller.go @@ -82,8 +82,10 @@ func (r *ReconcileWebSphereLibertyDump) Reconcile(ctx context.Context, request c oc := webspherelibertyv1.GetOperationCondtion(instance.Status.Conditions, webspherelibertyv1.OperationStatusConditionTypeStarted) if oc != nil && oc.Status == corev1.ConditionTrue { //check if the Dump failed + reqLogger.Info("-- Dump already started") oc = webspherelibertyv1.GetOperationCondtion(instance.Status.Conditions, webspherelibertyv1.OperationStatusConditionTypeCompleted) if oc != nil && oc.Status == corev1.ConditionFalse { + reqLogger.Info("-- Dump failed") f := webspherelibertyv1.OperationStatusCondition{ Type: webspherelibertyv1.OperationStatusConditionTypeFailed, Status: corev1.ConditionTrue, From e4cee9ddeb7aa5baef086a04c815e4893d283da9 Mon Sep 17 00:00:00 2001 From: Kirby Chin Date: Wed, 13 Mar 2024 08:39:36 -0400 Subject: [PATCH 10/12] Update webspherelibertydump_controller.go --- .../webspherelibertydump_controller.go | 27 ++++++------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/controllers/webspherelibertydump_controller.go b/controllers/webspherelibertydump_controller.go index cf0ba989..299661e7 100644 --- a/controllers/webspherelibertydump_controller.go +++ b/controllers/webspherelibertydump_controller.go @@ -81,21 +81,6 @@ func (r *ReconcileWebSphereLibertyDump) Reconcile(ctx context.Context, request c //do not reconcile if the dump already started oc := webspherelibertyv1.GetOperationCondtion(instance.Status.Conditions, webspherelibertyv1.OperationStatusConditionTypeStarted) if oc != nil && oc.Status == corev1.ConditionTrue { - //check if the Dump failed - reqLogger.Info("-- Dump already started") - oc = webspherelibertyv1.GetOperationCondtion(instance.Status.Conditions, webspherelibertyv1.OperationStatusConditionTypeCompleted) - if oc != nil && oc.Status == corev1.ConditionFalse { - reqLogger.Info("-- Dump failed") - f := webspherelibertyv1.OperationStatusCondition{ - Type: webspherelibertyv1.OperationStatusConditionTypeFailed, - Status: corev1.ConditionTrue, - Reason: oc.Reason, - Message: oc.Message, - } - instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, f) - instance.Status.Versions.Reconciled = utils.OperandVersion - r.Client.Status().Update(context.TODO(), instance) - } return reconcile.Result{}, err } @@ -117,10 +102,8 @@ func (r *ReconcileWebSphereLibertyDump) Reconcile(ctx context.Context, request c instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, c) // Additionally, set the condition to Failed to update the UI f := webspherelibertyv1.OperationStatusCondition{ - Type: webspherelibertyv1.OperationStatusConditionTypeFailed, - Status: corev1.ConditionTrue, - Reason: "Error", - Message: "Failed to find a pod or pod is not in running state", + Type: webspherelibertyv1.OperationStatusConditionTypeFailed, + Status: corev1.ConditionTrue, } instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, f) instance.Status.Versions.Reconciled = utils.OperandVersion @@ -158,6 +141,12 @@ func (r *ReconcileWebSphereLibertyDump) Reconcile(ctx context.Context, request c Message: err.Error(), } instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, c) + // Additionally, set the condition to Failed to update the UI + f := webspherelibertyv1.OperationStatusCondition{ + Type: webspherelibertyv1.OperationStatusConditionTypeFailed, + Status: corev1.ConditionTrue, + } + instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, f) instance.Status.Versions.Reconciled = utils.OperandVersion r.Client.Status().Update(context.TODO(), instance) return reconcile.Result{}, nil From 273a710392479964a78020c68cea3ccbf269abeb Mon Sep 17 00:00:00 2001 From: Kirby Chin Date: Wed, 13 Mar 2024 08:53:22 -0400 Subject: [PATCH 11/12] Display error messages for Failed dump condition --- .../webspherelibertydump_controller.go | 37 ++++++++++++------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/controllers/webspherelibertydump_controller.go b/controllers/webspherelibertydump_controller.go index 299661e7..38cc0f63 100644 --- a/controllers/webspherelibertydump_controller.go +++ b/controllers/webspherelibertydump_controller.go @@ -94,16 +94,16 @@ func (r *ReconcileWebSphereLibertyDump) Reconcile(ctx context.Context, request c reqLogger.Error(err, message) r.Recorder.Event(instance, "Warning", "ProcessingError", message) c := webspherelibertyv1.OperationStatusCondition{ - Type: webspherelibertyv1.OperationStatusConditionTypeStarted, - Status: corev1.ConditionFalse, - Reason: "Error", - Message: "Failed to find a pod or pod is not in running state", + Type: webspherelibertyv1.OperationStatusConditionTypeStarted, + Status: corev1.ConditionFalse, } instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, c) // Additionally, set the condition to Failed to update the UI f := webspherelibertyv1.OperationStatusCondition{ - Type: webspherelibertyv1.OperationStatusConditionTypeFailed, - Status: corev1.ConditionTrue, + Type: webspherelibertyv1.OperationStatusConditionTypeFailed, + Status: corev1.ConditionTrue, + Reason: "Error", + Message: "Failed to find a pod or pod is not in running state", } instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, f) instance.Status.Versions.Reconciled = utils.OperandVersion @@ -127,6 +127,11 @@ func (r *ReconcileWebSphereLibertyDump) Reconcile(ctx context.Context, request c Status: corev1.ConditionTrue, } instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, c) + f := webspherelibertyv1.OperationStatusCondition{ + Type: webspherelibertyv1.OperationStatusConditionTypeFailed, + Status: corev1.ConditionFalse, + } + instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, f) r.Client.Status().Update(context.TODO(), instance) _, err = utils.ExecuteCommandInContainer(r.RestConfig, pod.Name, pod.Namespace, "app", []string{"/bin/sh", "-c", dumpCmd}) @@ -135,16 +140,16 @@ func (r *ReconcileWebSphereLibertyDump) Reconcile(ctx context.Context, request c reqLogger.Error(err, "Execute dump cmd failed.. ", "cmd", dumpCmd) r.Recorder.Event(instance, "Warning", "ProcessingError", err.Error()) c = webspherelibertyv1.OperationStatusCondition{ - Type: webspherelibertyv1.OperationStatusConditionTypeCompleted, - Status: corev1.ConditionFalse, - Reason: "Error", - Message: err.Error(), + Type: webspherelibertyv1.OperationStatusConditionTypeCompleted, + Status: corev1.ConditionFalse, } instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, c) // Additionally, set the condition to Failed to update the UI - f := webspherelibertyv1.OperationStatusCondition{ - Type: webspherelibertyv1.OperationStatusConditionTypeFailed, - Status: corev1.ConditionTrue, + f = webspherelibertyv1.OperationStatusCondition{ + Type: webspherelibertyv1.OperationStatusConditionTypeFailed, + Status: corev1.ConditionTrue, + Reason: "Error", + Message: err.Error(), } instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, f) instance.Status.Versions.Reconciled = utils.OperandVersion @@ -157,8 +162,12 @@ func (r *ReconcileWebSphereLibertyDump) Reconcile(ctx context.Context, request c Type: webspherelibertyv1.OperationStatusConditionTypeCompleted, Status: corev1.ConditionTrue, } - instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, c) + f = webspherelibertyv1.OperationStatusCondition{ + Type: webspherelibertyv1.OperationStatusConditionTypeFailed, + Status: corev1.ConditionFalse, + } + instance.Status.Conditions = webspherelibertyv1.SetOperationCondtion(instance.Status.Conditions, f) instance.Status.DumpFile = dumpFileName instance.Status.Versions.Reconciled = utils.OperandVersion r.Client.Status().Update(context.TODO(), instance) From 2fe6bd88b618349934b8745ca7c0c30f0736f802 Mon Sep 17 00:00:00 2001 From: Kirby Chin Date: Wed, 13 Mar 2024 09:20:12 -0400 Subject: [PATCH 12/12] Update Trace status conditions annotation --- api/v1/webspherelibertytrace_types.go | 1 + .../ibm-websphere-liberty.clusterserviceversion.yaml | 7 ++++++- .../bases/ibm-websphere-liberty.clusterserviceversion.yaml | 5 +++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/api/v1/webspherelibertytrace_types.go b/api/v1/webspherelibertytrace_types.go index 6ed4d136..9efd84c8 100644 --- a/api/v1/webspherelibertytrace_types.go +++ b/api/v1/webspherelibertytrace_types.go @@ -57,6 +57,7 @@ type LicenseSimple struct { // Defines the observed state of WebSphereLibertyTrace operation type WebSphereLibertyTraceStatus struct { // +listType=atomic + // +operator-sdk:csv:customresourcedefinitions:type=status,displayName="Status Conditions",xDescriptors="urn:alm:descriptor:io.kubernetes.conditions" Conditions []OperationStatusCondition `json:"conditions,omitempty"` OperatedResource OperatedResource `json:"operatedResource,omitempty"` Versions TraceStatusVersions `json:"versions,omitempty"` diff --git a/bundle/manifests/ibm-websphere-liberty.clusterserviceversion.yaml b/bundle/manifests/ibm-websphere-liberty.clusterserviceversion.yaml index 2ba5b4b0..5fe7c2b2 100644 --- a/bundle/manifests/ibm-websphere-liberty.clusterserviceversion.yaml +++ b/bundle/manifests/ibm-websphere-liberty.clusterserviceversion.yaml @@ -62,7 +62,7 @@ metadata: capabilities: Auto Pilot categories: Application Runtime containerImage: icr.io/cpopen/websphere-liberty-operator:daily - createdAt: "2024-03-12T18:37:19Z" + createdAt: "2024-03-13T13:19:52Z" description: Deploy and manage containerized Liberty applications olm.skipRange: '>=1.0.0 <1.3.1' operators.openshift.io/infrastructure-features: '["disconnected"]' @@ -733,6 +733,11 @@ spec: path: license.accept x-descriptors: - urn:alm:descriptor:com.tectonic.ui:checkbox + statusDescriptors: + - displayName: Status Conditions + path: conditions + x-descriptors: + - urn:alm:descriptor:io.kubernetes.conditions version: v1 displayName: IBM WebSphere Liberty description: | diff --git a/config/manifests/bases/ibm-websphere-liberty.clusterserviceversion.yaml b/config/manifests/bases/ibm-websphere-liberty.clusterserviceversion.yaml index 70c69e2d..d7bd62bb 100644 --- a/config/manifests/bases/ibm-websphere-liberty.clusterserviceversion.yaml +++ b/config/manifests/bases/ibm-websphere-liberty.clusterserviceversion.yaml @@ -598,6 +598,11 @@ spec: path: license.accept x-descriptors: - urn:alm:descriptor:com.tectonic.ui:checkbox + statusDescriptors: + - displayName: Status Conditions + path: conditions + x-descriptors: + - urn:alm:descriptor:io.kubernetes.conditions version: v1 displayName: IBM WebSphere Liberty icon: