Note: This bug is displayed in read-only format because the product is no longer active in Red Hat Bugzilla.

Bug 1714945

Summary: Should deny create the `same` subscription in the same namespace
Product: OpenShift Container Platform Reporter: Jian Zhang <jiazha>
Component: OLMAssignee: Evan Cordell <ecordell>
OLM sub component: OLM QA Contact: Jian Zhang <jiazha>
Status: CLOSED WONTFIX Docs Contact:
Severity: medium    
Priority: medium CC: bandrade, chezhang, chuo, dyan, eparis, jfan, scolange
Version: 4.1.0Keywords: Reopened
Target Milestone: ---   
Target Release: 4.1.z   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of:
: 1746194 (view as bug list) Environment:
Last Closed: 2019-09-20 20:56:24 UTC Type: Bug
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: 1746194    
Bug Blocks:    

Description Jian Zhang 2019-05-29 09:04:42 UTC
Description of problem:
For now, some `same` operators from the different repo: Certified and Community. Some of them call different "startingCSV" in their subscription objects. After installing one of them, continues to install another one in the same namespace. The 2nd installed subscription object is in `Unknown` status always. This will lead to the user cannot install any other operators in this namespace.

I think the OLM should deny creating the 2nd subscription object. 

Version-Release number of selected component (if applicable):
Cluster version is 4.1.0-0.nightly-2019-05-24-040103
OLM source commit: 586ffaf57b5da9cc2301b01e2ea10ce6117928c9

How reproducible:
always

Steps to Reproduce:
1. Install OCP 4.1 and create a new project called "test3".
2. Install the hazelcast operator from Certified. And then install hazelcast operator from Community. Like below:
mac:~ jianzhang$ oc get sub
NAME                             PACKAGE                          SOURCE                      CHANNEL
hazelcast-enterprise             hazelcast-enterprise             installed-community-test3   alpha
hazelcast-enterprise-certified   hazelcast-enterprise-certified   installed-certified-test3   alpha

hazelcast-enterprise-certified


3. Install another operator in this namespace, for example, etcd.
mac:~ jianzhang$ oc get sub
NAME                             PACKAGE                          SOURCE                      CHANNEL
etcd                             etcd                             installed-community-test3   singlenamespace-alpha
hazelcast-enterprise             hazelcast-enterprise             installed-community-test3   alpha
hazelcast-enterprise-certified   hazelcast-enterprise-certified   installed-certified-test3   alpha


Actual results:
The etcd operator cannot be installed as expected. No status.
mac:~ jianzhang$ oc get sub etcd  -o yaml
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  creationTimestamp: "2019-05-29T08:33:30Z"
  generation: 1
  labels:
    csc-owner-name: installed-community-test3
    csc-owner-namespace: openshift-marketplace
  name: etcd
  namespace: test3
  resourceVersion: "1403247"
  selfLink: /apis/operators.coreos.com/v1alpha1/namespaces/test3/subscriptions/etcd
  uid: 6ffeb18f-81ec-11e9-8e37-029ce9e9e584
spec:
  channel: singlenamespace-alpha
  installPlanApproval: Automatic
  name: etcd
  source: installed-community-test3
  sourceNamespace: test3
  startingCSV: etcdoperator.v0.9.4


Expected results:
The OLM should deny creating the 2nd subscription object "hazelcast-enterprise".

Additional info:
The 2nd installed subscription "hazelcast-enterprise" didn't have the Status.
Based on current design, the users cannot install any other operators in this namespace.
Workaround: remove this "Unknown" subscription object(hazelcast-enterprise) manually.

mac:~ jianzhang$ oc get sub hazelcast-enterprise -o yaml
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  creationTimestamp: "2019-05-29T08:28:40Z"
  generation: 1
  labels:
    csc-owner-name: installed-community-test3
    csc-owner-namespace: openshift-marketplace
  name: hazelcast-enterprise
  namespace: test3
  resourceVersion: "1399085"
  selfLink: /apis/operators.coreos.com/v1alpha1/namespaces/test3/subscriptions/hazelcast-enterprise
  uid: c3625807-81eb-11e9-8e37-029ce9e9e584
spec:
  channel: alpha
  installPlanApproval: Automatic
  name: hazelcast-enterprise
  source: installed-community-test3
  sourceNamespace: test3
  startingCSV: hazelcast-operator.v0.0.1

Comment 1 Evan Cordell 2019-08-08 12:07:53 UTC
This does not appear to be an issue anymore.

I created an etcd subscription in openshift-operators, etcd installed as expected.

Then I created an etcd-2 subscription in openshift-operators, with the same package and channel, and it got this status:

apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  creationTimestamp: '2019-08-08T12:03:09Z'
  generation: 1
  name: etcd-2
  namespace: openshift-operators
  resourceVersion: '20524'
  selfLink: >-
    /apis/operators.coreos.com/v1alpha1/namespaces/openshift-operators/subscriptions/etcd-2
  uid: 7d54ae18-b9d4-11e9-be47-0a850cdd866a
spec:
  channel: clusterwide-alpha
  installPlanApproval: Automatic
  name: etcd
  source: community-operators
  sourceNamespace: openshift-marketplace
  startingCSV: etcdoperator.v0.9.4-clusterwide
status:
  catalogHealth:
    - catalogSourceRef:
        apiVersion: operators.coreos.com/v1alpha1
        kind: CatalogSource
        name: certified-operators
        namespace: openshift-marketplace
        resourceVersion: '11562'
        uid: f9e46fb8-b9d0-11e9-9e0b-121f04ce79f4
      healthy: true
      lastUpdated: '2019-08-08T12:03:09Z'
    - catalogSourceRef:
        apiVersion: operators.coreos.com/v1alpha1
        kind: CatalogSource
        name: community-operators
        namespace: openshift-marketplace
        resourceVersion: '12274'
        uid: facb94e8-b9d0-11e9-9e0b-121f04ce79f4
      healthy: true
      lastUpdated: '2019-08-08T12:03:09Z'
    - catalogSourceRef:
        apiVersion: operators.coreos.com/v1alpha1
        kind: CatalogSource
        name: redhat-operators
        namespace: openshift-marketplace
        resourceVersion: '11765'
        uid: f9583ae6-b9d0-11e9-9e0b-121f04ce79f4
      healthy: true
      lastUpdated: '2019-08-08T12:03:09Z'
  conditions:
    - lastTransitionTime: '2019-08-08T12:03:09Z'
      message: all available catalogsources are healthy
      reason: AllCatalogSourcesHealthy
      status: 'False'
      type: CatalogSourcesUnhealthy
  currentCSV: etcdoperator.v0.9.4-clusterwide
  installPlanRef:
    apiVersion: operators.coreos.com/v1alpha1
    kind: InstallPlan
    name: install-mnp9n
    namespace: openshift-operators
    resourceVersion: '20475'
    uid: d86197cb-b9d3-11e9-be47-0a850cdd866a
  installedCSV: etcdoperator.v0.9.4-clusterwide
  installplan:
    apiVersion: operators.coreos.com/v1alpha1
    kind: InstallPlan
    name: install-mnp9n
    uuid: d86197cb-b9d3-11e9-be47-0a850cdd866a
  lastUpdated: '2019-08-08T12:03:14Z'
  state: AtLatestKnown

Then I looked at its installplan, which looks like this:


apiVersion: operators.coreos.com/v1alpha1
kind: ClusterServiceVersion
metadata:
  annotations:
    tectonic-visibility: ocs
    olm.targetNamespaces: ''
    repository: 'https://github.com/coreos/etcd-operator'
    alm-examples: |
      [
        {
          "apiVersion": "etcd.database.coreos.com/v1beta2",
          "kind": "EtcdCluster",
          "metadata": {
            "name": "example",
            "annotations": {
              "etcd.database.coreos.com/scope": "clusterwide"
            }
          },
          "spec": {
            "size": 3,
            "version": "3.2.13"
          }
        },
        {
          "apiVersion": "etcd.database.coreos.com/v1beta2",
          "kind": "EtcdRestore",
          "metadata": {
            "name": "example-etcd-cluster-restore"
          },
          "spec": {
            "etcdCluster": {
              "name": "example-etcd-cluster"
            },
            "backupStorageType": "S3",
            "s3": {
              "path": "<full-s3-path>",
              "awsSecret": "<aws-secret>"
            }
          }
        },
        {
          "apiVersion": "etcd.database.coreos.com/v1beta2",
          "kind": "EtcdBackup",
          "metadata": {
            "name": "example-etcd-cluster-backup"
          },
          "spec": {
            "etcdEndpoints": ["<etcd-cluster-endpoints>"],
            "storageType":"S3",
            "s3": {
              "path": "<full-s3-path>",
              "awsSecret": "<aws-secret>"
            }
          }
        }
      ]
    capabilities: Full Lifecycle
    olm.operatorNamespace: openshift-operators
    containerImage: >-
      quay.io/coreos/etcd-operator@sha256:66a37fd61a06a43969854ee6d3e21087a98b93838e284a6086b13917f96b0d9b
    createdAt: '2019-02-28 01:03:00'
    categories: Database
    description: Create and maintain highly-available etcd clusters on Kubernetes
    olm.operatorGroup: global-operators
  selfLink: >-
    /apis/operators.coreos.com/v1alpha1/namespaces/openshift-operators/clusterserviceversions/etcdoperator.v0.9.4-clusterwide
  resourceVersion: '18485'
  name: etcdoperator.v0.9.4-clusterwide
  uid: d8b9929f-b9d3-11e9-be47-0a850cdd866a
  creationTimestamp: '2019-08-08T11:58:33Z'
  generation: 1
  namespace: openshift-operators
  labels:
    olm.api.2c1e6f7e17c07035: provided
    olm.api.2fdc3540750c4d2b: provided
    olm.api.c571d720f17289d3: provided
spec:
  customresourcedefinitions:
    owned:
      - description: Represents a cluster of etcd nodes.
        displayName: etcd Cluster
        kind: EtcdCluster
        name: etcdclusters.etcd.database.coreos.com
        resources:
          - kind: Service
            name: ''
            version: v1
          - kind: Pod
            name: ''
            version: v1
        specDescriptors:
          - description: The desired number of member Pods for the etcd cluster.
            displayName: Size
            path: size
            x-descriptors:
              - 'urn:alm:descriptor:com.tectonic.ui:podCount'
          - description: >-
              Limits describes the minimum/maximum amount of compute resources
              required/allowed
            displayName: Resource Requirements
            path: pod.resources
            x-descriptors:
              - 'urn:alm:descriptor:com.tectonic.ui:resourceRequirements'
        statusDescriptors:
          - description: The status of each of the member Pods for the etcd cluster.
            displayName: Member Status
            path: members
            x-descriptors:
              - 'urn:alm:descriptor:com.tectonic.ui:podStatuses'
          - description: The service at which the running etcd cluster can be accessed.
            displayName: Service
            path: serviceName
            x-descriptors:
              - 'urn:alm:descriptor:io.kubernetes:Service'
          - description: The current size of the etcd cluster.
            displayName: Cluster Size
            path: size
          - description: The current version of the etcd cluster.
            displayName: Current Version
            path: currentVersion
          - description: 'The target version of the etcd cluster, after upgrading.'
            displayName: Target Version
            path: targetVersion
          - description: The current status of the etcd cluster.
            displayName: Status
            path: phase
            x-descriptors:
              - 'urn:alm:descriptor:io.kubernetes.phase'
          - description: Explanation for the current status of the cluster.
            displayName: Status Details
            path: reason
            x-descriptors:
              - 'urn:alm:descriptor:io.kubernetes.phase:reason'
        version: v1beta2
      - description: Represents the intent to backup an etcd cluster.
        displayName: etcd Backup
        kind: EtcdBackup
        name: etcdbackups.etcd.database.coreos.com
        specDescriptors:
          - description: Specifies the endpoints of an etcd cluster.
            displayName: etcd Endpoint(s)
            path: etcdEndpoints
            x-descriptors:
              - 'urn:alm:descriptor:etcd:endpoint'
          - description: The full AWS S3 path where the backup is saved.
            displayName: S3 Path
            path: s3.path
            x-descriptors:
              - 'urn:alm:descriptor:aws:s3:path'
          - description: >-
              The name of the secret object that stores the AWS credential and
              config files.
            displayName: AWS Secret
            path: s3.awsSecret
            x-descriptors:
              - 'urn:alm:descriptor:io.kubernetes:Secret'
        statusDescriptors:
          - description: Indicates if the backup was successful.
            displayName: Succeeded
            path: succeeded
            x-descriptors:
              - 'urn:alm:descriptor:text'
          - description: Indicates the reason for any backup related failures.
            displayName: Reason
            path: reason
            x-descriptors:
              - 'urn:alm:descriptor:io.kubernetes.phase:reason'
        version: v1beta2
      - description: Represents the intent to restore an etcd cluster from a backup.
        displayName: etcd Restore
        kind: EtcdRestore
        name: etcdrestores.etcd.database.coreos.com
        specDescriptors:
          - description: 'References the EtcdCluster which should be restored,'
            displayName: etcd Cluster
            path: etcdCluster.name
            x-descriptors:
              - 'urn:alm:descriptor:io.kubernetes:EtcdCluster'
              - 'urn:alm:descriptor:text'
          - description: The full AWS S3 path where the backup is saved.
            displayName: S3 Path
            path: s3.path
            x-descriptors:
              - 'urn:alm:descriptor:aws:s3:path'
          - description: >-
              The name of the secret object that stores the AWS credential and
              config files.
            displayName: AWS Secret
            path: s3.awsSecret
            x-descriptors:
              - 'urn:alm:descriptor:io.kubernetes:Secret'
        statusDescriptors:
          - description: Indicates if the restore was successful.
            displayName: Succeeded
            path: succeeded
            x-descriptors:
              - 'urn:alm:descriptor:text'
          - description: Indicates the reason for any restore related failures.
            displayName: Reason
            path: reason
            x-descriptors:
              - 'urn:alm:descriptor:io.kubernetes.phase:reason'
        version: v1beta2
  apiservicedefinitions: {}
  keywords:
    - etcd
    - key value
    - database
    - coreos
    - open source
  displayName: etcd
  provider:
    name: CNCF
  maturity: alpha
  installModes:
    - supported: true
      type: OwnNamespace
    - supported: false
      type: SingleNamespace
    - supported: false
      type: MultiNamespace
    - supported: true
      type: AllNamespaces
  version: 0.9.4-clusterwide
  icon:
    - base64data: >-
        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
      mediatype: image/png
  links:
    - name: Blog
      url: 'https://coreos.com/etcd'
    - name: Documentation
      url: 'https://coreos.com/operators/etcd/docs/latest/'
    - name: etcd Operator Source Code
      url: 'https://github.com/coreos/etcd-operator'
  install:
    spec:
      clusterPermissions:
        - rules:
            - apiGroups:
                - etcd.database.coreos.com
              resources:
                - etcdclusters
                - etcdbackups
                - etcdrestores
              verbs:
                - '*'
            - apiGroups:
                - ''
              resources:
                - pods
                - services
                - endpoints
                - persistentvolumeclaims
                - events
              verbs:
                - '*'
            - apiGroups:
                - apps
              resources:
                - deployments
              verbs:
                - '*'
            - apiGroups:
                - ''
              resources:
                - secrets
              verbs:
                - get
          serviceAccountName: etcd-operator
      deployments:
        - name: etcd-operator
          spec:
            replicas: 1
            selector:
              matchLabels:
                name: etcd-operator-alm-owned
            template:
              metadata:
                labels:
                  name: etcd-operator-alm-owned
                name: etcd-operator-alm-owned
              spec:
                containers:
                  - command:
                      - etcd-operator
                      - '--create-crd=false'
                      - '-cluster-wide'
                    env:
                      - name: MY_POD_NAMESPACE
                        valueFrom:
                          fieldRef:
                            fieldPath: metadata.namespace
                      - name: MY_POD_NAME
                        valueFrom:
                          fieldRef:
                            fieldPath: metadata.name
                    image: >-
                      quay.io/coreos/etcd-operator@sha256:66a37fd61a06a43969854ee6d3e21087a98b93838e284a6086b13917f96b0d9b
                    name: etcd-operator
                  - command:
                      - etcd-backup-operator
                      - '--create-crd=false'
                    env:
                      - name: MY_POD_NAMESPACE
                        valueFrom:
                          fieldRef:
                            fieldPath: metadata.namespace
                      - name: MY_POD_NAME
                        valueFrom:
                          fieldRef:
                            fieldPath: metadata.name
                    image: >-
                      quay.io/coreos/etcd-operator@sha256:66a37fd61a06a43969854ee6d3e21087a98b93838e284a6086b13917f96b0d9b
                    name: etcd-backup-operator
                  - command:
                      - etcd-restore-operator
                      - '--create-crd=false'
                    env:
                      - name: MY_POD_NAMESPACE
                        valueFrom:
                          fieldRef:
                            fieldPath: metadata.namespace
                      - name: MY_POD_NAME
                        valueFrom:
                          fieldRef:
                            fieldPath: metadata.name
                    image: >-
                      quay.io/coreos/etcd-operator@sha256:66a37fd61a06a43969854ee6d3e21087a98b93838e284a6086b13917f96b0d9b
                    name: etcd-restore-operator
                serviceAccountName: etcd-operator
    strategy: deployment
  maintainers:
    - email: etcd-dev
      name: etcd Community
  description: >
    The etcd Operater creates and maintains highly-available etcd clusters on
    Kubernetes, allowing engineers to easily deploy and manage etcd clusters for
    their applications.


    etcd is a distributed key value store that provides a reliable way to store
    data across a cluster of machines. It’s open-source and available on GitHub.
    etcd gracefully handles leader elections during network partitions and will
    tolerate machine failure, including the leader.



    ### Reading and writing to etcd


    Communicate with etcd though its command line utility `etcdctl` via port
    forwarding:

        $ kubectl --namespace default port-forward service/example-client 2379:2379
        $ etcdctl --endpoints http://127.0.0.1:2379 get /

    Or directly to the API using the automatically generated Kubernetes Service:

        $ etcdctl --endpoints http://example-client.default.svc:2379 get /

    Be sure to secure your etcd cluster (see Common Configurations) before
    exposing it outside of the namespace or cluster.



    ### Supported Features


    * **High availability** - Multiple instances of etcd are networked together
    and secured. Individual failures or networking issues are transparently
    handled to keep your cluster up and running.


    * **Automated updates** - Rolling out a new etcd version works like all
    Kubernetes rolling updates. Simply declare the desired version, and the etcd
    service starts a safe rolling update to the new version automatically.


    * **Backups included** - Create etcd backups and restore them through the
    etcd Operator.


    ### Common Configurations


    * **Configure TLS** - Specify [static TLS
    certs](https://github.com/coreos/etcd-operator/blob/master/doc/user/cluster_tls.md)
    as Kubernetes secrets.


    * **Set Node Selector and Affinity** - [Spread your etcd
    Pods](https://github.com/coreos/etcd-operator/blob/master/doc/user/spec_examples.md#three-member-cluster-with-node-selector-and-anti-affinity-across-nodes)
    across Nodes and availability zones.


    * **Set Resource Limits** - [Set the Kubernetes limit and
    request](https://github.com/coreos/etcd-operator/blob/master/doc/user/spec_examples.md#three-member-cluster-with-resource-requirement)
    values for your etcd Pods.


    * **Customize Storage** - [Set a custom
    StorageClass](https://github.com/coreos/etcd-operator/blob/master/doc/user/spec_examples.md#custom-persistentvolumeclaim-definition)
    that you would like to use.
  replaces: etcdoperator.v0.9.2-clusterwide
  selector:
    matchLabels:
      alm-owner-etcd: etcdoperator
      operated-by: etcdoperator
  labels:
    alm-owner-etcd: etcdoperator
    operated-by: etcdoperator
status:
  reason: InstallSucceeded
  message: install strategy completed with no errors
  lastUpdateTime: '2019-08-08T11:58:41Z'
  requirementStatus:
    - group: operators.coreos.com
      kind: ClusterServiceVersion
      message: CSV missing minimum kube version specification
      name: etcdoperator.v0.9.4-clusterwide
      status: NotPresent
      version: v1alpha1
    - group: apiextensions.k8s.io
      kind: CustomResourceDefinition
      message: CRD is present and Established condition is true
      name: etcdbackups.etcd.database.coreos.com
      status: Present
      uuid: d8bb25c5-b9d3-11e9-be47-0a850cdd866a
      version: v1beta1
    - group: apiextensions.k8s.io
      kind: CustomResourceDefinition
      message: CRD is present and Established condition is true
      name: etcdclusters.etcd.database.coreos.com
      status: Present
      uuid: d8bc72ee-b9d3-11e9-be47-0a850cdd866a
      version: v1beta1
    - group: apiextensions.k8s.io
      kind: CustomResourceDefinition
      message: CRD is present and Established condition is true
      name: etcdrestores.etcd.database.coreos.com
      status: Present
      uuid: d8be9c1a-b9d3-11e9-be47-0a850cdd866a
      version: v1beta1
    - dependents:
        - group: rbac.authorization.k8s.io
          kind: PolicyRule
          message: >-
            cluster
            rule:{"verbs":["*"],"apiGroups":["etcd.database.coreos.com"],"resources":["etcdclusters","etcdbackups","etcdrestores"]}
          status: Satisfied
          version: v1beta1
        - group: rbac.authorization.k8s.io
          kind: PolicyRule
          message: >-
            cluster
            rule:{"verbs":["*"],"apiGroups":[""],"resources":["pods","services","endpoints","persistentvolumeclaims","events"]}
          status: Satisfied
          version: v1beta1
        - group: rbac.authorization.k8s.io
          kind: PolicyRule
          message: >-
            cluster
            rule:{"verbs":["*"],"apiGroups":["apps"],"resources":["deployments"]}
          status: Satisfied
          version: v1beta1
        - group: rbac.authorization.k8s.io
          kind: PolicyRule
          message: >-
            cluster
            rule:{"verbs":["get"],"apiGroups":[""],"resources":["secrets"]}
          status: Satisfied
          version: v1beta1
      group: ''
      kind: ServiceAccount
      message: ''
      name: etcd-operator
      status: Present
      version: v1
  certsLastUpdated: null
  lastTransitionTime: '2019-08-08T11:58:41Z'
  conditions:
    - lastTransitionTime: '2019-08-08T11:58:33Z'
      lastUpdateTime: '2019-08-08T11:58:33Z'
      message: requirements not yet checked
      phase: Pending
      reason: RequirementsUnknown
    - lastTransitionTime: '2019-08-08T11:58:33Z'
      lastUpdateTime: '2019-08-08T11:58:33Z'
      message: 'all requirements found, attempting install'
      phase: InstallReady
      reason: AllRequirementsMet
    - lastTransitionTime: '2019-08-08T11:58:33Z'
      lastUpdateTime: '2019-08-08T11:58:33Z'
      message: waiting for install components to report healthy
      phase: Installing
      reason: InstallSucceeded
    - lastTransitionTime: '2019-08-08T11:58:33Z'
      lastUpdateTime: '2019-08-08T11:58:35Z'
      message: >
        installing: Waiting: waiting for deployment etcd-operator to become
        ready: Waiting for rollout to finish: 0 of 1 updated replicas are
        available...
      phase: Installing
      reason: InstallWaiting
    - lastTransitionTime: '2019-08-08T11:58:41Z'
      lastUpdateTime: '2019-08-08T11:58:41Z'
      message: install strategy completed with no errors
      phase: Succeeded
      reason: InstallSucceeded
  phase: Succeeded
  certsRotateAt: null


Which looks fine

Comment 2 Evan Cordell 2019-08-08 12:08:48 UTC
Wrong yaml, this is the installplan:

apiVersion: operators.coreos.com/v1alpha1
kind: InstallPlan
metadata:
  generateName: install-
  selfLink: >-
    /apis/operators.coreos.com/v1alpha1/namespaces/openshift-operators/installplans/install-mnp9n
  resourceVersion: '20511'
  name: install-mnp9n
  uid: d86197cb-b9d3-11e9-be47-0a850cdd866a
  creationTimestamp: '2019-08-08T11:58:33Z'
  generation: 1
  namespace: openshift-operators
  ownerReferences:
    - apiVersion: operators.coreos.com/v1alpha1
      blockOwnerDeletion: false
      controller: false
      kind: Subscription
      name: etcd
      uid: d859fd16-b9d3-11e9-be47-0a850cdd866a
    - apiVersion: operators.coreos.com/v1alpha1
      blockOwnerDeletion: false
      controller: false
      kind: Subscription
      name: etcd-2
      uid: 7d54ae18-b9d4-11e9-be47-0a850cdd866a
spec:
  approval: Automatic
  approved: true
  clusterServiceVersionNames:
    - etcdoperator.v0.9.4-clusterwide
  source: ''
  sourceNamespace: ''
status:
  catalogSources:
    - community-operators
  conditions:
    - lastTransitionTime: '2019-08-08T11:58:33Z'
      lastUpdateTime: '2019-08-08T12:03:10Z'
      status: 'True'
      type: Installed
  phase: Complete
  plan:
    - resolving: etcdoperator.v0.9.4-clusterwide
      resource:
        group: operators.coreos.com
        kind: ClusterServiceVersion
        manifest: >
          {"kind":"ClusterServiceVersion","apiVersion":"operators.coreos.com/v1alpha1","metadata":{"name":"etcdoperator.v0.9.4-clusterwide","namespace":"openshift-operators","creationTimestamp":null,"annotations":{"alm-examples":"[\n 
          {\n    \"apiVersion\": \"etcd.database.coreos.com/v1beta2\",\n   
          \"kind\": \"EtcdCluster\",\n    \"metadata\": {\n      \"name\":
          \"example\",\n      \"annotations\": {\n       
          \"etcd.database.coreos.com/scope\": \"clusterwide\"\n      }\n   
          },\n    \"spec\": {\n      \"size\": 3,\n      \"version\":
          \"3.2.13\"\n    }\n  },\n  {\n    \"apiVersion\":
          \"etcd.database.coreos.com/v1beta2\",\n    \"kind\":
          \"EtcdRestore\",\n    \"metadata\": {\n      \"name\":
          \"example-etcd-cluster-restore\"\n    },\n    \"spec\": {\n     
          \"etcdCluster\": {\n        \"name\": \"example-etcd-cluster\"\n     
          },\n      \"backupStorageType\": \"S3\",\n      \"s3\": {\n       
          \"path\": \"\u003cfull-s3-path\u003e\",\n        \"awsSecret\":
          \"\u003caws-secret\u003e\"\n      }\n    }\n  },\n  {\n   
          \"apiVersion\": \"etcd.database.coreos.com/v1beta2\",\n    \"kind\":
          \"EtcdBackup\",\n    \"metadata\": {\n      \"name\":
          \"example-etcd-cluster-backup\"\n    },\n    \"spec\": {\n     
          \"etcdEndpoints\": [\"\u003cetcd-cluster-endpoints\u003e\"],\n     
          \"storageType\":\"S3\",\n      \"s3\": {\n        \"path\":
          \"\u003cfull-s3-path\u003e\",\n        \"awsSecret\":
          \"\u003caws-secret\u003e\"\n      }\n    }\n 
          }\n]\n","capabilities":"Full
          Lifecycle","categories":"Database","containerImage":"quay.io/coreos/etcd-operator@sha256:66a37fd61a06a43969854ee6d3e21087a98b93838e284a6086b13917f96b0d9b","createdAt":"2019-02-28
          01:03:00","description":"Create and maintain highly-available etcd
          clusters on
          Kubernetes","repository":"https://github.com/coreos/etcd-operator","tectonic-visibility":"ocs"}},"spec":{"install":{"strategy":"deployment","spec":{"clusterPermissions":[{"rules":[{"apiGroups":["etcd.database.coreos.com"],"resources":["etcdclusters","etcdbackups","etcdrestores"],"verbs":["*"]},{"apiGroups":[""],"resources":["pods","services","endpoints","persistentvolumeclaims","events"],"verbs":["*"]},{"apiGroups":["apps"],"resources":["deployments"],"verbs":["*"]},{"apiGroups":[""],"resources":["secrets"],"verbs":["get"]}],"serviceAccountName":"etcd-operator"}],"deployments":[{"name":"etcd-operator","spec":{"replicas":1,"selector":{"matchLabels":{"name":"etcd-operator-alm-owned"}},"template":{"metadata":{"labels":{"name":"etcd-operator-alm-owned"},"name":"etcd-operator-alm-owned"},"spec":{"containers":[{"command":["etcd-operator","--create-crd=false","-cluster-wide"],"env":[{"name":"MY_POD_NAMESPACE","valueFrom":{"fieldRef":{"fieldPath":"metadata.namespace"}}},{"name":"MY_POD_NAME","valueFrom":{"fieldRef":{"fieldPath":"metadata.name"}}}],"image":"quay.io/coreos/etcd-operator@sha256:66a37fd61a06a43969854ee6d3e21087a98b93838e284a6086b13917f96b0d9b","name":"etcd-operator"},{"command":["etcd-backup-operator","--create-crd=false"],"env":[{"name":"MY_POD_NAMESPACE","valueFrom":{"fieldRef":{"fieldPath":"metadata.namespace"}}},{"name":"MY_POD_NAME","valueFrom":{"fieldRef":{"fieldPath":"metadata.name"}}}],"image":"quay.io/coreos/etcd-operator@sha256:66a37fd61a06a43969854ee6d3e21087a98b93838e284a6086b13917f96b0d9b","name":"etcd-backup-operator"},{"command":["etcd-restore-operator","--create-crd=false"],"env":[{"name":"MY_POD_NAMESPACE","valueFrom":{"fieldRef":{"fieldPath":"metadata.namespace"}}},{"name":"MY_POD_NAME","valueFrom":{"fieldRef":{"fieldPath":"metadata.name"}}}],"image":"quay.io/coreos/etcd-operator@sha256:66a37fd61a06a43969854ee6d3e21087a98b93838e284a6086b13917f96b0d9b","name":"etcd-restore-operator"}],"serviceAccountName":"etcd-operator"}}}}]}},"version":"0.9.4-clusterwide","maturity":"alpha","customresourcedefinitions":{"owned":[{"name":"etcdclusters.etcd.database.coreos.com","version":"v1beta2","kind":"EtcdCluster","displayName":"etcd
          Cluster","description":"Represents a cluster of etcd
          nodes.","resources":[{"name":"","kind":"Service","version":"v1"},{"name":"","kind":"Pod","version":"v1"}],"statusDescriptors":[{"path":"members","displayName":"Member
          Status","description":"The status of each of the member Pods for the
          etcd
          cluster.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:podStatuses"]},{"path":"serviceName","displayName":"Service","description":"The
          service at which the running etcd cluster can be
          accessed.","x-descriptors":["urn:alm:descriptor:io.kubernetes:Service"]},{"path":"size","displayName":"Cluster
          Size","description":"The current size of the etcd
          cluster."},{"path":"currentVersion","displayName":"Current
          Version","description":"The current version of the etcd
          cluster."},{"path":"targetVersion","displayName":"Target
          Version","description":"The target version of the etcd cluster, after
          upgrading."},{"path":"phase","displayName":"Status","description":"The
          current status of the etcd
          cluster.","x-descriptors":["urn:alm:descriptor:io.kubernetes.phase"]},{"path":"reason","displayName":"Status
          Details","description":"Explanation for the current status of the
          cluster.","x-descriptors":["urn:alm:descriptor:io.kubernetes.phase:reason"]}],"specDescriptors":[{"path":"size","displayName":"Size","description":"The
          desired number of member Pods for the etcd
          cluster.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:podCount"]},{"path":"pod.resources","displayName":"Resource
          Requirements","description":"Limits describes the minimum/maximum
          amount of compute resources
          required/allowed","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:resourceRequirements"]}]},{"name":"etcdbackups.etcd.database.coreos.com","version":"v1beta2","kind":"EtcdBackup","displayName":"etcd
          Backup","description":"Represents the intent to backup an etcd
          cluster.","statusDescriptors":[{"path":"succeeded","displayName":"Succeeded","description":"Indicates
          if the backup was
          successful.","x-descriptors":["urn:alm:descriptor:text"]},{"path":"reason","displayName":"Reason","description":"Indicates
          the reason for any backup related
          failures.","x-descriptors":["urn:alm:descriptor:io.kubernetes.phase:reason"]}],"specDescriptors":[{"path":"etcdEndpoints","displayName":"etcd
          Endpoint(s)","description":"Specifies the endpoints of an etcd
          cluster.","x-descriptors":["urn:alm:descriptor:etcd:endpoint"]},{"path":"s3.path","displayName":"S3
          Path","description":"The full AWS S3 path where the backup is
          saved.","x-descriptors":["urn:alm:descriptor:aws:s3:path"]},{"path":"s3.awsSecret","displayName":"AWS
          Secret","description":"The name of the secret object that stores the
          AWS credential and config
          files.","x-descriptors":["urn:alm:descriptor:io.kubernetes:Secret"]}]},{"name":"etcdrestores.etcd.database.coreos.com","version":"v1beta2","kind":"EtcdRestore","displayName":"etcd
          Restore","description":"Represents the intent to restore an etcd
          cluster from a
          backup.","statusDescriptors":[{"path":"succeeded","displayName":"Succeeded","description":"Indicates
          if the restore was
          successful.","x-descriptors":["urn:alm:descriptor:text"]},{"path":"reason","displayName":"Reason","description":"Indicates
          the reason for any restore related
          failures.","x-descriptors":["urn:alm:descriptor:io.kubernetes.phase:reason"]}],"specDescriptors":[{"path":"etcdCluster.name","displayName":"etcd
          Cluster","description":"References the EtcdCluster which should be
          restored,","x-descriptors":["urn:alm:descriptor:io.kubernetes:EtcdCluster","urn:alm:descriptor:text"]},{"path":"s3.path","displayName":"S3
          Path","description":"The full AWS S3 path where the backup is
          saved.","x-descriptors":["urn:alm:descriptor:aws:s3:path"]},{"path":"s3.awsSecret","displayName":"AWS
          Secret","description":"The name of the secret object that stores the
          AWS credential and config
          files.","x-descriptors":["urn:alm:descriptor:io.kubernetes:Secret"]}]}]},"apiservicedefinitions":{},"displayName":"etcd","description":"The
          etcd Operater creates and maintains highly-available etcd clusters on
          Kubernetes, allowing engineers to easily deploy and manage etcd
          clusters for their applications.\n\netcd is a distributed key value
          store that provides a reliable way to store data across a cluster of
          machines. It’s open-source and available on GitHub. etcd gracefully
          handles leader elections during network partitions and will tolerate
          machine failure, including the leader.\n\n\n### Reading and writing to
          etcd\n\nCommunicate with etcd though its command line utility
          `etcdctl` via port forwarding:\n\n    $ kubectl --namespace default
          port-forward service/example-client 2379:2379\n    $ etcdctl
          --endpoints http://127.0.0.1:2379 get /\n\nOr directly to the API
          using the automatically generated Kubernetes Service:\n\n    $ etcdctl
          --endpoints http://example-client.default.svc:2379 get /\n\nBe sure to
          secure your etcd cluster (see Common Configurations) before exposing
          it outside of the namespace or cluster.\n\n\n### Supported
          Features\n\n* **High availability** - Multiple instances of etcd are
          networked together and secured. Individual failures or networking
          issues are transparently handled to keep your cluster up and
          running.\n\n* **Automated updates** - Rolling out a new etcd version
          works like all Kubernetes rolling updates. Simply declare the desired
          version, and the etcd service starts a safe rolling update to the new
          version automatically.\n\n* **Backups included** - Create etcd backups
          and restore them through the etcd Operator.\n\n### Common
          Configurations\n\n* **Configure TLS** - Specify [static TLS
          certs](https://github.com/coreos/etcd-operator/blob/master/doc/user/cluster_tls.md)
          as Kubernetes secrets.\n\n* **Set Node Selector and Affinity** -
          [Spread your etcd
          Pods](https://github.com/coreos/etcd-operator/blob/master/doc/user/spec_examples.md#three-member-cluster-with-node-selector-and-anti-affinity-across-nodes)
          across Nodes and availability zones.\n\n* **Set Resource Limits** -
          [Set the Kubernetes limit and
          request](https://github.com/coreos/etcd-operator/blob/master/doc/user/spec_examples.md#three-member-cluster-with-resource-requirement)
          values for your etcd Pods.\n\n* **Customize Storage** - [Set a custom
          StorageClass](https://github.com/coreos/etcd-operator/blob/master/doc/user/spec_examples.md#custom-persistentvolumeclaim-definition)
          that you would like to use.\n","keywords":["etcd","key
          value","database","coreos","open source"],"maintainers":[{"name":"etcd
          Community","email":"etcd-dev"}],"provider":{"name":"CNCF"},"links":[{"name":"Blog","url":"https://coreos.com/etcd"},{"name":"Documentation","url":"https://coreos.com/operators/etcd/docs/latest/"},{"name":"etcd
          Operator Source
          Code","url":"https://github.com/coreos/etcd-operator"}],"icon":[{"base64data":"iVBORw0KGgoAAAANSUhEUgAAAOEAAADZCAYAAADWmle6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAEKlJREFUeNrsndt1GzkShmEev4sTgeiHfRYdgVqbgOgITEVgOgLTEQydwIiKwFQCayoCU6+7DyYjsBiBFyVVz7RkXvqCSxXw/+f04XjGQ6IL+FBVuL769euXgZ7r39f/G9iP0X+u/jWDNZzZdGI/Ftama1jjuV4BwmcNpbAf1Fgu+V/9YRvNAyzT2a59+/GT/3hnn5m16wKWedJrmOCxkYztx9Q+py/+E0GJxtJdReWfz+mxNt+QzS2Mc0AI+HbBBwj9QViKbH5t64DsP2fvmGXUkWU4WgO+Uve2YQzBUGd7r+zH2ZG/tiUQc4QxKwgbwFfVGwwmdLL5wH78aPC/ZBem9jJpCAX3xtcNASSNgJLzUPSQyjB1zQNl8IQJ9MIU4lx2+Jo72ysXYKl1HSzN02BMa/vbZ5xyNJIshJzwf3L0dQhJw4Sih/SFw9Tk8sVeghVPoefaIYCkMZCKbrcP9lnZuk0uPUjGE/KE8JQry7W2tgfuC3vXgvNV+qSQbyFtAtyWk7zWiYevvuUQ9QEQCvJ+5mmu6dTjz1zFHLFj8Eb87MtxaZh/IQFIHom+9vgTWwZxAQjT9X4vtbEVPojwjiV471s00mhAckpwGuCn1HtFtRDaSh6y9zsL+LNBvCG/24ThcxHObdlWc1v+VQJe8LcO0jwtuF8BwnAAUgP9M8JPU2Me+Oh12auPGT6fHuTePE3bLDy+x9pTLnhMn+07TQGh//Bz1iI0c6kvtqInjvPZcYR3KsPVmUsPYt9nFig9SCY8VQNhpPBzn952bbgcsk2EvM89wzh3UEffBbyPqvBUBYQ8ODGPFOLsa7RF096WJ69L+E4EmnpjWu5o4ChlKaRTKT39RMMaVPEQRsz/nIWlDN80chjdJlSd1l0pJCAMVZsniobQVuxceMM9OFoaMd9zqZtjMEYYDW38Drb8Y0DYPLShxn0pvIFuOSxd7YCPet9zk452wsh54FJoeN05hcgSQoG5RR0Qh9Q4E4VvL4wcZq8UACgaRFEQKgSwWrkr5WFnGxiHSutqJGlXjBgIOayhwYBTA0ER0oisIVSUV0AAMT0IASCUO4hRIQSAEECMCCEPwqyQA0JCQBzEGjWNAqHiUVAoXUWbvggOIQCEAOJzxTjoaQ4AIaE64/aZridUsBYUgkhB15oGg1DBIl8IqirYwV6hPSGBSFteMCUBSVXwfYixBmamRubeMyjzMJQBDDowE3OesDD+zwqFoDqiEwXoXJpljB+PvWJGy75BKF1FPxhKygJuqUdYQGlLxNEXkrYyjQ0GbaAwEnUIlLRNvVjQDYUAsJB0HKLE4y0AIpQNgCIhBIhQTgCKhZBBpAN/v6LtQI50JfUgYOnnjmLUFHKhjxbAmdTCaTiBm3ovLPqG2urWAij6im0Nd9aTN9ygLUEt9LgSRnohxUPIKxlGaE+/6Y7znFf0yX+GnkvFFWmarkab2o9PmTeq8sbd2a7DaysXz7i64VeznN4jCQhN9gdDbRiuWrfrsq0mHIrlaq+hlotCtd3Um9u0BYWY8y5D67wccJoZjFca7iUs9VqZcfsZwTd1sbWGG+OcYaTnPAP7rTQVVlM4Sg3oGvB1tmNh0t/HKXZ1jFoIMwCQjtqbhNxUmkGYqgZEDZP11HN/S3gAYRozf0l8C5kKEKUvW0t1IfeWG/5MwgheZTT1E0AEhDkAePQO+Ig2H3DncAkQM4cwUQCD530dU4B5Yvmi2LlDqXfWrxMCcMth51RToRMNUXFnfc2KJ0+Ryl0VNOUwlhh6NoxK5gnViTgQpUG4SqSyt5z3zRJpuKmt3Q1614QaCBPaN6je+2XiFcWAKOXcUfIYKRyL/1lb7pe5VxSxxjQ6hImshqGRt5GWZVKO6q2wHwujfwDtIvaIdexj8Cm8+a68EqMfox6x/voMouZF4dHnEGNeCDMwT6vdNfekH1MafMk4PI06YtqLVGl95aEM9Z5vAeCTOA++YLtoVJRrsqNCaJ6WRmkdYaNec5BT/lcTRMqrhmwfjbpkj55+OKp8IEbU/JLgPJE6Wa3TTe9sHS+ShVD5QIyqIxMEwKh12olC6mHIed5ewEop80CNlfIOADYOT2nd6ZXCop+Ebqchc0JqxKcKASxChycJgUh1rnHA5ow9eTrhqNI7JWiAYYwBGGdpyNLoGw0Pkh96h1BpHihyywtATDM/7Hk2fN9EnH8BgKJCU4ooBkbXFMZJiPbrOyecGl3zgQDQL4hk10IZiOe+5w99Q/gBAEIJgPhJM4QAEEoFREAIAAEiIASAkD8Qt4AQAEIAERAGFlX4CACKAXGVM4ivMwWwCLFAlyeoaa70QePKm5Dlp+/n+ye/5dYgva6YsUaVeMa+tzNFeJtWwc+udbJ0Fg399kLielQJ5Ze61c2+7ytA6EZetiPxZC6tj22yJCv6jUwOyj/zcbqAxOMyAKEbfeHtNa7DtYXptjsk2kJxR+eIeim/tHNofUKYy8DMrQcAKWz6brpvzyIAlpwPhQ49l6b7skJf5Z+YTOYQc4FwLDxvoTDwaygQK+U/kVr+ytSFBG01Q3gnJJR4cNiAhx4HDub8/b5DULXlj6SVZghFiE+LdvE9vo/o8Lp1RmH5hzm0T6wdbZ6n+D6i44zDRc3ln6CpAEJfXiRU45oqLz8gFAThWsh7ughrRibc0QynHgZpNJa/ENJ+loCwu/qOGnFIjYR/n7TfgycULhcQhu6VC+HfF+L3BoAQ4WiZTw1M+FPCnA2gKC6/FAhXgDC+ojQGh3NuWsvfF1L/D5ohlCKtl1j2ldu9a/nPAKFwN56Bst10zCG0CPleXN/zXPgHQZXaZaBgrbzyY5V/mUA+6F0hwtGN9rwu5DVZPuwWqfxdFz1LWbJ2lwKEa+0Qsm4Dl3fp+Pu0lV97PgwIPfSsS+UQhj5Oo+vvFULazRIQyvGEcxPuNLCth2MvFsrKn8UOilAQShkh7TTczYNMoS6OdP47msrPi82lXKGWhCdMZYS0bFy+vcnGAjP1CIfvgbKNA9glecEH9RD6Ol4wRuWyN/G9MHnksS6o/GPf5XcwNSUlHzQhDuAKtWJmkwKElU7lylP5rgIcsquh/FI8YZCDpkJBuE4FQm7Icw8N+SrUGaQKyi8FwiDt1ve5o+Vu7qYHy/psgK8cvh+FTYuO77bhEC7GuaPiys/L1X4IgXDL+e3M5+ovLxBy5VLuIebw1oqcHoPfoaMJUsHays878r8KbDc3xtPx/84gZPBG/JwaufrsY/SRG/OY3//8QMNdsvdZCFtbW6f8pFuf5bflILAlX7O+4fdfugKyFYS8T2zAsXthdG0VurPGKwI06oF5vkBgHWkNp6ry29+lsPZMU3vijnXFNmoclr+6+Ou/FIb8yb30sS8YGjmTqCLyQsi5N/6ZwKs0Yenj68pfPjF6N782Dp2FzV9CTyoSeY8mLK16qGxIkLI8oa1n8tz9juP40DlK0epxYEbojbq+9QfurBeVIlCO9D2396bxiV4lkYQ3hOAFw2pbhqMGISkkQOMcQ9EqhDmGZZdo92JC0YHRNTfoSg+5e0IT+opqCKHoIU+4ztQIgBD1EFNrQAgIpYSil9lDmPHqkROPt+JC6AgPquSuumJmg0YARVCuneDfvPVeJokZ6pIXDkNxQtGzTF9/BQjRG0tQznfb74RwCQghpALBtIQnfK4zhxdyQvVCUeknMIT3hLyY+T5jo0yABqKPQNpUNw/09tGZod5jgCaYFxyYvJcNPkv9eof+I3pnCFEHIETjSM8L9tHZHYCQT9PaZGycU6yg8S4akDnJ+P03L0+t23XGzCLzRgII/Wqa+fv/xlfvmKvMUOcOrlCDdoei1MGdZm6G5VEIfRzzjd4aQs69n699Rx7ewhvCGzr2gmTPs8zNsJOrXt24FbkhhOjCfT4ICA/rPbyhUy94Dks0gJCX1NzCZui9YUd3oei+c257TalFbgg19ILHrlrL2gvWgXAL26EX76gZTNASQnad8Ibwhl284NhgXpB0c+jKhWO3Ms1hP9ihJYB9eMF6qd1BCPk0qA1s+LimFIu7m4nsdQIzPK4VbQ8hYvrnuSH2G9b2ggP78QmWqBdF9Vx8SSY6QYdUW7BTA1schZATyhvY8lHvcRbNUS9YGFy2U+qmzh2YPVc0I7yAOFyHfRpyUwtCSzOdPXMHmz7qDIM0e0V2wZTEk+6Ym6N63eBLp/b5Bts+2cKCSJ/LuoZO3ANSiE5hKAZjnvNSS4931jcw9jpwT0feV/qSJ1pVtCyfHKDkvK8Ejx7pUxGh2xFNSwx8QTi2H9ceC0/nni64MS/5N5dG39pDqvRV+WgGk71c9VFXF9b+xYvOw/d61iv7m3MvEHryhvecwC52jSSx4VIIgwnMNT/UsTxIgpPt3K/ARj15CptwL3Zd/ceDSATj2DGQjbxgWwhdeMMte7zpy5On9vymRm/YxBYljGVjKWF9VJf7I1+sex3wY8w/V1QPTborW/72gkdsRDaZMJBdbdHIC7aCkAu9atlLbtnrzerMnyToDaGwelOnk3/hHSem/ZK7e/t7jeeR20LYBgqa8J80gS8jbwi5F02Uj1u2NYJxap8PLkJfLxA2hIJyvnHX/AfeEPLpBfe0uSFHbnXaea3Qd5d6HcpYZ8L6M7lnFwMQ3MNg+RxUR1+6AshtbsVgfXTEg1sIGax9UND2p7f270wdG3eK9gXVGHdw2k5sOyZv+Nbs39Z308XR9DqWb2J+PwKDhuKHPobfuXf7gnYGHdCs7bhDDadD4entDug7LWNsnRNW4mYqwJ9dk+GGSTPBiA2j0G8RWNM5upZtcG4/3vMfP7KnbK2egx6CCnDPhRn7NgD3cghLIad5WcM2SO38iqHvvMOosyeMpQ5zlVCaaj06GVs9xUbHdiKoqrHWgquFEFMWUEWfXUxJAML23hAHFOctmjZQffKD2pywkhtSGHKNtpitLroscAeE7kCkSsC60vxEl6yMtL9EL5HKGCMszU5bk8gdkklAyEn5FO0yK419rIxBOIqwFMooDE0tHEVYijAUECIshRCGIhxFWIowFJ5QkEYIS5PTJrUwNGlPyN6QQPyKtpuM1E/K5+YJDV/MiA3AaehzqgAm7QnZG9IGYKo8bHnSK7VblLL3hOwNHziPuEGOqE5brrdR6i+atCfckyeWD47HkAkepRGLY/e8A8J0gCwYSNypF08bBm+e6zVz2UL4AshhBUjML/rXLefqC82bcQFhGC9JDwZ1uuu+At0S5gCETYHsV4DUeD9fDN2Zfy5OXaW2zAwQygCzBLJ8cvaW5OXKC1FxfTggFAHmoAJnSiOw2wps9KwRWgJCLaEswaj5NqkLwAYIU4BxqTSXbHXpJdRMPZgAOiAMqABCNGYIEEJutEK5IUAIwYMDQgiCACEEAcJs1Vda7gGqDhCmoiEghAAhBAHCrKXVo2C1DCBMRlp37uMIEECoX7xrX3P5C9QiINSuIcoPAUI0YkAICLNWgfJDh4T9hH7zqYH9+JHAq7zBqWjwhPAicTVCVQJCNF50JghHocahKK0X/ZnQKyEkhSdUpzG8OgQI42qC94EQjsYLRSmH+pbgq73L6bYkeEJ4DYTYmeg1TOBFc/usTTp3V9DdEuXJ2xDCUbXhaXk0/kAYmBvuMB4qkC35E5e5AMKkwSQgyxufyuPy6fMMgAFCSI73LFXU/N8AmEL9X4ABACNSKMHAgb34AAAAAElFTkSuQmCC","mediatype":"image/png"}],"installModes":[{"type":"OwnNamespace","supported":true},{"type":"SingleNamespace","supported":false},{"type":"MultiNamespace","supported":false},{"type":"AllNamespaces","supported":true}],"replaces":"etcdoperator.v0.9.2-clusterwide","labels":{"alm-owner-etcd":"etcdoperator","operated-by":"etcdoperator"},"selector":{"matchLabels":{"alm-owner-etcd":"etcdoperator","operated-by":"etcdoperator"}}},"status":{"lastUpdateTime":null,"lastTransitionTime":null,"certsLastUpdated":null,"certsRotateAt":null}}
        name: etcdoperator.v0.9.4-clusterwide
        sourceName: community-operators
        sourceNamespace: openshift-marketplace
        version: v1alpha1
      status: Present
    - resolving: etcdoperator.v0.9.4-clusterwide
      resource:
        group: apiextensions.k8s.io
        kind: CustomResourceDefinition
        manifest: >
          {"apiVersion":"apiextensions.k8s.io/v1beta1","kind":"CustomResourceDefinition","metadata":{"creationTimestamp":null,"name":"etcdbackups.etcd.database.coreos.com"},"spec":{"group":"etcd.database.coreos.com","names":{"kind":"EtcdBackup","listKind":"EtcdBackupList","plural":"etcdbackups","singular":"etcdbackup"},"scope":"Namespaced","version":"v1beta2"},"status":{"acceptedNames":{"kind":"","plural":""},"conditions":null,"storedVersions":null}}
        name: etcdbackups.etcd.database.coreos.com
        sourceName: community-operators
        sourceNamespace: openshift-marketplace
        version: v1beta1
      status: Present
    - resolving: etcdoperator.v0.9.4-clusterwide
      resource:
        group: apiextensions.k8s.io
        kind: CustomResourceDefinition
        manifest: >
          {"apiVersion":"apiextensions.k8s.io/v1beta1","kind":"CustomResourceDefinition","metadata":{"creationTimestamp":null,"name":"etcdclusters.etcd.database.coreos.com"},"spec":{"group":"etcd.database.coreos.com","names":{"kind":"EtcdCluster","listKind":"EtcdClusterList","plural":"etcdclusters","shortNames":["etcdclus","etcd"],"singular":"etcdcluster"},"scope":"Namespaced","version":"v1beta2"},"status":{"acceptedNames":{"kind":"","plural":""},"conditions":null,"storedVersions":null}}
        name: etcdclusters.etcd.database.coreos.com
        sourceName: community-operators
        sourceNamespace: openshift-marketplace
        version: v1beta1
      status: Present
    - resolving: etcdoperator.v0.9.4-clusterwide
      resource:
        group: apiextensions.k8s.io
        kind: CustomResourceDefinition
        manifest: >
          {"apiVersion":"apiextensions.k8s.io/v1beta1","kind":"CustomResourceDefinition","metadata":{"creationTimestamp":null,"name":"etcdrestores.etcd.database.coreos.com"},"spec":{"group":"etcd.database.coreos.com","names":{"kind":"EtcdRestore","listKind":"EtcdRestoreList","plural":"etcdrestores","singular":"etcdrestore"},"scope":"Namespaced","version":"v1beta2"},"status":{"acceptedNames":{"kind":"","plural":""},"conditions":null,"storedVersions":null}}
        name: etcdrestores.etcd.database.coreos.com
        sourceName: community-operators
        sourceNamespace: openshift-marketplace
        version: v1beta1
      status: Present
    - resolving: etcdoperator.v0.9.4-clusterwide
      resource:
        group: ''
        kind: ServiceAccount
        manifest: |
          {"metadata":{"name":"etcd-operator","creationTimestamp":null}}
        name: etcd-operator
        sourceName: community-operators
        sourceNamespace: openshift-marketplace
        version: v1
      status: Present
    - resolving: etcdoperator.v0.9.4-clusterwide
      resource:
        group: rbac.authorization.k8s.io
        kind: ClusterRole
        manifest: >
          {"metadata":{"name":"etcdoperator.v0.9.4-clusterwide-9xjpv","creationTimestamp":null,"labels":{"olm.owner":"etcdoperator.v0.9.4-clusterwide","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"rules":[{"verbs":["*"],"apiGroups":["etcd.database.coreos.com"],"resources":["etcdclusters","etcdbackups","etcdrestores"]},{"verbs":["*"],"apiGroups":[""],"resources":["pods","services","endpoints","persistentvolumeclaims","events"]},{"verbs":["*"],"apiGroups":["apps"],"resources":["deployments"]},{"verbs":["get"],"apiGroups":[""],"resources":["secrets"]}]}
        name: etcdoperator.v0.9.4-clusterwide-9xjpv
        sourceName: community-operators
        sourceNamespace: openshift-marketplace
        version: v1
      status: Present
    - resolving: etcdoperator.v0.9.4-clusterwide
      resource:
        group: rbac.authorization.k8s.io
        kind: ClusterRoleBinding
        manifest: >
          {"metadata":{"name":"etcdoperator.v0.9.4-clusterwide-9xjpv-etcd-operator-lps2x","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"etcdoperator.v0.9.4-clusterwide","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"subjects":[{"kind":"ServiceAccount","name":"etcd-operator","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"etcdoperator.v0.9.4-clusterwide-9xjpv"}}
        name: etcdoperator.v0.9.4-clusterwide-9xjpv-etcd-operator-lps2x
        sourceName: community-operators
        sourceNamespace: openshift-marketplace
        version: v1
      status: Present

Comment 3 Jian Zhang 2019-08-15 07:15:10 UTC
Hi, Evan

Yes, it has been fixed in 4.2. The users will get errors below when they try to install the same operator. LGTM.
"Installing Operator in selected namespace would cause conflicts with another Operator providing these APIs:
Hazelcast (hazelcast.com/v1alpha1)"
Screenshot is:
https://user-images.githubusercontent.com/15416633/63077464-0357c380-bf6b-11e9-894b-595212b3d15b.png

But, for 4.1.z, this issue still exists. Reproduce steps:

1, Install the hazelcast operator from Certified. And then install hazelcast operator from Community. Like below:
mac:~ jianzhang$ oc get sub hazelcast-enterprise-certified  -o yaml
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  creationTimestamp: "2019-08-15T06:38:47Z"
  generation: 1
  labels:
    csc-owner-name: installed-certified-openshift-operators
    csc-owner-namespace: openshift-marketplace
  name: hazelcast-enterprise-certified
  namespace: openshift-operators
  resourceVersion: "905135"
  selfLink: /apis/operators.coreos.com/v1alpha1/namespaces/openshift-operators/subscriptions/hazelcast-enterprise-certified
  uid: 55c62f2e-bf27-11e9-945d-06516607c3ce
spec:
  channel: alpha
  installPlanApproval: Automatic
  name: hazelcast-enterprise-certified
  source: installed-certified-openshift-operators
  sourceNamespace: openshift-operators
  startingCSV: hazelcast-operator.v0.1
status:
  currentCSV: hazelcast-operator.v0.1
  installPlanRef:
    apiVersion: operators.coreos.com/v1alpha1
    kind: InstallPlan
    name: install-dwxsl
    namespace: openshift-operators
    resourceVersion: "905093"
    uid: 661ad232-bf27-11e9-bfe1-0aaffb4070ce
  installedCSV: hazelcast-operator.v0.1
  installplan:
    apiVersion: operators.coreos.com/v1alpha1
    kind: InstallPlan
    name: install-dwxsl
    uuid: 661ad232-bf27-11e9-bfe1-0aaffb4070ce
  lastUpdated: "2019-08-15T06:39:16Z"
  state: AtLatestKnown

The subscription cannot be installed successfully.
mac:~ jianzhang$ oc get sub hazelcast-enterprise -o yaml
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  creationTimestamp: "2019-08-15T06:41:23Z"
  generation: 1
  labels:
    csc-owner-name: installed-community-openshift-operators
    csc-owner-namespace: openshift-marketplace
  name: hazelcast-enterprise
  namespace: openshift-operators
  resourceVersion: "906354"
  selfLink: /apis/operators.coreos.com/v1alpha1/namespaces/openshift-operators/subscriptions/hazelcast-enterprise
  uid: b2cc3b78-bf27-11e9-bfe1-0aaffb4070ce
spec:
  channel: alpha
  installPlanApproval: Automatic
  name: hazelcast-enterprise
  source: installed-community-openshift-operators
  sourceNamespace: openshift-operators
  startingCSV: hazelcast-operator.v0.0.1

And then, any operators cannot be installed in this "openshift-operator" namespace. Like below: etcd installed failed:
mac:~ jianzhang$ oc get sub etcd  -o yaml
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  creationTimestamp: "2019-08-15T07:10:37Z"
  generation: 1
  labels:
    csc-owner-name: installed-community-openshift-operators
    csc-owner-namespace: openshift-marketplace
  name: etcd
  namespace: openshift-operators
  resourceVersion: "917927"
  selfLink: /apis/operators.coreos.com/v1alpha1/namespaces/openshift-operators/subscriptions/etcd
  uid: c807b5ce-bf2b-11e9-b640-02c0f41c286a
spec:
  channel: clusterwide-alpha
  installPlanApproval: Automatic
  name: etcd
  source: installed-community-openshift-operators
  sourceNamespace: openshift-operators
  startingCSV: etcdoperator.v0.9.4-clusterwide

Cluster version is 4.1.11
OLM version:
               io.openshift.build.commit.url=https://github.com/operator-framework/operator-lifecycle-manager/commit/b45dae333aa3d6e4baa8fb8625eac5d7700c6525
               io.openshift.build.source-location=https://github.com/operator-framework/operator-lifecycle-manager

This issue should be addressed in 4.1.z too, reopen it.

Comment 7 Evan Cordell 2019-09-20 20:56:24 UTC
The specific issue here is that the Subscription does not indicate enough of the state that in manages in its status object. The underlying behavior didn't change in 4.2 (i.e. no "bug" was fixed), but we surface the issues better to the user so that they can make informed decisions.

Given that we had an entire epic around improving our status messages in 4.2, this is really a feature request and not a bugfix to backport. 

As an aside, we will continue to work with the teams shipping operators into 4.1 so that it is not possible to get into this state from operators that Red Hat ships (i.e. by having the same operator in two catalogs).