Bug 1895952

Summary: catalogSource named "redhat-operators" deleted in a disconnected cluster
Product: OpenShift Container Platform Reporter: OpenShift BugZilla Robot <openshift-bugzilla-robot>
Component: OLMAssignee: Anik <anbhatta>
OLM sub component: OperatorHub QA Contact: Jian Zhang <jiazha>
Status: CLOSED ERRATA Docs Contact:
Severity: high    
Priority: high CC: adellape, dageoffr, krizza, mcornea, nhale, vdinh
Version: 4.6Keywords: AutomationBlocker, Reopened
Target Milestone: ---   
Target Release: 4.6.z   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Cause: https://github.com/operator-framework/operator-marketplace/pull/336 Consequence: Pre 4.6, when marketplace operator had the OperatorSource CRD, customers with a disconnected cluster could disabled the default OperatorSources in the openshift-marketplace namespace and create CatalogSources with the same name as the default sources. Since 4.6, CatalogSources were promoted to first class citizens for marketplace after the OperatorSource CRD was deprecated. As a result openshift-marketplace had default CatalogSource that were managed by the OperatorHub API. In a disconnected environment, when a cluster admin tried to create a CatalogSource with the same name as that of the default sources after disabling the CatalogSources via the OperatorHub API, the OperatorHub API was removing the custom CatalogSource. If the CatalogSources was not disabled via the OperatorHub API and changes were made to the default CatalogSource (for example changing spec.image to point to an internal registry for the disconnected environment), the spec was being restored to the default spec. Fix: Allow for creation/update/deletion of CatalogSources with same name as the default sources if they are disabled via the OperatorHub. Result: Once the cluster is ready in the disconnected environment, disabling a default CatalogSource via the OperatorHub API will allow for the creation of a new CatalogSource with the same name as that of the default CatalogSource. The CatalogSource can be updated/deleted without OperatorHub API intervention too. If the default source is re-enabled via the OperatorHub API, the default spec will be restored for the CatalogSource.
Story Points: ---
Clone Of: Environment:
Last Closed: 2020-11-30 16:46:09 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 1868770    
Bug Blocks:    

Comment 3 Jian Zhang 2020-11-23 02:29:34 UTC
Cluster version is 4.6.0-0.nightly-2020-11-22-160856

[root@preserve-olm-env data]# oc  -n openshift-marketplace exec marketplace-operator-5bcc66f6f6-m44x4 -- marketplace-operator --version
time="2020-11-23T02:20:59Z" level=info msg="Go Version: go1.15.2"
time="2020-11-23T02:20:59Z" level=info msg="Go OS/Arch: linux/amd64"
time="2020-11-23T02:20:59Z" level=info msg="operator-sdk Version: v0.8.0"
Marketplace source git commit: 1fc2b9b4d275f4186e55bf06b12868283159ef67

1, Disable the default CatalogSource resources.
[root@preserve-olm-env data]# oc patch operatorhub cluster -p '{"spec": {"disableAllDefaultSources": true}}' --type=merge
operatorhub.config.openshift.io/cluster patched
[root@preserve-olm-env data]# oc get catalogsource
No resources found in openshift-marketplace namespace.

2, Create a custom CatalogSource with a default CatalogSource object name.
[root@preserve-olm-env data]# cat cs-redhat.yaml 
apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
  name: redhat-operators
  namespace: openshift-marketplace
spec:
  displayName: Red Hat Operators
  icon:
    base64data: ""
    mediatype: ""
  image: quay.io/openshift-qe-optional-operators/ocp4-index:latest
  priority: -100
  publisher: Jian
  sourceType: grpc
  updateStrategy:
    registryPoll:
      interval: 10m0s
[root@preserve-olm-env data]# oc create -f cs-redhat.yaml 
catalogsource.operators.coreos.com/redhat-operators created
[root@preserve-olm-env data]# oc get catalogsource
NAME               DISPLAY             TYPE   PUBLISHER   AGE
redhat-operators   Red Hat Operators   grpc   Jian        8s
[root@preserve-olm-env data]# oc get pods
NAME                                    READY   STATUS              RESTARTS   AGE
marketplace-operator-5bcc66f6f6-m44x4   1/1     Running             0          77m
redhat-operators-w66xx                  0/1     ContainerCreating   0          3s

This custom CatalogSource (Publisher is Jian) can be created well.

3, After the default OperatorHub reenabled, the default CatalogSource objects are back. That custom catalog source object is overwide.
[root@preserve-olm-env data]# oc patch operatorhub cluster -p '{"spec": {"disableAllDefaultSources": false}}' --type=merge
operatorhub.config.openshift.io/cluster patched
[root@preserve-olm-env data]# oc get catalogsource
NAME                  DISPLAY               TYPE   PUBLISHER   AGE
certified-operators   Certified Operators   grpc   Red Hat     9s
community-operators   Community Operators   grpc   Red Hat     9s
redhat-marketplace    Red Hat Marketplace   grpc   Red Hat     9s
redhat-operators      Red Hat Operators     grpc   Red Hat     3m12s
[root@preserve-olm-env data]# oc get pods
NAME                                    READY   STATUS    RESTARTS   AGE
certified-operators-p2xbm               1/1     Running   0          55s
community-operators-774vz               1/1     Running   0          55s
marketplace-operator-5bcc66f6f6-m44x4   1/1     Running   0          80m
redhat-marketplace-l9ttd                1/1     Running   0          55s
redhat-operators-nv577                  1/1     Running   0          55s

LGTM, verify it.

Comment 6 errata-xmlrpc 2020-11-30 16:46:09 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory (OpenShift Container Platform 4.6.6 bug fix update), and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHBA-2020:5115