Skip to content

OSAC-1460: Wire dispatcher into controllers behind feature gate - #126

Merged
omer-vishlitzky merged 4 commits into
osac-project:mainfrom
SiddarthR56:OSAC-1460
Aug 12, 2026
Merged

OSAC-1460: Wire dispatcher into controllers behind feature gate#126
omer-vishlitzky merged 4 commits into
osac-project:mainfrom
SiddarthR56:OSAC-1460

Conversation

@SiddarthR56

@SiddarthR56 SiddarthR56 commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Summary by CodeRabbit

  • New Features

    • Network resources can now automatically select their implementation strategy through the configured network class and fabric manager.
    • Virtual networks, subnets, and security groups share network discovery configuration for consistent behavior.
    • Changes to dynamically resolved strategies can trigger reprovisioning when needed.
  • Bug Fixes

    • Resources fall back to configured or default strategies when dynamic resolution is unavailable.
    • Clear reconciliation errors are reported for ambiguous parent networks, failed discovery, or unregistered fabric managers.

@openshift-ci-robot

openshift-ci-robot commented Aug 4, 2026

Copy link
Copy Markdown

@SiddarthR56: This pull request references OSAC-1460 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 task to target the "5.0.0" version, but no target version was set.

Details

In response to this:

Assisted-by: Cursor/Claude

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 commented Aug 4, 2026

Copy link
Copy Markdown

Review Change Stack

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

Networking startup now creates one shared dispatcher resolver. VirtualNetwork, Subnet, and SecurityGroup reconcilers use NetworkClass-based strategy resolution with legacy fallbacks and explicit error handling. Tests cover resolution, fallback, ambiguity, and dynamic strategy changes.

Changes

Dispatcher strategy resolution

Layer / File(s) Summary
Strategy resolution core
osac-operator/internal/controller/dispatcher_helpers.go, osac-operator/internal/controller/constants_common.go, osac-operator/pkg/dispatcher/resolver_test.go
Shared logic resolves fabric managers through the dispatcher, applies legacy strategies when needed, and preserves structured errors.
Controller reconciliation integration
osac-operator/internal/controller/*_controller.go
VirtualNetwork, Subnet, and SecurityGroup accept an optional resolver and use NetworkClass context during reconciliation.
Resolver wiring and validation
osac-operator/cmd/main.go, osac-operator/internal/controller/*_controller_test.go
Startup creates and forwards one resolver. Tests cover resolved strategies, fallbacks, ambiguous parents, unregistered managers, and dynamic provisioning updates.

Estimated code review effort: 3 (Moderate) | ~30 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Startup
  participant Resolver
  participant NetworkController
  participant NetworkClass
  Startup->>Resolver: create shared resolver
  Startup->>NetworkController: pass resolver
  NetworkController->>NetworkClass: obtain NetworkClass context
  NetworkController->>Resolver: resolve implementation strategy
  Resolver-->>NetworkController: resolved strategy or fallback/error
Loading

Possibly related PRs

  • osac-project/osac#127: Both changes update networking initialization and dispatcher resolver integration.
  • osac-project/osac#146: Both changes modify dispatcher manager resolution and NetworkClass-based strategy handling.
  • osac-project/osac#158: Both changes use the dispatcher resolver for NetworkClass-based manager resolution.

Suggested reviewers: tzvatot, rccrdpccl, ori-amizur

🚥 Pre-merge checks | ✅ 10 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 66.67% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (10 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: wiring dispatcher support into controllers behind a feature gate.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
No-Hardcoded-Secrets ✅ Passed Changed additions contain resolver logic and test fixtures only; scans found no private keys, credential URLs, long base64/hex blobs, or hardcoded secret assignments.
No-Weak-Crypto ✅ Passed PR additions contain no MD5, SHA1, DES, RC4, Blowfish, ECB, weak-crypto imports, custom crypto, or secret/token comparisons; existing crypto/tls code is unchanged.
No-Injection-Vectors ✅ Passed Changed code adds dispatcher and Kubernetes client logic only; searches found no SQL concatenation, shell execution, eval/exec, pickle/yaml unsafe load, or dangerouslySetInnerHTML.
Container-Privileges ✅ Passed The PR changes only Go source and tests; no manifest files changed, and the added-line scan found no privileged, hostPID, hostNetwork, hostIPC, SYS_ADMIN, root, or allowPrivilegeEscalation settings.
No-Sensitive-Data-In-Logs ✅ Passed The only new production log emits a VirtualNetwork resource UUID; new dispatcher errors contain resource identifiers, not passwords, tokens, API keys, PII, session IDs, or hostnames.
Ai-Attribution ✅ Passed AI use is explicitly marked by the HEAD commit trailer Assisted-by: Cursor/Claude; no Co-Authored-By trailer appears on the PR commit.
✨ 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.

@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: 3

🤖 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 `@osac-operator/internal/controller/subnet_controller_test.go`:
- Around line 379-386: Replace ignored deferred cleanup in
subnet_controller_test.go at lines 379-386, 418-426, and 457-465 with a shared
DeferCleanup helper that asserts Update and Delete results. For temporary Subnet
resources, clear osacSubnetFinalizer before updating and deleting; use the
checked helper for temporary VirtualNetwork resources, ensuring no cleanup error
returns are ignored.

In `@osac-operator/internal/controller/subnet_controller.go`:
- Around line 195-202: Update the parent VirtualNetwork lookup before
resolveImplementationStrategy to require exactly one matching resource, not
merely a non-empty vnetList. Preserve the existing zero-match handling, and for
multiple matches stop dispatch by returning an explicit ambiguity error or
requeueing instead of selecting vnetList.Items[0].

In `@osac-operator/internal/controller/virtualnetwork_controller.go`:
- Around line 158-165: Update the VirtualNetwork desired-config version
calculation to hash the resolved implementationStrategy together with vnet.Spec,
rather than hashing only the spec; use the corresponding Subnet and
SecurityGroup hashing pattern. Add a regression test covering a strategy change
with unchanged spec that produces a new DesiredConfigVersion and allows
provisioning to proceed.
🪄 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: osac-project/coderabbit/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: a7e17f6e-0165-4a30-9d5f-d6a829ea2830

📥 Commits

Reviewing files that changed from the base of the PR and between 6b3599b and 0d94efd.

📒 Files selected for processing (12)
  • osac-operator/cmd/main.go
  • osac-operator/internal/controller/constants_common.go
  • osac-operator/internal/controller/dispatcher_helpers.go
  • osac-operator/internal/controller/dispatcher_resolver_helpers_test.go
  • osac-operator/internal/controller/securitygroup_controller.go
  • osac-operator/internal/controller/securitygroup_controller_test.go
  • osac-operator/internal/controller/subnet_controller.go
  • osac-operator/internal/controller/subnet_controller_test.go
  • osac-operator/internal/controller/virtualnetwork_controller.go
  • osac-operator/internal/controller/virtualnetwork_controller_test.go
  • osac-operator/pkg/dispatcher/resolver.go
  • osac-operator/pkg/dispatcher/resolver_test.go

Comment thread osac-operator/internal/controller/subnet_controller_test.go Outdated
Comment thread osac-operator/internal/controller/subnet_controller.go
Comment thread osac-operator/internal/controller/virtualnetwork_controller.go
@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@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)
osac-operator/internal/controller/subnet_controller_test.go (1)

500-503: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Assert the fabric-manager resolution error.

This test accepts any reconcile error. An error before dispatcher resolution would pass the test. Assert that err.Error() contains resolving fabricManager "does-not-exist".

Suggested assertion
 Expect(err).To(HaveOccurred())
+Expect(err.Error()).To(ContainSubstring(`resolving fabricManager "does-not-exist"`))
🤖 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 `@osac-operator/internal/controller/subnet_controller_test.go` around lines 500
- 503, Strengthen the assertion in the Reconcile test for the missing fabric
manager by verifying that err.Error() contains resolving fabricManager
"does-not-exist", while retaining the existing error-present check. This ensures
the failure comes from fabric-manager resolution rather than an unrelated
reconciliation error.
🤖 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 `@osac-operator/internal/controller/subnet_controller_test.go`:
- Around line 500-503: Strengthen the assertion in the Reconcile test for the
missing fabric manager by verifying that err.Error() contains resolving
fabricManager "does-not-exist", while retaining the existing error-present
check. This ensures the failure comes from fabric-manager resolution rather than
an unrelated reconciliation error.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: osac-project/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: b6babd14-7eaa-4c66-95fa-61262e265228

📥 Commits

Reviewing files that changed from the base of the PR and between 45b4742 and 8fe158a.

📒 Files selected for processing (12)
  • osac-operator/cmd/main.go
  • osac-operator/internal/controller/constants_common.go
  • osac-operator/internal/controller/dispatcher_helpers.go
  • osac-operator/internal/controller/dispatcher_resolver_helpers_test.go
  • osac-operator/internal/controller/securitygroup_controller.go
  • osac-operator/internal/controller/securitygroup_controller_test.go
  • osac-operator/internal/controller/subnet_controller.go
  • osac-operator/internal/controller/subnet_controller_test.go
  • osac-operator/internal/controller/virtualnetwork_controller.go
  • osac-operator/internal/controller/virtualnetwork_controller_test.go
  • osac-operator/pkg/dispatcher/resolver.go
  • osac-operator/pkg/dispatcher/resolver_test.go
🚧 Files skipped from review as they are similar to previous changes (10)
  • osac-operator/internal/controller/constants_common.go
  • osac-operator/cmd/main.go
  • osac-operator/pkg/dispatcher/resolver.go
  • osac-operator/pkg/dispatcher/resolver_test.go
  • osac-operator/internal/controller/subnet_controller.go
  • osac-operator/internal/controller/virtualnetwork_controller.go
  • osac-operator/internal/controller/securitygroup_controller.go
  • osac-operator/internal/controller/securitygroup_controller_test.go
  • osac-operator/internal/controller/virtualnetwork_controller_test.go
  • osac-operator/internal/controller/dispatcher_helpers.go

@SiddarthR56

Copy link
Copy Markdown
Contributor Author

/retest

@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown

Re-triggered failed runs:

  • E2E VMaaS Full Install (#30967870392)

@openshift-ci openshift-ci Bot added the lgtm label Aug 9, 2026
@openshift-ci

openshift-ci Bot commented Aug 9, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: danmanor, SiddarthR56

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

The pull request process is described 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

@danmanor danmanor added lgtm and removed lgtm labels Aug 9, 2026
@openshift-ci openshift-ci Bot removed the lgtm label Aug 10, 2026
@openshift-ci

openshift-ci Bot commented Aug 10, 2026

Copy link
Copy Markdown

New changes are detected. LGTM label has been removed.

@SiddarthR56

Copy link
Copy Markdown
Contributor Author

/retest

@github-actions

Copy link
Copy Markdown

Re-triggered failed runs:

  • label-gate (#31344305720)
  • E2E VMaaS Full Install (#31344304526)

@danmanor

Copy link
Copy Markdown
Contributor

/retest

@github-actions

Copy link
Copy Markdown

Re-triggered failed runs:

  • label-gate (#31355329349)

SiddarthR56 and others added 3 commits August 11, 2026 09:41
…anager

The dispatcher now eagerly resolves both fabricManager and k8sManager on
the default cudn-net NetworkClass, but neither was registered in the
operator's Helm defaults, causing VirtualNetwork/Subnet reconciliation to
fail with "fabric manager \"cudn_net\" not found" in E2E.

- values.yaml: enable networkManagers and register cudn_net as a fabric
  manager ConfigMap (ipv4/ipv6/dualStack, matching its argument_specs).
- cudn_net/meta/osac.yaml: remove the k8s_manager: cudn_localnet claim.
  cudn_net's Subnet role already creates a self-contained CUDN
  (isolated Layer2/Primary) with no separate physical fabric to bridge
  into, so this NetworkClass is fabric-only. A real cudn_localnet
  k8sManager (LocalNet bridging) is tracked separately under OSAC-1511.

Co-authored-by: Cursor <cursoragent@cursor.com>
…rk_policy

The dispatcher resolves SecurityGroup's implementation-strategy to the
cudn-net NetworkClass's fabric manager ("cudn_net"), so
playbook_osac_create_security_group.yml includes
osac.templates.cudn_net with tasks_from: create_security_group. That
task file never existed in cudn_net -- SecurityGroup enforcement
(NetworkPolicy) was extracted into the standalone network_policy role
in OSAC-1156 for reuse across K8s-based NetworkClasses, but cudn_net
was never given a forwarding entrypoint. This was previously masked
because VirtualNetwork/Subnet reconciliation failed earlier (see prior
commit), so the E2E test never reached the SecurityGroup step.

Add tasks/create_security_group.yaml and tasks/delete_security_group.yaml
to cudn_net that delegate to osac.templates.network_policy, plus
matching argument_specs and README documentation.

Co-authored-by: Cursor <cursoragent@cursor.com>
@openshift-ci

openshift-ci Bot commented Aug 11, 2026

Copy link
Copy Markdown

New changes are detected. LGTM label has been removed.

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 11, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 1:52 PM UTC · Completed 2:09 PM UTC

Commit: c47f3d6 · View workflow run →

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 11, 2026

Copy link
Copy Markdown

Review

Findings

Medium

  • [feature-gate-default-change] osac-operator/charts/operator/values.yaml:71 — The networkManagers.enabled default is changed from false to true, making it active for all deployments on upgrade. The new cudn_net fabric manager entry is also enabled: true, so upgrading creates a new ConfigMap and triggers NetworkClass capability reconciliation. While the downstream impact is limited (read-reconcile loop, no unsafe mutations), changing a Helm default warrants documentation since operators may not expect new ConfigMap resources to appear on chart upgrade.
    Remediation: Consider documenting in the PR description or release notes that this is an intentional default change, or keeping false as the default with environment-specific overrides.

  • [inconsistent-dispatcher-coverage] osac-operator/internal/controller/natgateway_controller.go:184 — The NATGateway controller still uses the legacy implementation-strategy path (vnet.Spec.ImplementationStrategy) without dispatcher resolution. The dispatch table includes NATGateway with K8sFallback: false, yet this PR wires the dispatcher into VirtualNetwork, Subnet, and SecurityGroup but not NATGateway. This may be intentional since NATGateway is only supported by physical fabric managers (e.g., netris), and cudn_net does not use NATGateway — but the omission should be documented.
    Remediation: If deferred to a follow-up, add a TODO comment in the NATGateway controller referencing the tracking issue.

  • [stale-doc] osac-aap/.claude/rules/networking-cudn.md:22 — The Key Files section describes create_security_group.yaml as "Translates SecurityGroup CR to NetworkPolicy". After this PR, that task file delegates to the osac.templates.network_policy role via ansible.builtin.include_role rather than performing translation directly. The description is stale.
    Remediation: Update to: "Delegates SecurityGroup enforcement to osac.templates.network_policy role".

Low

  • [naming-conventions] osac-operator/internal/controller/dispatcher_helpers.go:48 — The resolveImplementationStrategy function accepts kind as a freeform string. While the three call sites all pass correct string literals and the test suites would catch typos, defining string constants (e.g., const kindVirtualNetwork = "VirtualNetwork") would prevent potential spelling drift as more callers are added.

  • [error-handling-idiom] osac-operator/internal/controller/securitygroup_controller.go:166 — The SecurityGroup controller's VirtualNetwork lookup uses an if/else if/else chain combining the List error check with length checks, while the Subnet controller uses sequential if blocks. The difference reflects different semantics (SecurityGroup allows absent parent VNet; Subnet requeues), so this is not a bug, but the structural divergence is worth noting.

  • [stale-reference] osac-aap/collections/ansible_collections/osac/templates/roles/cudn_net/meta/osac.yaml:13 — The PR removes k8s_manager: cudn_localnet. Test fixtures in fulfillment-service/ and dispatcher tests still reference cudn_localnet, but these are intentional test-only references for the dispatcher's k8s-fallback behavior, not production configuration. The comment in osac.yaml references OSAC-1511 for the future k8s manager.

  • [scope-creep] osac-aap/collections/ansible_collections/osac/templates/roles/cudn_net/meta/osac.yaml:14 — Removing k8s_manager: cudn_localnet is directly related to the dispatcher wiring (having a non-existent k8s_manager would cause resolution errors), so it is in-scope despite going slightly beyond the title's "wire dispatcher" framing.

  • [dispatcher-allocation] osac-operator/internal/controller/dispatcher_helpers.go:55 — A new dispatcher.NewDispatcher(resolver) is created on every call. Since each controller calls this helper only once per reconcile, the per-reconcile cache provides no benefit. The cost is trivial (one map allocation).

  • [argument-specs-consistency] osac-aap/collections/ansible_collections/osac/templates/roles/cudn_net/meta/argument_specs.yaml:37 — The new SecurityGroup entrypoints lack a security_group_name parameter, unlike VirtualNetwork/Subnet entrypoints which include both a dict and a name parameter. This is intentional and consistent with the delegation target (network_policy role).

  • [test-pattern-consistency] osac-operator/internal/controller/securitygroup_controller_test.go:692 — SecurityGroup dispatcher tests use fakeClient while Subnet/VirtualNetwork tests use k8sClient (envtest). The PR correctly follows each file's pre-existing convention.

Previous run

Review

Findings

Medium

  • [logic-error] osac-operator/internal/controller/securitygroup_controller.go:179 — SecurityGroup controller silently falls back to legacy strategy when multiple parent VirtualNetworks match the UUID label (len(vnetList.Items) > 1), treating it identically to "not found" (len == 0). The Subnet controller (same PR) treats len > 1 as an error via fmt.Errorf. Two VirtualNetworks sharing a UUID label is an invariant violation indicating data corruption; silently falling back masks the problem and could provision the SecurityGroup against the wrong NetworkClass.
    Remediation: Add an ambiguity guard matching the Subnet controller pattern — error on len > 1.

  • [logic-error] osac-operator/internal/controller/virtualnetwork_controller.go:182 — The config version computation input changed from vnet.Spec (a VirtualNetworkSpec) to an anonymous struct{Spec VirtualNetworkSpec; ImplementationStrategy string}. The JSON serialization differs even when the strategy value is unchanged, causing every existing VirtualNetwork's DesiredConfigVersion hash to change on the first reconcile after upgrade — triggering re-provisioning of all VirtualNetworks regardless of whether their actual configuration changed. Subnet and SecurityGroup controllers already used the wrapper struct shape in the base branch, so they are not affected.
    Remediation: If re-provisioning all VirtualNetworks on upgrade is intentional (to align with Subnet/SecurityGroup and include the resolved strategy in the config version going forward), document it as an expected one-time migration effect. Otherwise, keep ComputeDesiredConfigVersion(vnet.Spec) and add the resolved strategy as a separate check.

  • [scope-mismatch] osac-operator/charts/operator/values.yaml:71 — PR title states "behind feature gate," but the Helm values change flips networkManagers.enabled from false to true, enabling ConfigMap creation for manager discovery by default. While the actual controller dispatcher path is still gated by runtime prerequisites (gRPC connection + networking namespace must both be configured), the infrastructure change enables the two-manager model for all deployments that meet those prerequisites.
    Remediation: Either revert the default to false or update the PR title/description to accurately describe that the two-manager model infrastructure is now enabled by default.

  • [scope-creep] osac-aap/collections/ansible_collections/osac/templates/roles/cudn_net/meta/osac.yaml:13 — Removing k8s_manager: cudn_localnet changes NetworkClass registration metadata for all deployments using cudn_net, beyond the stated scope of wiring the dispatcher into controllers. The comment cites OSAC-1511 for a future k8sManager. If the fulfillment-service enforces immutability of k8s_manager once set (NC-VAL-07), this removal could conflict with existing NetworkClass records.
    Remediation: Confirm that removing k8s_manager won't conflict with existing NetworkClass records. Consider splitting into the OSAC-1511 ticket it references.

Low

  • [pattern-inconsistency] osac-operator/internal/controller/virtualnetwork_controller.go:58 — The new Resolver field is exported while the analogous targetCluster in the same struct is unexported. The export is justified by test usage (SecurityGroup tests assign reconciler.Resolver directly), consistent with TiersClient/BackendsClient on other reconcilers, but diverges from the targetCluster convention.

  • [doc-style] osac-operator/internal/controller/dispatcher_helpers.go:33 — Doc comment has an orphaned line break mid-sentence: "Any / other resolution / error". Existing doc comments in this package use paragraph-based formatting without mid-sentence breaks.
    Remediation: Join the broken sentence.

  • [stale-doc] osac-aap/.claude/rules/networking-cudn.md:22 — Describes create_security_group.yaml as "Translates SecurityGroup CR to NetworkPolicy" but the PR creates this file with delegation behavior (delegates to osac.templates.network_policy role via include_role). The doc should also list the new delete_security_group.yaml.
    Remediation: Update the description to reflect delegation behavior and add delete_security_group.yaml.


Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR

fullsend-ai-review[bot]

This comment was marked as outdated.

…dling

- cmd/main.go: split an overly long resolver-construction line to satisfy
  the golangci-lint line-length (lll) check that was failing pre-commit CI.
- dispatcher_helpers.go: fix an orphaned mid-sentence line break in a doc
  comment (fullsend-ai-review nit).
- securitygroup_controller.go: SecurityGroup treated an ambiguous parent
  VirtualNetwork lookup (multiple resources sharing the same UUID label)
  the same as "not found", silently falling back to the legacy strategy.
  Error out instead, matching the Subnet controller's existing guard, since
  more than one match indicates label data corruption rather than an
  expected pre-migration state. Adds a regression test mirroring Subnet's.

Co-authored-by: Cursor <cursoragent@cursor.com>
Signed-off-by: Siddarth R <sroyapal@redhat.com>
@fullsend-ai-review

fullsend-ai-review Bot commented Aug 11, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 2:55 PM UTC · Completed 3:13 PM UTC

Commit: 4bb5842 · View workflow run →

@fullsend-ai-review fullsend-ai-review 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.

See the review comment for full details.

# osac.openshift.io/network-fabric-manager or osac.openshift.io/network-k8s-manager.
networkManagers:
enabled: false
enabled: true

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[medium] feature-gate-default-change

The networkManagers.enabled default is changed from false to true, making it active for all deployments on upgrade. The new cudn_net fabric manager entry is also enabled: true, so upgrading creates a new ConfigMap and triggers NetworkClass capability reconciliation. While the downstream impact is limited (read-reconcile loop, no unsafe mutations), changing a Helm default warrants documentation.

Suggested fix: Document in the PR description or release notes that this is an intentional default change, or keep false as the default with environment-specific overrides.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants