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/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 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 44b7a1ac..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-01-30T02:09:24Z" + 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"]' @@ -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 @@ -729,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 d8acf53a..d7bd62bb 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 @@ -594,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: diff --git a/controllers/webspherelibertydump_controller.go b/controllers/webspherelibertydump_controller.go index 95651361..38cc0f63 100644 --- a/controllers/webspherelibertydump_controller.go +++ b/controllers/webspherelibertydump_controller.go @@ -94,12 +94,18 @@ 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, + 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, 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 @@ -120,22 +126,32 @@ func (r *ReconcileWebSphereLibertyDump) Reconcile(ctx context.Context, request c Type: webspherelibertyv1.OperationStatusConditionTypeStarted, 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}) 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, - Status: corev1.ConditionFalse, + 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, 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 @@ -146,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)