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.
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.
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
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.