Skip to content

OCPEDGE-2747: feat: add topology transition controller for day-2 SNO to HA transitions - #495

Open
jeff-roche wants to merge 6 commits into
openshift:mainfrom
jeff-roche:mutable-topology-controller
Open

OCPEDGE-2747: feat: add topology transition controller for day-2 SNO to HA transitions#495
jeff-roche wants to merge 6 commits into
openshift:mainfrom
jeff-roche:mutable-topology-controller

Conversation

@jeff-roche

@jeff-roche jeff-roche commented Jun 26, 2026

Copy link
Copy Markdown

Summary

  • Vendors updated openshift/api (Infrastructure spec.controlPlaneTopology, MutableTopology feature gate) and openshift/client-go (operator clientset, informers, listers for Etcd CR access)
  • Adds a new TopologyTransitionController gated behind the MutableTopology feature gate that manages day-2 control plane topology transitions (initial: SNO → HA Compact on platform type None)
  • Wires the controller into RunOperator with dedicated informer factories for the Etcd operator CR and openshift-etcd ConfigMaps

Controller behavior

  1. Preflight validation — verifies control plane node count, readiness, schedulability, etcd quorum, voting members, and absence of dedicated workers before allowing a transition
  2. Condition management — sets TopologyTransitionControllerProgressing and TopologyTransitionControllerUpgradeable conditions to block cluster upgrades during transitions
  3. Status update — applies the topology change to Infrastructure status with conflict retry and spec-change detection
  4. Reconciliation monitoring — waits for all ClusterOperators to stabilize (Available=True, Progressing=False, Degraded=False) with a 5-minute soak timer before re-enabling upgrades
  5. Crash recovery — handles partial failures where operator conditions were set but the Infrastructure status update didn't complete

Test plan

  • Unit tests pass: go test -v -count=1 ./pkg/operator/topology_transition_controller/... (46 tests covering controller sync, preflight validators, reconciliation checks, soak timer, crash recovery, and spec-change-during-retry)
  • make build succeeds
  • make verify passes (gofmt, govet, deps, bindata)
  • E2E: deploy on a SNO cluster with MutableTopology feature gate enabled, scale to 3 control plane nodes, set spec.controlPlaneTopology: HighlyAvailable, verify transition completes and upgrades are re-enabled

Assisted-by: Claude noreply@anthropic.com

@openshift-ci openshift-ci Bot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jun 26, 2026
@coderabbitai

coderabbitai Bot commented Jun 26, 2026

Copy link
Copy Markdown

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

This PR updates dependencies, adds a feature-gated topology transition controller, implements SNO-to-HA transition validation and reconciliation, wires startup informers, and expands unit and scenario coverage.

Changes

Topology transition controller

Layer / File(s) Summary
Dependency updates and startup integration
go.mod, pkg/operator/starter.go
Dependencies are refreshed, and the topology transition controller is conditionally created and run when MutableTopology is enabled.
Transition contracts and preflight validation
pkg/operator/topology_transition_controller/types.go, pkg/operator/topology_transition_controller/transition_preflight_checks.go, pkg/operator/topology_transition_controller/transition_reconciliation.go
Transition descriptors, wildcard matching, validator aggregation, node and etcd checks, and cluster-operator stability checks are added.
Controller reconciliation flow
pkg/operator/topology_transition_controller/topology_transition_controller.go
The controller publishes valid transitions, handles unsupported and failed transitions, updates infrastructure status, enforces reconciliation soak timing, and completes transitions.
Fixtures and scenario coverage
pkg/operator/topology_transition_controller/test_helpers_test.go, pkg/operator/topology_transition_controller/transitions_test.go
Fake clients, listers, clocks, resources, and SNO-to-HA fixtures cover successful and failed transition paths.
Unit and integration-style tests
pkg/operator/topology_transition_controller/*_test.go
Tests cover matching, preflight validation, operator stability, condition updates, reconciliation behavior, retries, and transition outcomes.

Estimated code review effort: 4 (Complex) | ~60 minutes

🚥 Pre-merge checks | ✅ 2
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: adding a topology transition controller for day-2 SNO to HA transitions.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@openshift-ci
openshift-ci Bot requested review from JoelSpeed and p0lyn0mial June 26, 2026 12:32
@openshift-ci

openshift-ci Bot commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: jeff-roche
Once this PR has been reviewed and has the lgtm label, please assign deads2k for approval. 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

@jeff-roche jeff-roche changed the title feat: add topology transition controller for day-2 SNO to HA transitions [WIP] OCPEDGE-2747: feat: add topology transition controller for day-2 SNO to HA transitions Jun 26, 2026
@openshift-ci openshift-ci Bot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Jun 26, 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 Jun 26, 2026
@openshift-ci-robot

openshift-ci-robot commented Jun 26, 2026

Copy link
Copy Markdown

@jeff-roche: This pull request references OCPEDGE-2747 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 story to target the "5.0.0" version, but no target version was set.

Details

In response to this:

Summary

  • Vendors updated openshift/api (Infrastructure spec.controlPlaneTopology, MutableTopology feature gate) and openshift/client-go (operator clientset, informers, listers for Etcd CR access)
  • Adds a new TopologyTransitionController gated behind the MutableTopology feature gate that manages day-2 control plane topology transitions (initial: SNO → HA Compact on platform type None)
  • Wires the controller into RunOperator with dedicated informer factories for the Etcd operator CR and openshift-etcd ConfigMaps

Controller behavior

  1. Preflight validation — verifies control plane node count, readiness, schedulability, etcd quorum, voting members, and absence of dedicated workers before allowing a transition
  2. Condition management — sets TopologyTransitionControllerProgressing and TopologyTransitionControllerUpgradeable conditions to block cluster upgrades during transitions
  3. Status update — applies the topology change to Infrastructure status with conflict retry and spec-change detection
  4. Reconciliation monitoring — waits for all ClusterOperators to stabilize (Available=True, Progressing=False, Degraded=False) with a 5-minute soak timer before re-enabling upgrades
  5. Crash recovery — handles partial failures where operator conditions were set but the Infrastructure status update didn't complete

Test plan

  • Unit tests pass: go test -v -count=1 ./pkg/operator/topology_transition_controller/... (46 tests covering controller sync, preflight validators, reconciliation checks, soak timer, crash recovery, and spec-change-during-retry)
  • make build succeeds
  • make verify passes (gofmt, govet, deps, bindata)
  • E2E: deploy on a SNO cluster with MutableTopology feature gate enabled, scale to 3 control plane nodes, set spec.controlPlaneTopology: HighlyAvailable, verify transition completes and upgrades are re-enabled

Assisted-by: Claude noreply@anthropic.com

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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🧹 Nitpick comments (1)
pkg/operator/topology_transition_controller/transition_preflight_checks.go (1)

35-49: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Optional: extract the duplicated control-plane node listing.

The control-plane label selector + nodeLister.List + error-wrap block is repeated verbatim in validateControlPlaneNodeCount, validateControlPlaneNodesSchedulable, and validateControlPlaneNodesReady. A small listControlPlaneNodes(nodeLister) helper would remove the duplication and keep the selector key in one place.

Also applies to: 131-180

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pkg/operator/topology_transition_controller/transition_preflight_checks.go`
around lines 35 - 49, The control-plane node lookup logic is duplicated across
validateControlPlaneNodeCount, validateControlPlaneNodesSchedulable, and
validateControlPlaneNodesReady; extract the shared labels.SelectorFromSet plus
nodeLister.List and wrapped error handling into a small listControlPlaneNodes
helper. Update the three TransitionValidatorFunc implementations to call that
helper so the control-plane selector key and list/error behavior live in one
place.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@go.mod`:
- Around line 125-130: `go.mod` has been updated with new dependency versions,
but the corresponding `go.sum` entries are missing or not refreshed. Update the
dependency lock/checksum data in `go.sum` to match the changes in `go.mod`,
especially for `sigs.k8s.io/structured-merge-diff/v6` and the other
Kubernetes/OpenShift modules listed here. Make sure the module checksum file is
regenerated/committed together with the `go.mod` update so the dependency set
stays consistent and reproducible.

In `@pkg/operator/starter.go`:
- Around line 288-302: The topology transition controller is using the Nodes
informer from kubeInformersForNamespaces after that factory has already been
started, so the informer never runs and cache sync can stall. Update the
controller setup in starter.go around the topologyTransitionController
construction to ensure kubeInformersForNamespaces is started again after
registering the Nodes informer, alongside the existing operatorInformers and
kubeInformersForEtcd starts, so the late-bound informer is active before Run is
invoked.

In `@pkg/operator/topology_transition_controller/test_helpers_test.go`:
- Around line 243-245: The fixture helpers are ignoring failures from
cache.Indexer.Add, which can leave the lister/indexer state incomplete and hide
bad test objects. Update the helper paths that build indexers for infra-related
fixtures to handle the Add error explicitly, either by panicking immediately in
the helper or by passing testing.T into the helper and asserting no error. Make
sure the fix is applied consistently in the helper functions around the
Indexer.Add calls so malformed objects fail fast instead of silently continuing.

In
`@pkg/operator/topology_transition_controller/topology_transition_controller.go`:
- Line 122: The TopologyTransitionInProgress sentinel is duplicated as a string
literal in the reconciliation check and the status update path, so extract it
into a shared constant and use that constant in both places. Update the logic in
topology_transition_controller’s reconciliation flow that compares
upgCond.Reason, and the code that sets the reason value, to reference the same
named constant. This keeps the crash-recovery branch and the writer path coupled
through the symbol instead of raw string equality.

---

Nitpick comments:
In `@pkg/operator/topology_transition_controller/transition_preflight_checks.go`:
- Around line 35-49: The control-plane node lookup logic is duplicated across
validateControlPlaneNodeCount, validateControlPlaneNodesSchedulable, and
validateControlPlaneNodesReady; extract the shared labels.SelectorFromSet plus
nodeLister.List and wrapped error handling into a small listControlPlaneNodes
helper. Update the three TransitionValidatorFunc implementations to call that
helper so the control-plane selector key and list/error behavior live in one
place.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

Comment thread go.mod
Comment thread pkg/operator/starter.go
Comment thread pkg/operator/topology_transition_controller/test_helpers_test.go
Comment thread pkg/operator/topology_transition_controller/topology_transition_controller.go Outdated
@jeff-roche
jeff-roche force-pushed the mutable-topology-controller branch from e3af35b to 03133db Compare June 26, 2026 12:44
@openshift-ci openshift-ci Bot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jun 26, 2026
Adds a new controller gated behind the MutableTopology feature gate that
manages control plane topology transitions. The initial supported
transition is SNO to HA Compact on platform type None.

The controller validates preflight conditions (node count, readiness,
schedulability, etcd quorum and voting members), updates Infrastructure
status, blocks upgrades during transitions, and monitors downstream
operator reconciliation with a soak timer before re-enabling upgrades.

Includes vendor updates for openshift/api (Infrastructure
spec.controlPlaneTopology, MutableTopology feature gate) and
openshift/client-go (operator clientset, informers, listers for Etcd
CR access).

Assisted-by: Claude <noreply@anthropic.com>
@jeff-roche
jeff-roche force-pushed the mutable-topology-controller branch from 03133db to a804d91 Compare June 26, 2026 12:57
…nsitions

Extract a shared checkClusterOperatorsStable core used by both the
preflight validator (blocks transition when operators are unstable) and
the post-transition reconciliation check. The preflight runs as a global
check for all transitions, reporting per-operator details (name and
which conditions are wrong) so users know what to fix before retrying.

Assisted-by: Claude <noreply@anthropic.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@pkg/operator/topology_transition_controller/transition_preflight_checks.go`:
- Around line 46-48: The node validation logic only matches
`node-role.kubernetes.io/control-plane`, which causes legacy
`node-role.kubernetes.io/master` control-plane nodes to be missed and
miscounted. Update the selectors used in the preflight checks so they consider
both role labels consistently, including the schedulable/ready checks and the
worker-exclusion logic in `transition_preflight_checks.go`. Reuse or introduce a
small helper around the existing node selector construction so the same matching
behavior is applied wherever control-plane nodes are counted or excluded.
- Around line 179-200: The stability check in the shared cluster-operator
validation logic is too permissive because it only flags Progressing=True and
Degraded=True, so missing or Unknown values still pass. Update the condition
scan in the helper used by validateClusterOperatorsStable and
reconcileClusterOperatorsStable to explicitly require Progressing=False and
Degraded=False, and treat missing/Unknown statuses as issues alongside
Available. Add regression tests covering missing and Unknown
Progressing/Degraded conditions to lock in the contract.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 6fb30a46-336b-479f-913d-a154f8252255

📥 Commits

Reviewing files that changed from the base of the PR and between e3af35b and c9cf8b2.

⛔ Files ignored due to path filters (503)
  • go.sum is excluded by !**/*.sum
  • vendor/github.com/emicklei/go-restful/v3/.travis.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/emicklei/go-restful/v3/CHANGES.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/emicklei/go-restful/v3/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/emicklei/go-restful/v3/curly.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/emicklei/go-restful/v3/custom_verb.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/emicklei/go-restful/v3/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/.codecov.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/.golangci.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/.mockery.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/SECURITY.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/cmdutils/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/cmdutils/cmd_utils.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/cmdutils/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/cmdutils_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/conv/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/conv/convert.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/conv/convert_types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/conv/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/conv/format.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/conv/sizeof.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/conv/type_constraints.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/conv_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/convert.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/convert_types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/file.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/fileutils/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/fileutils/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/fileutils/file.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/fileutils/path.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/fileutils_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/go.work is excluded by !**/*.work, !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/go.work.sum is excluded by !**/*.sum, !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/initialism_index.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/json.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonname/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonname/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonname/name_provider.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonname_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/ifaces/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/ifaces/ifaces.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/ifaces/registry_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/registry.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/adapter.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/lexer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/ordered_map.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/pool.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/register.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/writer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/concat.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/json.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/ordered_map.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/loading/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/loading/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/loading/errors.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/loading/json.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/loading/loading.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/loading/options.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/loading/yaml.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/loading_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/BENCHMARK.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/initialism_index.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/name_lexem.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/name_mangler.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/options.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/pools.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/split.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/string_bytes.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/util.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/name_lexem.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/net.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/netutils/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/netutils/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/netutils/net.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/netutils_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/split.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/stringutils/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/stringutils/collection_formats.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/stringutils/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/stringutils/strings.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/stringutils_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/typeutils/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/typeutils/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/typeutils/types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/typeutils_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/util.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/yaml.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/yamlutils/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/yamlutils/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/yamlutils/errors.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/yamlutils/ordered_map.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/yamlutils/yaml.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/yamlutils_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/josharian/intern/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/josharian/intern/intern.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/josharian/intern/license.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mailru/easyjson/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mailru/easyjson/buffer/pool.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mailru/easyjson/jlexer/bytestostr.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mailru/easyjson/jlexer/bytestostr_nounsafe.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mailru/easyjson/jlexer/error.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mailru/easyjson/jlexer/lexer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mailru/easyjson/jwriter/writer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/.ci-operator.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/Dockerfile.ocp is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/Makefile is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/apiextensions/v1alpha1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/apiextensions/v1alpha1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/apiserver/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/apiserver/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/apps/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/apps/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/authorization/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/authorization/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/build/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/build/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/cloudnetwork/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/cloudnetwork/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/register.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/types_apiserver.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/types_authentication.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/types_cluster_operator.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/types_cluster_version.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/types_crio_credential_provider_config.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/types_image.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/types_infrastructure.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/types_kmsencryption.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/types_network.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/types_tlssecurityprofile.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1/zz_generated.featuregated-crd-manifests.yaml is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1alpha1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1alpha1/types_cluster_monitoring.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1alpha1/zz_generated.deepcopy.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1alpha1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1alpha1/zz_generated.swagger_doc_generated.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1alpha2/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1alpha2/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/console/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/console/v1/types_console_plugin.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/console/v1/zz_generated.featuregated-crd-manifests.yaml is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/console/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/etcd/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/etcd/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/etcd/v1alpha1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/etcd/v1alpha1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/features.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/features/features.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/helm/v1beta1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/helm/v1beta1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/image/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/image/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/imageregistry/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/imageregistry/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/install.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/kubecontrolplane/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/kubecontrolplane/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/legacyconfig/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/legacyconfig/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/machine/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/machine/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/machine/v1alpha1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/machine/v1alpha1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/machine/v1beta1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/machine/v1beta1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/monitoring/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/monitoring/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/network/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/network/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/network/v1alpha1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/network/v1alpha1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/networkoperator/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/networkoperator/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/oauth/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/oauth/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/openshiftcontrolplane/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/openshiftcontrolplane/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/operator/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/types_authentication.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/types_csi_cluster_driver.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/types_etcd.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/types_ingresscontroller.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/types_kmsencryption.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/types_kubeapiserver.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/types_openshiftapiserver.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.deepcopy.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/operator/v1/zz_generated.featuregated-crd-manifests.yaml is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/operator/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/operator/v1/zz_generated.swagger_doc_generated.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/operator/v1alpha1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/operatorcontrolplane/v1alpha1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operatorcontrolplane/v1alpha1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/osin/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/osin/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/project/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/project/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/quota/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/quota/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/route/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/route/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/samples/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/samples/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/security/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/security/v1/types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/security/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/securityinternal/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/securityinternal/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/servicecertsigner/v1alpha1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/servicecertsigner/v1alpha1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/sharedresource/v1alpha1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/sharedresource/v1alpha1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/template/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/template/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/user/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/user/v1/zz_generated.model_name.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/backupjobreference.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/clusterapi.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/clusterapiinstallercomponent.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/clusterapiinstallercomponentimage.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/clusterapiinstallercomponentsource.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/clusterapiinstallerrevision.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/clusterapiinstallerrevisionmanifestsubstitution.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/clusterapispec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/clusterapistatus.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/clusterversionoperator.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/clusterversionoperatorspec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/clusterversionoperatorstatus.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/etcdbackup.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/etcdbackupspec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/etcdbackupstatus.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/imagecontentsourcepolicy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/imagecontentsourcepolicyspec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/olm.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/olmspec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/olmstatus.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/repositorydigestmirrors.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/clientset.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/scheme/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/scheme/register.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/authentication.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/cloudcredential.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/clustercsidriver.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/config.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/console.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/csisnapshotcontroller.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/dns.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/etcd.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/generated_expansion.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/ingresscontroller.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/insightsoperator.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/kubeapiserver.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/kubecontrollermanager.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/kubescheduler.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/kubestorageversionmigrator.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/machineconfiguration.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/network.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/olm.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/openshiftapiserver.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/openshiftcontrollermanager.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/operator_client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/serviceca.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/servicecatalogapiserver.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/servicecatalogcontrollermanager.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1/storage.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1alpha1/clusterapi.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1alpha1/clusterversionoperator.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1alpha1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1alpha1/etcdbackup.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1alpha1/generated_expansion.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1alpha1/imagecontentsourcepolicy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1alpha1/olm.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1alpha1/operator_client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/factory.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/generic.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/internalinterfaces/factory_interfaces.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/interface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1/authentication.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1/cloudcredential.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1/clustercsidriver.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1/config.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1/console.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1/csisnapshotcontroller.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1/dns.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1/etcd.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1/ingresscontroller.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1/insightsoperator.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1/interface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1/kubeapiserver.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1/kubecontrollermanager.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1/kubescheduler.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1/kubestorageversionmigrator.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1/machineconfiguration.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1/network.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1/olm.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1/openshiftapiserver.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1/openshiftcontrollermanager.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1/serviceca.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1/servicecatalogapiserver.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1/servicecatalogcontrollermanager.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1/storage.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1alpha1/clusterapi.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1alpha1/clusterversionoperator.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1alpha1/etcdbackup.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1alpha1/imagecontentsourcepolicy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1alpha1/interface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/informers/externalversions/operator/v1alpha1/olm.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1/authentication.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1/cloudcredential.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1/clustercsidriver.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1/config.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1/console.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1/csisnapshotcontroller.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1/dns.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1/etcd.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1/expansion_generated.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1/ingresscontroller.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1/insightsoperator.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1/kubeapiserver.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1/kubecontrollermanager.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1/kubescheduler.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1/kubestorageversionmigrator.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1/machineconfiguration.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1/network.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1/olm.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1/openshiftapiserver.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1/openshiftcontrollermanager.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1/serviceca.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1/servicecatalogapiserver.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1/servicecatalogcontrollermanager.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1/storage.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1alpha1/clusterapi.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1alpha1/clusterversionoperator.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1alpha1/etcdbackup.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1alpha1/expansion_generated.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1alpha1/imagecontentsourcepolicy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/listers/operator/v1alpha1/olm.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/sirupsen/logrus/.golangci.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/sirupsen/logrus/CHANGELOG.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/sirupsen/logrus/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/sirupsen/logrus/appveyor.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/sirupsen/logrus/entry.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/sirupsen/logrus/hooks.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/sirupsen/logrus/logger.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/sirupsen/logrus/logrus.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/sirupsen/logrus/terminal_check_bsd.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/sirupsen/logrus/terminal_check_unix.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/sirupsen/logrus/terminal_check_wasi.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/sirupsen/logrus/terminal_check_wasip1.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/sirupsen/logrus/text_formatter.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/spf13/pflag/flag.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/html/node.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/html/nodetype_string.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/http2/client_priority_go126.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/http2/client_priority_go127.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/http2/frame.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/http2/http2.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/http2/server.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/http2/transport.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/http2/writesched_priority_rfc7540.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/http2/writesched_priority_rfc9218.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/internal/httpsfv/httpsfv.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/websocket/hybi.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_arm64.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_other_arm64.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_windows_arm64.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/ioctl_signed.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/ioctl_unsigned.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/syscall_solaris.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/syscall_unix.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/windows/syscall_windows.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/windows/types_windows.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/windows/zsyscall_windows.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/term/terminal.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/cases/tables10.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/cases/tables11.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/cases/tables12.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/cases/tables15.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/cases/tables17.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/cases/tables9.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/message/catalog/catalog.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/message/catalog/dict.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/message/catalog/go19.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/message/catalog/gopre19.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/secure/bidirule/bidirule.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/bidi/tables11.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/bidi/tables12.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/bidi/tables17.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/norm/forminfo.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/norm/tables10.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/norm/tables11.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/norm/tables12.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/norm/tables15.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/norm/tables17.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/norm/tables9.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/go/ast/inspector/cursor.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/go/ast/inspector/inspector.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/go/ast/inspector/iter.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/klog/v2/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/klog/v2/internal/serialize/keyvalues.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/klog/v2/internal/serialize/keyvalues_no_slog.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/klog/v2/internal/serialize/keyvalues_slog.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/klog/v2/klog.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/klog/v2/klogr.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/klog/v2/klogr_slog.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/klog/v2/textlogger/options.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/klog/v2/textlogger/textlogger.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/builder/openapi.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/builder3/openapi.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/serialization.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/alias.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_any.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_default.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_funcs.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_inlined.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_methods.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_time.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/decode.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/encode.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/errors.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/fields.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/fold.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/intern.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/internal/internal.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/internal/jsonflags/flags.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/internal/jsonopts/options.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/internal/jsonwire/decode.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/internal/jsonwire/encode.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/internal/jsonwire/wire.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/jsontext/alias.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/jsontext/decode.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/jsontext/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/jsontext/encode.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/jsontext/errors.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/jsontext/export.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/jsontext/options.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/jsontext/pools.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/jsontext/quote.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/jsontext/state.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/jsontext/token.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/jsontext/value.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/migrate.sh is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/options.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/value.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/schemaconv/openapi.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/schemaconv/proto_models.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/spec3/encoding.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/spec3/example.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/spec3/external_documentation.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/spec3/header.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/spec3/media_type.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/spec3/operation.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/spec3/parameter.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/spec3/path.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/spec3/request_body.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/spec3/response.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/spec3/security_scheme.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/spec3/server.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/spec3/spec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/validation/spec/header.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/validation/spec/info.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/validation/spec/items.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/validation/spec/operation.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/validation/spec/parameter.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/validation/spec/path_item.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/validation/spec/paths.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/validation/spec/ref.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/validation/spec/response.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/validation/spec/responses.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/validation/spec/schema.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/validation/spec/security_scheme.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/validation/spec/swagger.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/kube-openapi/pkg/validation/spec/tag.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/utils/buffer/ring_fixed.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/utils/clock/testing/fake_clock.go is excluded by !**/vendor/**, !vendor/**
  • vendor/modules.txt is excluded by !**/vendor/**, !vendor/**
  • vendor/sigs.k8s.io/structured-merge-diff/v6/schema/elements.go is excluded by !**/vendor/**, !vendor/**
  • vendor/sigs.k8s.io/structured-merge-diff/v6/typed/remove.go is excluded by !**/vendor/**, !vendor/**
  • vendor/sigs.k8s.io/structured-merge-diff/v6/value/reflectcache.go is excluded by !**/vendor/**, !vendor/**
📒 Files selected for processing (11)
  • go.mod
  • pkg/operator/starter.go
  • pkg/operator/topology_transition_controller/test_helpers_test.go
  • pkg/operator/topology_transition_controller/topology_transition_controller.go
  • pkg/operator/topology_transition_controller/topology_transition_controller_test.go
  • pkg/operator/topology_transition_controller/transition_preflight_checks.go
  • pkg/operator/topology_transition_controller/transition_preflight_checks_test.go
  • pkg/operator/topology_transition_controller/transition_reconciliation.go
  • pkg/operator/topology_transition_controller/transition_reconciliation_test.go
  • pkg/operator/topology_transition_controller/transitions_test.go
  • pkg/operator/topology_transition_controller/types.go
🚧 Files skipped from review as they are similar to previous changes (7)
  • pkg/operator/topology_transition_controller/topology_transition_controller_test.go
  • pkg/operator/topology_transition_controller/types.go
  • pkg/operator/starter.go
  • pkg/operator/topology_transition_controller/transitions_test.go
  • pkg/operator/topology_transition_controller/test_helpers_test.go
  • pkg/operator/topology_transition_controller/topology_transition_controller.go
  • go.mod

Comment thread pkg/operator/topology_transition_controller/transition_preflight_checks.go Outdated
…ator conditions

Control-plane node selectors now match both node-role.kubernetes.io/control-plane
and the legacy node-role.kubernetes.io/master label via a shared helper, preventing
miscounts on clusters with unrenamed nodes. The cluster operator stability check
now requires Progressing=False and Degraded=False explicitly, treating missing or
Unknown conditions as unstable rather than silently passing.

Assisted-by: Claude <noreply@anthropic.com>
@jeff-roche

Copy link
Copy Markdown
Author

Testing Update

Utilizing this PR and some automation scripts our team has, I was able to successfully transition an SNO platform:none cluster to HA Compact. The only real snafu was I had to manually scale ingress because ingress get's it's replica count at install time and does not update post-install.

cc @JoelSpeed

@JoelSpeed

Copy link
Copy Markdown
Contributor

The only real snafu was I had to manually scale ingress because ingress get's it's replica count at install time and does not update post-install.

Is that something you think we should try to change?

@jaypoulz

jaypoulz commented Jul 6, 2026

Copy link
Copy Markdown

@JoelSpeed i raised this to the ingress team earlier this year and was told that's a bug. IIRC, it happens because the ingress hard-codes the number of replicas in the ingress-controller spec when it's first created. The easy workaround is to delete the the ingress controller definition. The better solution is to have ingress reconcile changes to topology. I don't think logic for handling that belongs in CCO.

Comment thread go.mod Outdated
Comment thread pkg/operator/topology_transition_controller/types.go
Comment thread pkg/operator/topology_transition_controller/topology_transition_controller.go Outdated
Comment thread pkg/operator/topology_transition_controller/topology_transition_controller.go Outdated
Comment thread pkg/operator/topology_transition_controller/topology_transition_controller.go Outdated
Comment thread pkg/operator/topology_transition_controller/topology_transition_controller.go Outdated
@jaypoulz

jaypoulz commented Jul 7, 2026

Copy link
Copy Markdown

@jeff-roche I have more specifics about ingress:
The issue is that the number of replicas is hard coded in the ingresscontroller:

[ec2-user@aws-jpoulin-dev ~]$ oc get ingresscontroller/default -n openshift-ingress-operator -o yaml
apiVersion: operator.openshift.io/v1
kind: IngressController
metadata:
  creationTimestamp: "2026-07-07T16:10:50Z"
  finalizers:
  - ingresscontroller.operator.openshift.io/finalizer-ingresscontroller
  generation: 1
  name: default
  namespace: openshift-ingress-operator
  resourceVersion: "53360"
  uid: f860ce4b-0e44-4878-ba92-f7e72d132094
spec:
  clientTLS:
    clientCA:
      name: ""
    clientCertificatePolicy: ""
  closedClientConnectionPolicy: Continue
  httpCompression: {}
  httpEmptyRequestsPolicy: Respond
  httpErrorCodePages:
    name: ""
  idleConnectionTerminationPolicy: Immediate
  replicas: 1
  tuningOptions:
    reloadInterval: 0s
  unsupportedConfigOverrides: null

We need to patch ingress operator to either detect drift or not hard code this.

@jeff-roche jeff-roche changed the title [WIP] OCPEDGE-2747: feat: add topology transition controller for day-2 SNO to HA transitions OCPEDGE-2747: feat: add topology transition controller for day-2 SNO to HA transitions Jul 8, 2026
@openshift-ci openshift-ci Bot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Jul 8, 2026
The if/else-to-switch refactor introduced three bugs: an || that should
have been && caused the transition-requested branch to be taken even
when spec already matched status, an unguarded FindOperatorCondition
call could nil-panic on the safety-net path, and the GetOperatorState
error was no longer checked. Also renames transitionCondition to
transitionProgressingCondition for clarity.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
pkg/operator/topology_transition_controller/transitions_test.go (1)

128-149: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider asserting cond.Status consistently across preflight failure subtests.

Five preflight failure subtests (lines 128, 151, 174, 197, 220) assert cond.Reason and cond.Message but skip assert.Equal(t, operatorv1.ConditionFalse, cond.Status), while the subtests at lines 60, 80, 243, and 272 do include it. Adding the Status assertion in all preflight failure cases would make the test suite more uniform and catch regressions where the condition is set to an unexpected status.

Also applies to: 151-172, 174-195, 197-218, 220-241

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pkg/operator/topology_transition_controller/transitions_test.go` around lines
128 - 149, Add a consistent assertion for transitionProgressingCondition.Status
in all preflight failure subtests in transitions_test.go, including the control
plane node unschedulable case and the other similar cases, so they explicitly
verify operatorv1.ConditionFalse alongside Reason and Message. Update the
relevant t.Run blocks in the test fixture around ctrl.sync and
v1helpers.FindOperatorCondition to match the preflight failure assertions
already used in the other subtests.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@pkg/operator/topology_transition_controller/transitions_test.go`:
- Around line 128-149: Add a consistent assertion for
transitionProgressingCondition.Status in all preflight failure subtests in
transitions_test.go, including the control plane node unschedulable case and the
other similar cases, so they explicitly verify operatorv1.ConditionFalse
alongside Reason and Message. Update the relevant t.Run blocks in the test
fixture around ctrl.sync and v1helpers.FindOperatorCondition to match the
preflight failure assertions already used in the other subtests.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 6e0ed18f-cc7c-4313-a85f-2d7df320ecc8

📥 Commits

Reviewing files that changed from the base of the PR and between ee97a0d and ec4336d.

📒 Files selected for processing (5)
  • go.mod
  • pkg/operator/topology_transition_controller/test_helpers_test.go
  • pkg/operator/topology_transition_controller/topology_transition_controller.go
  • pkg/operator/topology_transition_controller/topology_transition_controller_test.go
  • pkg/operator/topology_transition_controller/transitions_test.go
🚧 Files skipped from review as they are similar to previous changes (3)
  • pkg/operator/topology_transition_controller/topology_transition_controller.go
  • pkg/operator/topology_transition_controller/test_helpers_test.go
  • pkg/operator/topology_transition_controller/topology_transition_controller_test.go

@jeff-roche
jeff-roche force-pushed the mutable-topology-controller branch from b7573a6 to ec4336d Compare July 13, 2026 12:26
Comment thread pkg/operator/topology_transition_controller/types.go Outdated
@jeff-roche

Copy link
Copy Markdown
Author

/retest

@jeff-roche
jeff-roche force-pushed the mutable-topology-controller branch from 953e266 to 72f8e98 Compare July 21, 2026 22:52
Fill in the post-transition TransitionValidators for the SNO-to-HA
transition (MachineConfig/MachineConfigPool state, IngressController
router replicas, KubeAPIServer/OpenShiftAPIServer rollout, and worker
node readiness), and wire them into checkClusterReconciliation the
same way preflight validators run. Replace the blanket
reconcileClusterOperatorsStable check with these fine-grained
per-transition checks now that they cover the relevant operators
directly.

Wire the new TransitionValidationListers (KubeAPIServer,
OpenShiftAPIServer, IngressController, MachineConfig,
MachineConfigPool) through NewController and starter.go using the
standard generated clientset/informers, matching every other resource
already wired in this operator.

Bump openshift/api and openshift/client-go to a June 2026 pairing
(rather than the latest) to pick up a machineconfiguration API rename
(LayerStorePath) that the generated machineconfiguration
clientset/informers require to compile, while staying before the
later commit that bumped k8s.io/client-go to v0.36.2 -- which would
have forced go.mod's `go` directive to 1.26, newer than the Go
toolchain available in OpenShift CI. k8s.io/client-go and
openshift/library-go are left untouched.

Assisted-by: Claude <noreply@anthropic.com>
@jeff-roche
jeff-roche force-pushed the mutable-topology-controller branch from 72f8e98 to 3c62e47 Compare July 21, 2026 23:15
@jeff-roche

Copy link
Copy Markdown
Author

/retest

…n is withdrawn

When a transition is rejected (unsupported topology or failed preflight),
both transitionProgressingCondition and upgradeableCondition are set False
with a matching reason. Reverting spec to match status previously only
reset upgradeableCondition, leaving transitionProgressingCondition stuck
on the stale rejection reason indefinitely.

Assisted-by: Claude <noreply@anthropic.com>
@openshift-ci

openshift-ci Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

@jeff-roche: all tests passed!

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.

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

Labels

jira/valid-reference Indicates that this PR references a valid Jira ticket of any type.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants