diff --git a/pkg/olm/handler.go b/pkg/olm/handler.go index f5eefc326de..7fe23a8783d 100644 --- a/pkg/olm/handler.go +++ b/pkg/olm/handler.go @@ -9,6 +9,7 @@ import ( "github.com/openshift/console/pkg/auth" "github.com/openshift/console/pkg/serverutils" "github.com/operator-framework/kubectl-operator/pkg/action" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/client-go/rest" "k8s.io/klog/v2" @@ -70,6 +71,20 @@ func (o *OLMHandler) OperandsList(user *auth.User, w http.ResponseWriter, r *htt serverutils.SendResponse(w, http.StatusBadGateway, serverutils.ApiError{Err: errMsg}) return } + // Deduplicate operands by UID to prevent duplicate CRs + if operandsList != nil && len(operandsList.Items) > 0 { + seen := make(map[string]bool) + uniqueOperands := make([]unstructured.Unstructured, 0, len(operandsList.Items)) + + for _, operand := range operandsList.Items { + uid := string(operand.GetUID()) + if !seen[uid] { + seen[uid] = true + uniqueOperands = append(uniqueOperands, operand) + } + } + operandsList.Items = uniqueOperands + } w.Header().Set("Content-Type", "application/json") resp, err := json.Marshal(operandsList)