Repository: operator-framework/operator-lifecycle-manager
Pull request #1434 (2020-04-08 19:20:05)

feat: support configmap creation from the bundle
<!--

Before making a PR, please read our contributing guidelines https://github.com/operator-framework/operator-lifecycle-manager/blob/master/CONTRIBUTING.MD

Note: Make sure your branch is rebased to the latest upstream master.

-->

**Description of the change:**
Follow up on https://github.com/operator-framework/operator-registry/pull/256.

Now that configmap objects are supported in bundles as first-class citizens, OLM needs to be able to create config maps from the bundle and lifecycle them along with the CSV. This PR enables the catalog operator to work with configmap types. 

**Motivation for the change:**

**Reviewer Checklist**
- [ ] Implementation matches the proposed design, or proposal is updated to match implementation
- [ ] Sufficient unit test coverage 
- [ ] Sufficient end-to-end test coverage
- [ ] Docs updated or added to `/docs` 
- [ ] Commit messages sensible and descriptive


<!--

Note: If this PR is fixing an issue make sure to add a note saying:
Closes #<ISSUE_NUMBER>

-->


openshift-ci-robot: [APPROVALNOTIFIER] This PR is **NOT APPROVED**

This pull-request has been approved by: *<a href="https://github.com/operator-framework/operator-lifecycle-manager/pull/1434#" title="Author self-approved">exdx</a>*
To complete the [pull request process](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process), please assign **kevinrizza**
You can assign the PR to them by writing `/assign @kevinrizza` in a comment when ready.

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=operator-framework%2Foperator-lifecycle-manager).

<details open>
Needs approval from an approver in each of these files:

- **[OWNERS](https://github.com/operator-framework/operator-lifecycle-manager/blob/master/OWNERS)**

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":["kevinrizza"]} -->
openshift-ci-robot: @exdx: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/e2e-gcp | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-gcp/1135) | `/test e2e-gcp`

[Full PR test history](https://prow.svc.ci.openshift.org/pr-history?org=operator-framework&repo=operator-lifecycle-manager&pr=1434). [Your PR dashboard](https://prow.svc.ci.openshift.org/pr?query=is:pr+state:open+author:exdx). Please help us cut down on flakes by [linking to](https://github.com/kubernetes/community/blob/master/contributors/devel/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/operator-framework/operator-lifecycle-manager/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
openshift-ci-robot: [APPROVALNOTIFIER] This PR is **APPROVED**

This pull-request has been approved by: *<a href="https://github.com/operator-framework/operator-lifecycle-manager/pull/1434#pullrequestreview-390335614" title="Approved">ecordell</a>*, *<a href="https://github.com/operator-framework/operator-lifecycle-manager/pull/1434#" title="Author self-approved">exdx</a>*

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=operator-framework%2Foperator-lifecycle-manager).

The pull request process is described [here](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process)

<details >
Needs approval from an approver in each of these files:

- ~~[OWNERS](https://github.com/operator-framework/operator-lifecycle-manager/blob/master/OWNERS)~~ [ecordell]

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":[]} -->
openshift-ci-robot: @exdx: The following tests **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/e2e-gcp | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-gcp/1135) | `/test e2e-gcp`
ci/prow/e2e-aws-olm | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-aws-olm/4615) | `/test e2e-aws-olm`

[Full PR test history](https://prow.svc.ci.openshift.org/pr-history?org=operator-framework&repo=operator-lifecycle-manager&pr=1434). [Your PR dashboard](https://prow.svc.ci.openshift.org/pr?query=is:pr+state:open+author:exdx). Please help us cut down on flakes by [linking to](https://github.com/kubernetes/community/blob/master/contributors/devel/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/operator-framework/operator-lifecycle-manager/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
exdx: /retest
exdx: @ecordell would prefer to keep this PR configmap only and follow up with an additional PR for secret types
openshift-ci-robot: @exdx: The following tests **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/e2e-aws-olm | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-aws-olm/4615) | `/test e2e-aws-olm`
ci/prow/e2e-gcp | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-gcp/1147) | `/test e2e-gcp`

[Full PR test history](https://prow.svc.ci.openshift.org/pr-history?org=operator-framework&repo=operator-lifecycle-manager&pr=1434). [Your PR dashboard](https://prow.svc.ci.openshift.org/pr?query=is:pr+state:open+author:exdx). Please help us cut down on flakes by [linking to](https://github.com/kubernetes/community/blob/master/contributors/devel/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/operator-framework/operator-lifecycle-manager/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
openshift-ci-robot: @exdx: The following tests **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/e2e-gcp | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-gcp/1147) | `/test e2e-gcp`
ci/prow/e2e-aws-olm | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-aws-olm/4627) | `/test e2e-aws-olm`

[Full PR test history](https://prow.svc.ci.openshift.org/pr-history?org=operator-framework&repo=operator-lifecycle-manager&pr=1434). [Your PR dashboard](https://prow.svc.ci.openshift.org/pr?query=is:pr+state:open+author:exdx). Please help us cut down on flakes by [linking to](https://github.com/kubernetes/community/blob/master/contributors/devel/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/operator-framework/operator-lifecycle-manager/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
exdx: /retest
openshift-ci-robot: @exdx: The following tests **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/e2e-aws-olm | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-aws-olm/4627) | `/test e2e-aws-olm`
ci/prow/e2e-gcp | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-gcp/1150) | `/test e2e-gcp`

[Full PR test history](https://prow.svc.ci.openshift.org/pr-history?org=operator-framework&repo=operator-lifecycle-manager&pr=1434). [Your PR dashboard](https://prow.svc.ci.openshift.org/pr?query=is:pr+state:open+author:exdx). Please help us cut down on flakes by [linking to](https://github.com/kubernetes/community/blob/master/contributors/devel/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/operator-framework/operator-lifecycle-manager/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
openshift-ci-robot: @exdx: The following tests **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/e2e-gcp | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-gcp/1150) | `/test e2e-gcp`
ci/prow/e2e-aws-olm | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-aws-olm/4630) | `/test e2e-aws-olm`

[Full PR test history](https://prow.svc.ci.openshift.org/pr-history?org=operator-framework&repo=operator-lifecycle-manager&pr=1434). [Your PR dashboard](https://prow.svc.ci.openshift.org/pr?query=is:pr+state:open+author:exdx). Please help us cut down on flakes by [linking to](https://github.com/kubernetes/community/blob/master/contributors/devel/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/operator-framework/operator-lifecycle-manager/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
exdx: /retest
openshift-ci-robot: @exdx: The following tests **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/e2e-aws-olm | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-aws-olm/4630) | `/test e2e-aws-olm`
ci/prow/e2e-gcp | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-gcp/1153) | `/test e2e-gcp`

[Full PR test history](https://prow.svc.ci.openshift.org/pr-history?org=operator-framework&repo=operator-lifecycle-manager&pr=1434). [Your PR dashboard](https://prow.svc.ci.openshift.org/pr?query=is:pr+state:open+author:exdx). Please help us cut down on flakes by [linking to](https://github.com/kubernetes/community/blob/master/contributors/devel/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/operator-framework/operator-lifecycle-manager/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
njhale: /retest
openshift-ci-robot: @exdx: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/e2e-gcp | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-gcp/1163) | `/test e2e-gcp`

[Full PR test history](https://prow.svc.ci.openshift.org/pr-history?org=operator-framework&repo=operator-lifecycle-manager&pr=1434). [Your PR dashboard](https://prow.svc.ci.openshift.org/pr?query=is:pr+state:open+author:exdx). Please help us cut down on flakes by [linking to](https://github.com/kubernetes/community/blob/master/contributors/devel/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/operator-framework/operator-lifecycle-manager/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
njhale: /retest
exdx: @njhale thanks for the review. In the interest of CI time would you be ok LGTMing and I can update the text error fields ("service" -> "configmap") in my follow up PR for additional OLM types (secrets, PSP, etc)? As well as the patch strategy if we want to change that. 

Your other points regarding code duplication and the dynamic client make a lot of sense but I'm not sure I have the time to address those this week
njhale: Let's move forward with this as is -- we can follow up on some of these comments later.

/lgtm
openshift-ci-robot: @exdx: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/images | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-images/3384) | `/test images`

[Full PR test history](https://prow.svc.ci.openshift.org/pr-history?org=operator-framework&repo=operator-lifecycle-manager&pr=1434). [Your PR dashboard](https://prow.svc.ci.openshift.org/pr?query=is:pr+state:open+author:exdx). Please help us cut down on flakes by [linking to](https://github.com/kubernetes/community/blob/master/contributors/devel/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/operator-framework/operator-lifecycle-manager/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
openshift-bot: /retest

Please review the [full test history](https://openshift-gce-devel.appspot.com/pr/operator-framework_operator-lifecycle-manager/1434) for this PR and help us cut down flakes.
openshift-ci-robot: @exdx: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/images | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-images/3385) | `/test images`

[Full PR test history](https://prow.svc.ci.openshift.org/pr-history?org=operator-framework&repo=operator-lifecycle-manager&pr=1434). [Your PR dashboard](https://prow.svc.ci.openshift.org/pr?query=is:pr+state:open+author:exdx). Please help us cut down on flakes by [linking to](https://github.com/kubernetes/community/blob/master/contributors/devel/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/operator-framework/operator-lifecycle-manager/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
openshift-bot: /retest

Please review the [full test history](https://openshift-gce-devel.appspot.com/pr/operator-framework_operator-lifecycle-manager/1434) for this PR and help us cut down flakes.
openshift-ci-robot: @exdx: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/images | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-images/3386) | `/test images`

[Full PR test history](https://prow.svc.ci.openshift.org/pr-history?org=operator-framework&repo=operator-lifecycle-manager&pr=1434). [Your PR dashboard](https://prow.svc.ci.openshift.org/pr?query=is:pr+state:open+author:exdx). Please help us cut down on flakes by [linking to](https://github.com/kubernetes/community/blob/master/contributors/devel/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/operator-framework/operator-lifecycle-manager/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
openshift-bot: /retest

Please review the [full test history](https://openshift-gce-devel.appspot.com/pr/operator-framework_operator-lifecycle-manager/1434) for this PR and help us cut down flakes.
openshift-ci-robot: @exdx: The following tests **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/images | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-images/3386) | `/test images`
ci/prow/e2e-aws-olm | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-aws-olm/4800) | `/test e2e-aws-olm`

[Full PR test history](https://prow.svc.ci.openshift.org/pr-history?org=operator-framework&repo=operator-lifecycle-manager&pr=1434). [Your PR dashboard](https://prow.svc.ci.openshift.org/pr?query=is:pr+state:open+author:exdx). Please help us cut down on flakes by [linking to](https://github.com/kubernetes/community/blob/master/contributors/devel/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/operator-framework/operator-lifecycle-manager/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
exdx: /test e2e-aws-olm
openshift-bot: /retest

Please review the [full test history](https://openshift-gce-devel.appspot.com/pr/operator-framework_operator-lifecycle-manager/1434) for this PR and help us cut down flakes.
openshift-ci-robot: @exdx: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/e2e-aws-olm | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-aws-olm/4804) | `/test e2e-aws-olm`

[Full PR test history](https://prow.svc.ci.openshift.org/pr-history?org=operator-framework&repo=operator-lifecycle-manager&pr=1434). [Your PR dashboard](https://prow.svc.ci.openshift.org/pr?query=is:pr+state:open+author:exdx). Please help us cut down on flakes by [linking to](https://github.com/kubernetes/community/blob/master/contributors/devel/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/operator-framework/operator-lifecycle-manager/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
openshift-bot: /retest

Please review the [full test history](https://openshift-gce-devel.appspot.com/pr/operator-framework_operator-lifecycle-manager/1434) for this PR and help us cut down flakes.
openshift-ci-robot: @exdx: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/e2e-aws-olm | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-aws-olm/4816) | `/test e2e-aws-olm`

[Full PR test history](https://prow.svc.ci.openshift.org/pr-history?org=operator-framework&repo=operator-lifecycle-manager&pr=1434). [Your PR dashboard](https://prow.svc.ci.openshift.org/pr?query=is:pr+state:open+author:exdx). Please help us cut down on flakes by [linking to](https://github.com/kubernetes/community/blob/master/contributors/devel/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/operator-framework/operator-lifecycle-manager/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
openshift-bot: /retest

Please review the [full test history](https://openshift-gce-devel.appspot.com/pr/operator-framework_operator-lifecycle-manager/1434) for this PR and help us cut down flakes.
openshift-bot: /retest

Please review the [full test history](https://openshift-gce-devel.appspot.com/pr/operator-framework_operator-lifecycle-manager/1434) for this PR and help us cut down flakes.
openshift-ci-robot: @exdx: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/e2e-aws-olm | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-aws-olm/4829) | `/test e2e-aws-olm`

[Full PR test history](https://prow.svc.ci.openshift.org/pr-history?org=operator-framework&repo=operator-lifecycle-manager&pr=1434). [Your PR dashboard](https://prow.svc.ci.openshift.org/pr?query=is:pr+state:open+author:exdx). Please help us cut down on flakes by [linking to](https://github.com/kubernetes/community/blob/master/contributors/devel/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/operator-framework/operator-lifecycle-manager/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
openshift-bot: /retest

Please review the [full test history](https://openshift-gce-devel.appspot.com/pr/operator-framework_operator-lifecycle-manager/1434) for this PR and help us cut down flakes.
openshift-bot: /retest

Please review the [full test history](https://openshift-gce-devel.appspot.com/pr/operator-framework_operator-lifecycle-manager/1434) for this PR and help us cut down flakes.
openshift-ci-robot: @exdx: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/e2e-aws-olm | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-aws-olm/4838) | `/test e2e-aws-olm`

[Full PR test history](https://prow.svc.ci.openshift.org/pr-history?org=operator-framework&repo=operator-lifecycle-manager&pr=1434). [Your PR dashboard](https://prow.svc.ci.openshift.org/pr?query=is:pr+state:open+author:exdx). Please help us cut down on flakes by [linking to](https://github.com/kubernetes/community/blob/master/contributors/devel/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/operator-framework/operator-lifecycle-manager/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
openshift-bot: /retest

Please review the [full test history](https://openshift-gce-devel.appspot.com/pr/operator-framework_operator-lifecycle-manager/1434) for this PR and help us cut down flakes.
openshift-bot: /retest

Please review the [full test history](https://openshift-gce-devel.appspot.com/pr/operator-framework_operator-lifecycle-manager/1434) for this PR and help us cut down flakes.
openshift-ci-robot: @exdx: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/e2e-aws-olm | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-aws-olm/4844) | `/test e2e-aws-olm`

[Full PR test history](https://prow.svc.ci.openshift.org/pr-history?org=operator-framework&repo=operator-lifecycle-manager&pr=1434). [Your PR dashboard](https://prow.svc.ci.openshift.org/pr?query=is:pr+state:open+author:exdx). Please help us cut down on flakes by [linking to](https://github.com/kubernetes/community/blob/master/contributors/devel/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/operator-framework/operator-lifecycle-manager/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
openshift-bot: /retest

Please review the [full test history](https://openshift-gce-devel.appspot.com/pr/operator-framework_operator-lifecycle-manager/1434) for this PR and help us cut down flakes.
openshift-ci-robot: @exdx: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/e2e-aws-olm | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-aws-olm/4848) | `/test e2e-aws-olm`

[Full PR test history](https://prow.svc.ci.openshift.org/pr-history?org=operator-framework&repo=operator-lifecycle-manager&pr=1434). [Your PR dashboard](https://prow.svc.ci.openshift.org/pr?query=is:pr+state:open+author:exdx). Please help us cut down on flakes by [linking to](https://github.com/kubernetes/community/blob/master/contributors/devel/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/operator-framework/operator-lifecycle-manager/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
openshift-bot: /retest

Please review the [full test history](https://openshift-gce-devel.appspot.com/pr/operator-framework_operator-lifecycle-manager/1434) for this PR and help us cut down flakes.
openshift-ci-robot: @exdx: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/e2e-aws-olm | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-aws-olm/4851) | `/test e2e-aws-olm`

[Full PR test history](https://prow.svc.ci.openshift.org/pr-history?org=operator-framework&repo=operator-lifecycle-manager&pr=1434). [Your PR dashboard](https://prow.svc.ci.openshift.org/pr?query=is:pr+state:open+author:exdx). Please help us cut down on flakes by [linking to](https://github.com/kubernetes/community/blob/master/contributors/devel/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/operator-framework/operator-lifecycle-manager/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
openshift-bot: /retest

Please review the [full test history](https://openshift-gce-devel.appspot.com/pr/operator-framework_operator-lifecycle-manager/1434) for this PR and help us cut down flakes.
openshift-ci-robot: @exdx: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/e2e-aws-olm | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-aws-olm/4856) | `/test e2e-aws-olm`

[Full PR test history](https://prow.svc.ci.openshift.org/pr-history?org=operator-framework&repo=operator-lifecycle-manager&pr=1434). [Your PR dashboard](https://prow.svc.ci.openshift.org/pr?query=is:pr+state:open+author:exdx). Please help us cut down on flakes by [linking to](https://github.com/kubernetes/community/blob/master/contributors/devel/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/operator-framework/operator-lifecycle-manager/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
openshift-bot: /retest

Please review the [full test history](https://openshift-gce-devel.appspot.com/pr/operator-framework_operator-lifecycle-manager/1434) for this PR and help us cut down flakes.
openshift-ci-robot: @exdx: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/e2e-aws-olm | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-aws-olm/4857) | `/test e2e-aws-olm`

[Full PR test history](https://prow.svc.ci.openshift.org/pr-history?org=operator-framework&repo=operator-lifecycle-manager&pr=1434). [Your PR dashboard](https://prow.svc.ci.openshift.org/pr?query=is:pr+state:open+author:exdx). Please help us cut down on flakes by [linking to](https://github.com/kubernetes/community/blob/master/contributors/devel/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/operator-framework/operator-lifecycle-manager/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
openshift-bot: /retest

Please review the [full test history](https://openshift-gce-devel.appspot.com/pr/operator-framework_operator-lifecycle-manager/1434) for this PR and help us cut down flakes.
openshift-bot: /retest

Please review the [full test history](https://openshift-gce-devel.appspot.com/pr/operator-framework_operator-lifecycle-manager/1434) for this PR and help us cut down flakes.
openshift-ci-robot: @exdx: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/e2e-aws-olm | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-aws-olm/4861) | `/test e2e-aws-olm`

[Full PR test history](https://prow.svc.ci.openshift.org/pr-history?org=operator-framework&repo=operator-lifecycle-manager&pr=1434). [Your PR dashboard](https://prow.svc.ci.openshift.org/pr?query=is:pr+state:open+author:exdx). Please help us cut down on flakes by [linking to](https://github.com/kubernetes/community/blob/master/contributors/devel/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/operator-framework/operator-lifecycle-manager/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
openshift-bot: /retest

Please review the [full test history](https://openshift-gce-devel.appspot.com/pr/operator-framework_operator-lifecycle-manager/1434) for this PR and help us cut down flakes.
openshift-ci-robot: @exdx: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/e2e-aws-olm | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-aws-olm/4873) | `/test e2e-aws-olm`

[Full PR test history](https://prow.svc.ci.openshift.org/pr-history?org=operator-framework&repo=operator-lifecycle-manager&pr=1434). [Your PR dashboard](https://prow.svc.ci.openshift.org/pr?query=is:pr+state:open+author:exdx). Please help us cut down on flakes by [linking to](https://github.com/kubernetes/community/blob/master/contributors/devel/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/operator-framework/operator-lifecycle-manager/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
openshift-bot: /retest

Please review the [full test history](https://openshift-gce-devel.appspot.com/pr/operator-framework_operator-lifecycle-manager/1434) for this PR and help us cut down flakes.
openshift-bot: /retest

Please review the [full test history](https://openshift-gce-devel.appspot.com/pr/operator-framework_operator-lifecycle-manager/1434) for this PR and help us cut down flakes.
openshift-ci-robot: @exdx: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/e2e-aws-olm | 503887db4a86a4862ded41ec996f33b62f4eee58 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/operator-framework_operator-lifecycle-manager/1434/pull-ci-operator-framework-operator-lifecycle-manager-master-e2e-aws-olm/4884) | `/test e2e-aws-olm`

[Full PR test history](https://prow.svc.ci.openshift.org/pr-history?org=operator-framework&repo=operator-lifecycle-manager&pr=1434). [Your PR dashboard](https://prow.svc.ci.openshift.org/pr?query=is:pr+state:open+author:exdx). Please help us cut down on flakes by [linking to](https://github.com/kubernetes/community/blob/master/contributors/devel/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/operator-framework/operator-lifecycle-manager/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
openshift-bot: /retest

Please review the [full test history](https://openshift-gce-devel.appspot.com/pr/operator-framework_operator-lifecycle-manager/1434) for this PR and help us cut down flakes.
exdx: /retest

Patch:
diff --git a/pkg/controller/operators/catalog/operator.go b/pkg/controller/operators/catalog/operator.go
index 330977850..faccef798 100644
--- a/pkg/controller/operators/catalog/operator.go
+++ b/pkg/controller/operators/catalog/operator.go
@@ -61,6 +61,7 @@ const (
 	secretKind             = "Secret"
 	clusterRoleKind        = "ClusterRole"
 	clusterRoleBindingKind = "ClusterRoleBinding"
+	configMapKind          = "ConfigMap"
 	serviceAccountKind     = "ServiceAccount"
 	serviceKind            = "Service"
 	roleKind               = "Role"
@@ -1731,6 +1732,28 @@ func (o *Operator) ExecutePlan(plan *v1alpha1.InstallPlan) error {
 
 				plan.Status.Plan[i].Status = status
 
+			case configMapKind:
+				var cfg corev1.ConfigMap
+				err := json.Unmarshal([]byte(step.Resource.Manifest), &cfg)
+				if err != nil {
+					return errorwrap.Wrapf(err, "error parsing step manifest: %s", step.Resource.Name)
+				}
+
+				// Update UIDs on all CSV OwnerReferences
+				updated, err := o.getUpdatedOwnerReferences(cfg.OwnerReferences, plan.Namespace)
+				if err != nil {
+					return errorwrap.Wrapf(err, "error generating ownerrefs for configmap: %s", cfg.GetName())
+				}
+				cfg.SetOwnerReferences(updated)
+				cfg.SetNamespace(namespace)
+
+				status, err := ensurer.EnsureConfigMap(plan.Namespace, &cfg)
+				if err != nil {
+					return err
+				}
+
+				plan.Status.Plan[i].Status = status
+
 			default:
 				if !isSupported(step.Resource.Kind) {
 					// Not a supported resource
diff --git a/pkg/controller/operators/catalog/step_ensurer.go b/pkg/controller/operators/catalog/step_ensurer.go
index 1add2723d..0602fd6f5 100644
--- a/pkg/controller/operators/catalog/step_ensurer.go
+++ b/pkg/controller/operators/catalog/step_ensurer.go
@@ -300,3 +300,26 @@ func (o *StepEnsurer) EnsureUnstructuredObject(client dynamic.ResourceInterface,
 	status = v1alpha1.StepStatusPresent
 	return
 }
+
+// EnsureConfigMap writes the specified ConfigMap object to the cluster.
+func (o *StepEnsurer) EnsureConfigMap(namespace string, configmap *corev1.ConfigMap) (status v1alpha1.StepStatus, err error) {
+	_, createErr := o.kubeClient.KubernetesInterface().CoreV1().ConfigMaps(namespace).Create(configmap)
+	if createErr == nil {
+		status = v1alpha1.StepStatusCreated
+		return
+	}
+
+	if !k8serrors.IsAlreadyExists(createErr) {
+		err = errorwrap.Wrapf(createErr, "error updating configmap: %s", configmap.GetName())
+		return
+	}
+
+	configmap.SetNamespace(namespace)
+	if _, updateErr := o.kubeClient.UpdateConfigMap(configmap); updateErr != nil {
+		err = errorwrap.Wrapf(updateErr, "error updating configmap: %s", configmap.GetName())
+		return
+	}
+
+	status = v1alpha1.StepStatusPresent
+	return
+}
diff --git a/pkg/lib/operatorclient/client.go b/pkg/lib/operatorclient/client.go
index e6cc56c51..afdc2d797 100644
--- a/pkg/lib/operatorclient/client.go
+++ b/pkg/lib/operatorclient/client.go
@@ -31,6 +31,7 @@ type ClientInterface interface {
 	ClusterRoleBindingClient
 	ClusterRoleClient
 	DeploymentClient
+	ConfigMapClient
 }
 
 // CustomResourceClient contains methods for the Custom Resource.
@@ -127,6 +128,14 @@ type DeploymentClient interface {
 	ListDeploymentsWithLabels(namespace string, labels labels.Set) (*appsv1.DeploymentList, error)
 }
 
+// ConfigMapClient contains methods for the ConfigMap resource
+type ConfigMapClient interface {
+	CreateConfigMap(*v1.ConfigMap) (*v1.ConfigMap, error)
+	GetConfigMap(namespace, name string) (*v1.ConfigMap, error)
+	UpdateConfigMap(modified *v1.ConfigMap) (*v1.ConfigMap, error)
+	DeleteConfigMap(namespace, name string, options *metav1.DeleteOptions) error
+}
+
 // Interface assertion.
 var _ ClientInterface = &Client{}
 
diff --git a/pkg/lib/operatorclient/configmap.go b/pkg/lib/operatorclient/configmap.go
new file mode 100644
index 000000000..923e4e737
--- /dev/null
+++ b/pkg/lib/operatorclient/configmap.go
@@ -0,0 +1,39 @@
+package operatorclient
+
+import (
+	"fmt"
+
+	corev1 "k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"k8s.io/apimachinery/pkg/types"
+	"k8s.io/klog"
+)
+
+// CreateConfigMap creates the ConfigMap.
+func (c *Client) CreateConfigMap(ig *corev1.ConfigMap) (*corev1.ConfigMap, error) {
+	return c.CoreV1().ConfigMaps(ig.GetNamespace()).Create(ig)
+}
+
+// GetConfigMap returns the existing ConfigMap.
+func (c *Client) GetConfigMap(namespace, name string) (*corev1.ConfigMap, error) {
+	return c.CoreV1().ConfigMaps(namespace).Get(name, metav1.GetOptions{})
+}
+
+// DeleteConfigMap deletes the ConfigMap.
+func (c *Client) DeleteConfigMap(namespace, name string, options *metav1.DeleteOptions) error {
+	return c.CoreV1().ConfigMaps(namespace).Delete(name, options)
+}
+
+// UpdateConfigMap will update the given ConfigMap resource.
+func (c *Client) UpdateConfigMap(configmap *corev1.ConfigMap) (*corev1.ConfigMap, error) {
+	klog.V(4).Infof("[UPDATE ConfigMap]: %s", configmap.GetName())
+	oldSa, err := c.GetConfigMap(configmap.GetNamespace(), configmap.GetName())
+	if err != nil {
+		return nil, err
+	}
+	patchBytes, err := createPatch(oldSa, configmap)
+	if err != nil {
+		return nil, fmt.Errorf("error creating patch for ConfigMap: %v", err)
+	}
+	return c.CoreV1().ConfigMaps(configmap.GetNamespace()).Patch(configmap.GetName(), types.StrategicMergePatchType, patchBytes)
+}
diff --git a/pkg/lib/operatorclient/operatorclientmocks/mock_client.go b/pkg/lib/operatorclient/operatorclientmocks/mock_client.go
index 9144643a8..a1109fa3d 100644
--- a/pkg/lib/operatorclient/operatorclientmocks/mock_client.go
+++ b/pkg/lib/operatorclient/operatorclientmocks/mock_client.go
@@ -886,6 +886,65 @@ func (mr *MockClientInterfaceMockRecorder) ListDeploymentsWithLabels(namespace,
 	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListDeploymentsWithLabels", reflect.TypeOf((*MockClientInterface)(nil).ListDeploymentsWithLabels), namespace, labels)
 }
 
+// CreateConfigMap mocks base method
+func (m *MockClientInterface) CreateConfigMap(arg0 *v10.ConfigMap) (*v10.ConfigMap, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CreateConfigMap", arg0)
+	ret0, _ := ret[0].(*v10.ConfigMap)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// CreateConfigMap indicates an expected call of CreateConfigMap
+func (mr *MockClientInterfaceMockRecorder) CreateConfigMap(arg0 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateConfigMap", reflect.TypeOf((*MockClientInterface)(nil).CreateConfigMap), arg0)
+}
+
+// GetConfigMap mocks base method
+func (m *MockClientInterface) GetConfigMap(namespace, name string) (*v10.ConfigMap, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "GetConfigMap", namespace, name)
+	ret0, _ := ret[0].(*v10.ConfigMap)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// GetConfigMap indicates an expected call of GetConfigMap
+func (mr *MockClientInterfaceMockRecorder) GetConfigMap(namespace, name interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetConfigMap", reflect.TypeOf((*MockClientInterface)(nil).GetConfigMap), namespace, name)
+}
+
+// UpdateConfigMap mocks base method
+func (m *MockClientInterface) UpdateConfigMap(modified *v10.ConfigMap) (*v10.ConfigMap, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "UpdateConfigMap", modified)
+	ret0, _ := ret[0].(*v10.ConfigMap)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// UpdateConfigMap indicates an expected call of UpdateConfigMap
+func (mr *MockClientInterfaceMockRecorder) UpdateConfigMap(modified interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateConfigMap", reflect.TypeOf((*MockClientInterface)(nil).UpdateConfigMap), modified)
+}
+
+// DeleteConfigMap mocks base method
+func (m *MockClientInterface) DeleteConfigMap(namespace, name string, options *v12.DeleteOptions) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "DeleteConfigMap", namespace, name, options)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// DeleteConfigMap indicates an expected call of DeleteConfigMap
+func (mr *MockClientInterfaceMockRecorder) DeleteConfigMap(namespace, name, options interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteConfigMap", reflect.TypeOf((*MockClientInterface)(nil).DeleteConfigMap), namespace, name, options)
+}
+
 // MockCustomResourceClient is a mock of CustomResourceClient interface
 type MockCustomResourceClient struct {
 	ctrl     *gomock.Controller
@@ -1916,3 +1975,85 @@ func (mr *MockDeploymentClientMockRecorder) ListDeploymentsWithLabels(namespace,
 	mr.mock.ctrl.T.Helper()
 	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListDeploymentsWithLabels", reflect.TypeOf((*MockDeploymentClient)(nil).ListDeploymentsWithLabels), namespace, labels)
 }
+
+// MockConfigMapClient is a mock of ConfigMapClient interface
+type MockConfigMapClient struct {
+	ctrl     *gomock.Controller
+	recorder *MockConfigMapClientMockRecorder
+}
+
+// MockConfigMapClientMockRecorder is the mock recorder for MockConfigMapClient
+type MockConfigMapClientMockRecorder struct {
+	mock *MockConfigMapClient
+}
+
+// NewMockConfigMapClient creates a new mock instance
+func NewMockConfigMapClient(ctrl *gomock.Controller) *MockConfigMapClient {
+	mock := &MockConfigMapClient{ctrl: ctrl}
+	mock.recorder = &MockConfigMapClientMockRecorder{mock}
+	return mock
+}
+
+// EXPECT returns an object that allows the caller to indicate expected use
+func (m *MockConfigMapClient) EXPECT() *MockConfigMapClientMockRecorder {
+	return m.recorder
+}
+
+// CreateConfigMap mocks base method
+func (m *MockConfigMapClient) CreateConfigMap(arg0 *v10.ConfigMap) (*v10.ConfigMap, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CreateConfigMap", arg0)
+	ret0, _ := ret[0].(*v10.ConfigMap)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// CreateConfigMap indicates an expected call of CreateConfigMap
+func (mr *MockConfigMapClientMockRecorder) CreateConfigMap(arg0 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateConfigMap", reflect.TypeOf((*MockConfigMapClient)(nil).CreateConfigMap), arg0)
+}
+
+// GetConfigMap mocks base method
+func (m *MockConfigMapClient) GetConfigMap(namespace, name string) (*v10.ConfigMap, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "GetConfigMap", namespace, name)
+	ret0, _ := ret[0].(*v10.ConfigMap)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// GetConfigMap indicates an expected call of GetConfigMap
+func (mr *MockConfigMapClientMockRecorder) GetConfigMap(namespace, name interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetConfigMap", reflect.TypeOf((*MockConfigMapClient)(nil).GetConfigMap), namespace, name)
+}
+
+// UpdateConfigMap mocks base method
+func (m *MockConfigMapClient) UpdateConfigMap(modified *v10.ConfigMap) (*v10.ConfigMap, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "UpdateConfigMap", modified)
+	ret0, _ := ret[0].(*v10.ConfigMap)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// UpdateConfigMap indicates an expected call of UpdateConfigMap
+func (mr *MockConfigMapClientMockRecorder) UpdateConfigMap(modified interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateConfigMap", reflect.TypeOf((*MockConfigMapClient)(nil).UpdateConfigMap), modified)
+}
+
+// DeleteConfigMap mocks base method
+func (m *MockConfigMapClient) DeleteConfigMap(namespace, name string, options *v12.DeleteOptions) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "DeleteConfigMap", namespace, name, options)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// DeleteConfigMap indicates an expected call of DeleteConfigMap
+func (mr *MockConfigMapClientMockRecorder) DeleteConfigMap(namespace, name, options interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteConfigMap", reflect.TypeOf((*MockConfigMapClient)(nil).DeleteConfigMap), namespace, name, options)
+}


Test patch:
diff --git a/pkg/controller/operators/catalog/operator_test.go b/pkg/controller/operators/catalog/operator_test.go
index 4c9f22149..2a3598333 100644
--- a/pkg/controller/operators/catalog/operator_test.go
+++ b/pkg/controller/operators/catalog/operator_test.go
@@ -413,6 +413,27 @@ func TestExecutePlan(t *testing.T) {
 			want: []runtime.Object{serviceAccount("sa", namespace, "", objectReference("init secret"))},
 			err:  nil,
 		},
+		{
+			testName: "CreateConfigMap",
+			in: withSteps(installPlan("p", namespace, v1alpha1.InstallPlanPhaseInstalling, "csv"),
+				[]*v1alpha1.Step{
+					{
+						Resource: v1alpha1.StepResource{
+							CatalogSource:          "catalog",
+							CatalogSourceNamespace: namespace,
+							Group:                  "",
+							Version:                "v1",
+							Kind:                   "ConfigMap",
+							Name:                   "cfg",
+							Manifest: toManifest(t, configmap("cfg", namespace)),
+						},
+						Status: v1alpha1.StepStatusUnknown,
+					},
+				},
+			),
+			want: []runtime.Object{configmap("cfg", namespace)},
+			err:  nil,
+		},
 		{
 			testName: "UpdateServiceAccountWithSameFields",
 			in: withSteps(installPlan("p", namespace, v1alpha1.InstallPlanPhaseInstalling, "csv"),
@@ -557,6 +578,8 @@ func TestExecutePlan(t *testing.T) {
 					fetched, err = op.opClient.GetSecret(namespace, o.GetName())
 				case *corev1.Service:
 					fetched, err = op.opClient.GetService(namespace, o.GetName())
+				case *corev1.ConfigMap:
+					fetched, err = op.opClient.GetConfigMap(namespace, o.GetName())
 				case *v1beta1.CustomResourceDefinition:
 					fetched, err = op.opClient.ApiextensionsV1beta1Interface().ApiextensionsV1beta1().CustomResourceDefinitions().Get(o.GetName(), getOpts)
 				case *v1alpha1.ClusterServiceVersion:
@@ -1322,6 +1345,13 @@ func serviceAccount(name, namespace, generateName string, secretRef *corev1.Obje
 	}
 }
 
+func configmap(name, namespace string) *corev1.ConfigMap {
+	return &corev1.ConfigMap{
+		TypeMeta: metav1.TypeMeta{Kind: configMapKind},
+		ObjectMeta: metav1.ObjectMeta{Name: name, Namespace: namespace},
+	}
+}
+
 func objectReference(name string) *corev1.ObjectReference {
 	if name == "" {
 		return &corev1.ObjectReference{}
diff --git a/test/e2e/catalog_e2e_test.go b/test/e2e/catalog_e2e_test.go
index 04c380776..83dc1169a 100644
--- a/test/e2e/catalog_e2e_test.go
+++ b/test/e2e/catalog_e2e_test.go
@@ -774,8 +774,8 @@ var _ = Describe("Catalog", func() {
 		defer cleaner.NotifyTestComplete(GinkgoT(), true)
 
 		sourceName := genName("catalog-")
-		packageName := "busybox"
-		channelName := "alpha"
+		packageName := "etcd"
+		channelName := "clusterwide-alpha"
 
 		// Create gRPC CatalogSource using an external registry image and poll interval
 		var image string
@@ -912,7 +912,7 @@ var _ = Describe("Catalog", func() {
 		require.NoError(GinkgoT(), err, "error awaiting registry pod")
 
 		subChecker := func(sub *v1alpha1.Subscription) bool {
-			return sub.Status.InstalledCSV == "busybox.v2.0.0"
+			return sub.Status.InstalledCSV == "etcdoperator.v0.9.2-clusterwide"
 		}
 		// Wait for the Subscription to succeed
 		subscription, err = fetchSubscription(GinkgoT(), crc, testNamespace, subscriptionName, subChecker)
@@ -925,12 +925,17 @@ var _ = Describe("Catalog", func() {
 
 		// check version of running csv to ensure the latest version (0.9.2) was installed onto the cluster
 		v := csv.Spec.Version
-		busyboxVersion := semver.Version{
-			Major: 2,
-			Minor: 0,
-			Patch: 0,
+		etcdVersion := semver.Version{
+			Major: 0,
+			Minor: 9,
+			Patch: 2,
+			Pre: []semver.PRVersion{
+				{
+					VersionStr: "clusterwide",
+				},
+			},
 		}
-		if !reflect.DeepEqual(v, version.OperatorVersion{Version: busyboxVersion}) {
+		if !reflect.DeepEqual(v, version.OperatorVersion{Version: etcdVersion}) {
 			GinkgoT().Errorf("latest version of operator not installed: catalog souce update failed")
 		}
 	})