Skip to content

API-1835: intro dispatcher filters - #7552

Closed
p0lyn0mial wants to merge 5 commits into
openshift:mainfrom
p0lyn0mial:om-phase-2-in-res-dispatcher-filters
Closed

API-1835: intro dispatcher filters#7552
p0lyn0mial wants to merge 5 commits into
openshift:mainfrom
p0lyn0mial:om-phase-2-in-res-dispatcher-filters

Conversation

@p0lyn0mial

@p0lyn0mial p0lyn0mial commented Jan 20, 2026

Copy link
Copy Markdown
Contributor

requires #7477 and #7543

prepares matchers to filter cluster(s) resources based on inputResources

please reviewfeat(openshiftmanager-phase2): intro buildInputResourceFilters and feat(openshiftmanager-phase2): remove fakeRESTMapperFor

Adds an input resource initializer runnable for OpenShiftManager that discovers
input resources and wires informers, and registers it in the controller setup.

Notes: discovery is still a stub and we still need to register informer handlers and add filtering.
inputResourceDispatcher is a simple dispatcher that applies GVK scoped filters
and forwards matching events.

Each GVK has its own set of filters. Today these
may include name/namespace checks, and in the future label selectors.

Longer term, this dispatcher is expected to track which input resources are
associated with which operator.
@openshift-merge-robot openshift-merge-robot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jan 20, 2026
@openshift-merge-robot

Copy link
Copy Markdown
Contributor

PR needs rebase.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@coderabbitai

coderabbitai Bot commented Jan 20, 2026

Copy link
Copy Markdown
Contributor

Walkthrough

Adds an input resource dispatcher and initializer to discover, validate, filter, and dispatch input resource events by GVK; includes unit tests for both components, wires the initializer into the openshiftmanager controller setup, and updates module dependencies.

Changes

Cohort / File(s) Summary
Input Resource Dispatcher
control-plane-operator/controllers/openshiftmanager/input_resource_dispatcher.go
New unexported inputResourceDispatcher with newInputResourceDispatcher(filters map[schema.GroupVersionKind][]inputResourceEventFilter), Handle(gvk schema.GroupVersionKind, cObj client.Object) applying GVK-specific filters to emit event.GenericEvent, and ResultChan() <-chan event.GenericEvent.
Dispatcher Tests
control-plane-operator/controllers/openshiftmanager/input_resource_dispatcher_test.go
New tests covering filter match, non-match, no-filters, multiple-filters scenarios; includes helpers readEvents and ensureNoMoreEvents.
Input Resource Initializer
control-plane-operator/controllers/openshiftmanager/input_resource_initializer.go
New unexported inputResourceInitializer with constructor, discovery/validation logic (supports only ApplyConfigurationResources.exactResources), informer startup (startAndWaitForInformersFor), filter builder (buildInputResourceFilters), and exact-resource matching predicates; contains TODOs for remaining features.
Initializer Tests & Fakes
control-plane-operator/controllers/openshiftmanager/input_resource_initializer_test.go
New comprehensive tests: validation scenarios, startAndWaitForInformersFor behavior (deduplication, mapper/informer/cache errors), and buildInputResourceFilters; adds fakeCache and fakeRESTMapperForResources helpers.
Controller Integration
control-plane-operator/controllers/openshiftmanager/openshiftmanager_controller.go
Removes unused fmt import and replaces the previous not-implemented error in SetupWithManager with creation and mgr.Add(inputResInitializer) to register the initializer.
Module Dependencies
go.mod
Adds github.com/openshift/multi-operator-manager v0.0.0-20260112172834-b64ebc8c627b and indirect requires github.com/PaesslerAG/gval, github.com/PaesslerAG/jsonpath, github.com/shopspring/decimal.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

✨ Finishing touches
  • 📝 Generate docstrings

Comment @coderabbitai help to get the list of available commands and usage tips.

@openshift-ci
openshift-ci Bot requested review from csrwng and sjenning January 20, 2026 13:15
@p0lyn0mial p0lyn0mial changed the title Om phase 2 in res dispatcher filters API-1835: intro dispatcher filters Jan 20, 2026
@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Jan 20, 2026
@openshift-ci-robot

openshift-ci-robot commented Jan 20, 2026

Copy link
Copy Markdown

@p0lyn0mial: This pull request references API-1835 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the epic to target the "4.22.0" version, but no target version was set.

Details

In response to this:

What this PR does / why we need it:

Which issue(s) this PR fixes:

Fixes

Special notes for your reviewer:

Checklist:

  • Subject and description added to both, commit and PR.
  • Relevant issues have been referenced.
  • This change includes docs.
  • This change includes unit tests.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@openshift-ci openshift-ci Bot added area/control-plane-operator Indicates the PR includes changes for the control plane operator - in an OCP release and removed do-not-merge/needs-area labels Jan 20, 2026
@openshift-ci-robot

openshift-ci-robot commented Jan 20, 2026

Copy link
Copy Markdown

@p0lyn0mial: This pull request references API-1835 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the epic to target the "4.22.0" version, but no target version was set.

Details

In response to this:

requires #7477 and #7543

prepares matchers to filter cluster(s) resources based on inputResources

please reviewfeat(openshiftmanager-phase2): intro buildInputResourceFilters and feat(openshiftmanager-phase2): remove fakeRESTMapperFor

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@p0lyn0mial

Copy link
Copy Markdown
Contributor Author

/assign @benluddy @bertinatto @csrwng

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In
`@control-plane-operator/controllers/openshiftmanager/input_resource_dispatcher.go`:
- Around line 10-42: The dispatcher currently creates an unbuffered eventsCh
which makes inputResourceDispatcher.Handle block if no receiver is ready; update
newInputResourceDispatcher to create a buffered channel (eventsCh := make(chan
event.GenericEvent, <reasonableSize>)) so Handle can send without blocking
briefly (choose a small constant like 16 or make the buffer size configurable),
keep the rest of inputResourceDispatcher, Handle and filters logic unchanged,
and ensure any shutdown/consumer code can drain the channel if needed.

In
`@control-plane-operator/controllers/openshiftmanager/input_resource_initializer.go`:
- Around line 36-50: The Start method always fails because
discoverInputResources currently returns a "not implemented" error; replace the
stub so discovery is a safe no-op until real discovery is implemented: change
discoverInputResources to return an empty
map[string]*libraryinputresources.InputResources and nil (so inputResources is
empty) or alternatively early-return from Start when discovery is not ready, but
do not return an error. Update references to
inputResourceInitializer.discoverInputResources, Start,
checkSupportedInputResources, and startAndWaitForInformersFor to handle an empty
map appropriately so the operator can start successfully.

Comment on lines +10 to +42
type inputResourceEventFilter func(obj client.Object) bool

// inputResourceDispatcher is a simple dispatcher that applies GVK scoped filters
// and forwards matching events.
//
// Each GVK has its own set of filters. Today these
// may include name/namespace checks, and in the future label selectors.
//
// Longer term, this dispatcher is expected to track which input resources are
// associated with which operator.
type inputResourceDispatcher struct {
eventsCh chan event.GenericEvent
filters map[schema.GroupVersionKind][]inputResourceEventFilter
}

func newInputResourceDispatcher(filters map[schema.GroupVersionKind][]inputResourceEventFilter) *inputResourceDispatcher {
return &inputResourceDispatcher{
eventsCh: make(chan event.GenericEvent),
filters: filters,
}
}

func (d *inputResourceDispatcher) Handle(gvk schema.GroupVersionKind, cObj client.Object) {
filters := d.filters[gvk]
if len(filters) == 0 {
d.eventsCh <- event.GenericEvent{Object: cObj}
return
}

for _, filter := range filters {
if filter(cObj) {
d.eventsCh <- event.GenericEvent{Object: cObj}
return

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Avoid blocking producers on the dispatcher channel.

eventsCh is unbuffered, so Handle blocks until a receiver reads. If callers emit events while no consumer is ready, this can stall producers. Consider buffering (or other non-blocking dispatch) to prevent deadlocks.

🛠️ Possible fix (buffered channel)
 type inputResourceEventFilter func(obj client.Object) bool
 
+const defaultDispatchBuffer = 100
+
 // inputResourceDispatcher is a simple dispatcher that applies GVK scoped filters
 // and forwards matching events.
 //
@@
 func newInputResourceDispatcher(filters map[schema.GroupVersionKind][]inputResourceEventFilter) *inputResourceDispatcher {
 	return &inputResourceDispatcher{
-		eventsCh: make(chan event.GenericEvent),
+		eventsCh: make(chan event.GenericEvent, defaultDispatchBuffer),
 		filters:  filters,
 	}
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
type inputResourceEventFilter func(obj client.Object) bool
// inputResourceDispatcher is a simple dispatcher that applies GVK scoped filters
// and forwards matching events.
//
// Each GVK has its own set of filters. Today these
// may include name/namespace checks, and in the future label selectors.
//
// Longer term, this dispatcher is expected to track which input resources are
// associated with which operator.
type inputResourceDispatcher struct {
eventsCh chan event.GenericEvent
filters map[schema.GroupVersionKind][]inputResourceEventFilter
}
func newInputResourceDispatcher(filters map[schema.GroupVersionKind][]inputResourceEventFilter) *inputResourceDispatcher {
return &inputResourceDispatcher{
eventsCh: make(chan event.GenericEvent),
filters: filters,
}
}
func (d *inputResourceDispatcher) Handle(gvk schema.GroupVersionKind, cObj client.Object) {
filters := d.filters[gvk]
if len(filters) == 0 {
d.eventsCh <- event.GenericEvent{Object: cObj}
return
}
for _, filter := range filters {
if filter(cObj) {
d.eventsCh <- event.GenericEvent{Object: cObj}
return
type inputResourceEventFilter func(obj client.Object) bool
const defaultDispatchBuffer = 100
// inputResourceDispatcher is a simple dispatcher that applies GVK scoped filters
// and forwards matching events.
//
// Each GVK has its own set of filters. Today these
// may include name/namespace checks, and in the future label selectors.
//
// Longer term, this dispatcher is expected to track which input resources are
// associated with which operator.
type inputResourceDispatcher struct {
eventsCh chan event.GenericEvent
filters map[schema.GroupVersionKind][]inputResourceEventFilter
}
func newInputResourceDispatcher(filters map[schema.GroupVersionKind][]inputResourceEventFilter) *inputResourceDispatcher {
return &inputResourceDispatcher{
eventsCh: make(chan event.GenericEvent, defaultDispatchBuffer),
filters: filters,
}
}
func (d *inputResourceDispatcher) Handle(gvk schema.GroupVersionKind, cObj client.Object) {
filters := d.filters[gvk]
if len(filters) == 0 {
d.eventsCh <- event.GenericEvent{Object: cObj}
return
}
for _, filter := range filters {
if filter(cObj) {
d.eventsCh <- event.GenericEvent{Object: cObj}
return
🤖 Prompt for AI Agents
In
`@control-plane-operator/controllers/openshiftmanager/input_resource_dispatcher.go`
around lines 10 - 42, The dispatcher currently creates an unbuffered eventsCh
which makes inputResourceDispatcher.Handle block if no receiver is ready; update
newInputResourceDispatcher to create a buffered channel (eventsCh := make(chan
event.GenericEvent, <reasonableSize>)) so Handle can send without blocking
briefly (choose a small constant like 16 or make the buffer size configurable),
keep the rest of inputResourceDispatcher, Handle and filters logic unchanged,
and ensure any shutdown/consumer code can drain the channel if needed.

Comment on lines +36 to +50
func (r *inputResourceInitializer) Start(ctx context.Context) error {
inputResources, err := r.discoverInputResources()
if err != nil {
return err
}
if err = r.checkSupportedInputResources(inputResources); err != nil {
return err
}
// TODO: register filters for dispatcher based on inputRes
return r.startAndWaitForInformersFor(ctx, inputResources)
}

func (r *inputResourceInitializer) discoverInputResources() (map[string]*libraryinputresources.InputResources, error) {
return nil, fmt.Errorf("not implemented")
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Start always fails because discovery is stubbed.

discoverInputResources returns a "not implemented" error, so Start will always error and the manager will fail to start when this controller is enabled. Consider gating until discovery exists or making discovery a temporary no-op.

🛠️ Possible no-op stub to avoid startup failure
 func (r *inputResourceInitializer) discoverInputResources() (map[string]*libraryinputresources.InputResources, error) {
-	return nil, fmt.Errorf("not implemented")
+	// TODO: replace with real discovery; empty map keeps initializer a no-op for now.
+	return map[string]*libraryinputresources.InputResources{}, nil
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
func (r *inputResourceInitializer) Start(ctx context.Context) error {
inputResources, err := r.discoverInputResources()
if err != nil {
return err
}
if err = r.checkSupportedInputResources(inputResources); err != nil {
return err
}
// TODO: register filters for dispatcher based on inputRes
return r.startAndWaitForInformersFor(ctx, inputResources)
}
func (r *inputResourceInitializer) discoverInputResources() (map[string]*libraryinputresources.InputResources, error) {
return nil, fmt.Errorf("not implemented")
}
func (r *inputResourceInitializer) Start(ctx context.Context) error {
inputResources, err := r.discoverInputResources()
if err != nil {
return err
}
if err = r.checkSupportedInputResources(inputResources); err != nil {
return err
}
// TODO: register filters for dispatcher based on inputRes
return r.startAndWaitForInformersFor(ctx, inputResources)
}
func (r *inputResourceInitializer) discoverInputResources() (map[string]*libraryinputresources.InputResources, error) {
// TODO: replace with real discovery; empty map keeps initializer a no-op for now.
return map[string]*libraryinputresources.InputResources{}, nil
}
🤖 Prompt for AI Agents
In
`@control-plane-operator/controllers/openshiftmanager/input_resource_initializer.go`
around lines 36 - 50, The Start method always fails because
discoverInputResources currently returns a "not implemented" error; replace the
stub so discovery is a safe no-op until real discovery is implemented: change
discoverInputResources to return an empty
map[string]*libraryinputresources.InputResources and nil (so inputResources is
empty) or alternatively early-return from Start when discovery is not ready, but
do not return an error. Update references to
inputResourceInitializer.discoverInputResources, Start,
checkSupportedInputResources, and startAndWaitForInformersFor to handle an empty
map appropriately so the operator can start successfully.

prepares matchers to filter cluster(s) resources based on inputResources
refactors tests so that they use a common function for getting a RESTMapper
@p0lyn0mial
p0lyn0mial force-pushed the om-phase-2-in-res-dispatcher-filters branch from c8ccec4 to efc86c9 Compare January 20, 2026 15:13
@openshift-ci

openshift-ci Bot commented Jan 20, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: p0lyn0mial
Once this PR has been reviewed and has the lgtm label, please ask for approval from csrwng. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

}
if def.Name != "" && obj.GetName() != def.Name {
return false
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems like we can safely drop the checks for empty strings for both Name and Namespace.

@openshift-bot

Copy link
Copy Markdown

Stale PRs are closed after 21d of inactivity.

If this PR is still relevant, comment to refresh it or remove the stale label.
Mark the PR as fresh by commenting /remove-lifecycle stale.

If this PR is safe to close now please do so with /close.

/lifecycle stale

@openshift-ci openshift-ci Bot added the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Apr 17, 2026
@openshift-bot

Copy link
Copy Markdown

Stale PRs rot after 14d of inactivity.

Mark the PR as fresh by commenting /remove-lifecycle rotten.
Rotten PRs close after an additional 7d of inactivity.

If this PR is safe to close now please do so with /close.

/lifecycle rotten
/remove-lifecycle stale

@openshift-ci openshift-ci Bot removed the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label May 2, 2026
@openshift-ci openshift-ci Bot added the lifecycle/rotten Denotes an issue or PR that has aged beyond stale and will be auto-closed. label May 2, 2026
@openshift-ci

openshift-ci Bot commented May 11, 2026

Copy link
Copy Markdown
Contributor

@p0lyn0mial: The following tests failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/e2e-aks-4-21 efc86c9 link true /test e2e-aks-4-21
ci/prow/e2e-aks efc86c9 link true /test e2e-aks
ci/prow/e2e-aws efc86c9 link true /test e2e-aws
ci/prow/e2e-kubevirt-aws-ovn-reduced efc86c9 link true /test e2e-kubevirt-aws-ovn-reduced
ci/prow/images efc86c9 link true /test images
ci/prow/e2e-aws-upgrade-hypershift-operator efc86c9 link true /test e2e-aws-upgrade-hypershift-operator
ci/prow/verify efc86c9 link true /test verify
ci/prow/okd-scos-images efc86c9 link true /test okd-scos-images
ci/prow/e2e-azure-self-managed efc86c9 link true /test e2e-azure-self-managed
ci/prow/unit efc86c9 link true /test unit
ci/prow/verify-workflows efc86c9 link true /test verify-workflows
ci/prow/security efc86c9 link true /test security

Full PR test history. Your PR dashboard.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

@hypershift-jira-solve-ci

hypershift-jira-solve-ci Bot commented May 11, 2026

Copy link
Copy Markdown
Contributor

The conflict files match exactly. Here is the complete analysis:

Test Failure Analysis Complete

Job Information

  • Prow Job: pull-ci-openshift-hypershift-main-security
  • Build ID: 2053895510594424832
  • Target: security
  • PR: #7552API-1835: intro dispatcher filters
  • State: failure
  • Duration: 30 seconds (17:50:23Z – 17:50:53Z)

Test Failure Analysis

Error

CONFLICT (add/add): Merge conflict in control-plane-operator/controllers/openshiftmanager/input_resource_initializer.go
CONFLICT (add/add): Merge conflict in control-plane-operator/controllers/openshiftmanager/input_resource_initializer_test.go
CONFLICT (content): Merge conflict in go.mod
CONFLICT (content): Merge conflict in go.sum
CONFLICT (content): Merge conflict in vendor/modules.txt
Automatic merge failed; fix conflicts and then commit the result.

Summary

The job failed before any tests could run because Prow's clone step could not merge PR #7552 (sha efc86c95) onto the main branch (sha f16ca0d2). The branch has not been rebased since an earlier PR in the same series — [PR #7477 "API-1835: Scaffold dynamic informers"](#7477) — was merged to main on 2026-01-21. Both the PR branch and main contain different versions of the same files introduced by the same author (Lukasz Szaszkiewicz / p0lyn0mial), resulting in add/add and content merge conflicts across 5 files. GitHub confirms the PR's merge state is CONFLICTING / DIRTY.

Root Cause

PR #7552 is part of a multi-PR series for the API-1835 feature (openshiftmanager phase 2). An earlier PR in the series, #7477, was merged to main on 2026-01-21 and introduced the files input_resource_initializer.go and input_resource_initializer_test.go, along with dependency changes in go.mod, go.sum, and vendor/modules.txt.

PR #7552's branch still carries its own version of those same files from the development branch, without having been rebased onto the post-#7477 main. When Prow attempts git merge --no-ff of the PR head onto main, Git sees both sides adding the same files with different content, producing add/add conflicts on the source files and content conflicts on the dependency files.

Because the merge fails at the clone/checkout phase, no CI steps (build, test, security scan) are ever executed — the job exits immediately with status failure.

Recommendations
  1. Rebase PR API-1835: intro dispatcher filters #7552 onto current main: The PR author should run git fetch origin && git rebase origin/main on the om-phase-2-in-res-dispatcher-filters branch, resolve the 5 conflicting files, and force-push. Since the earlier PR API-1835: Scaffold dynamic informers #7477 was authored by the same person, the rebase should be straightforward — the input_resource_initializer.go content on main is the "correct" base, and the PR's changes layer on top.

  2. Re-trigger CI after rebase: Once the branch is rebased and GitHub shows the PR as mergeable (state changes from CONFLICTING to MERGEABLE), re-run /retest to trigger all presubmit jobs including security.

  3. Consider squashing overlapping commits: The PR branch commit f9233bb ("intro inputResourceInitializer") duplicates work already merged via PR API-1835: Scaffold dynamic informers #7477. During rebase, this commit can likely be dropped or squashed to keep the history clean.

Evidence
Evidence Detail
Failure phase Clone/merge step — no CI steps executed
Git merge command git merge --no-ff efc86c9553e0c6ceb2a4b70d866a0cfc3ee47823 → exit status 1
Conflicting files (add/add) input_resource_initializer.go, input_resource_initializer_test.go
Conflicting files (content) go.mod, go.sum, vendor/modules.txt
Earlier merged PR #7477 — "API-1835: Scaffold dynamic informers" (merged 2026-01-21)
Overlapping commit on main 8431125 — "feat(openshiftmanager-phase2): intro inputResourceInitializer" by Lukasz Szaszkiewicz
Overlapping commit in PR f9233bb — identical message, same author
GitHub merge state mergeStateStatus: DIRTY, mergeable: CONFLICTING
PR base SHA f16ca0d22941d58a170aaa4b1471b1456017c7c8 (main at test time)
PR head SHA efc86c9553e0c6ceb2a4b70d866a0cfc3ee47823

@openshift-ci

openshift-ci Bot commented May 19, 2026

Copy link
Copy Markdown
Contributor

Rotten PRs close after 7d of inactivity.

Reopen the PR by commenting /reopen.
Mark the PR as fresh by commenting /remove-lifecycle rotten.

/close

@openshift-ci openshift-ci Bot closed this May 19, 2026
@openshift-ci

openshift-ci Bot commented May 19, 2026

Copy link
Copy Markdown
Contributor

@openshift-ci[bot]: Closed this PR.

Details

In response to this:

Rotten PRs close after 7d of inactivity.

Reopen the PR by commenting /reopen.
Mark the PR as fresh by commenting /remove-lifecycle rotten.

/close

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/control-plane-operator Indicates the PR includes changes for the control plane operator - in an OCP release jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. lifecycle/rotten Denotes an issue or PR that has aged beyond stale and will be auto-closed. needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants