Skip to content

EDM-4064: Deploy OS/apps cannot target fleets with an owner (ResourceSync) - #775

Merged
celdrake merged 1 commit into
flightctl:mainfrom
celdrake:bugfix/EDM-4064-fleet-select-tooltip
Aug 27, 2026
Merged

EDM-4064: Deploy OS/apps cannot target fleets with an owner (ResourceSync)#775
celdrake merged 1 commit into
flightctl:mainfrom
celdrake:bugfix/EDM-4064-fleet-select-tooltip

Conversation

@celdrake

@celdrake celdrake commented Aug 25, 2026

Copy link
Copy Markdown
Collaborator

Given that fleets owned by a RS are not eligible for deploying from catalog, we filter them out and add an explanation text.

If no fleets exist at all, or all that exist are owned by Resource Syncs:
disabled-reason

Showing that only fleets without an owner are displayed - all are selectable.
non-selectable

Summary

  • Updated shared components in libs/ui-components/ to request only unmanaged fleets for catalog deployments.
  • Added the onlyUnmanaged filter to FleetsEndpointArgs.
  • Preserved fleet name filtering through combined API field selectors.
  • Updated fleet-count handling and user-facing text to explain catalog-deployment eligibility and resource-sync exclusions.
  • Removed client-side disabling based on fleet owner metadata because the API now excludes remote-source fleets.
  • This shared UI change affects catalog deployment flows in both the standalone application and the OCP plugin.
  • No changes affect libs/types/, libs/i18n/, libs/cypress/, the Go auth proxy, container builds, E2E tests, or CI configuration.
  • Security impact: remote-source fleets are excluded from selection at the API request level, which reduces the risk of deploying catalogs to ineligible targets.

@coderabbitai

coderabbitai Bot commented Aug 25, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: c2ea1b12-a1b8-4511-a2ab-a8eca1e6d189

📥 Commits

Reviewing files that changed from the base of the PR and between 5a36446 and cfa7c97.

⛔ Files ignored due to path filters (1)
  • libs/i18n/locales/en/translation.json is excluded by !libs/i18n/locales/en/translation.json
📒 Files selected for processing (3)
  • libs/ui-components/src/components/Catalog/InstallWizard/steps/SelectTargetStep.tsx
  • libs/ui-components/src/components/Catalog/InstallWizard/steps/SpecificationsStep.tsx
  • libs/ui-components/src/components/Fleet/useFleets.ts

Included review availability: Your plan provides up to 12 included reviews per hour; 11 remain after this review.


Walkthrough

The fleet API now supports unmanaged-fleet filtering. Catalog installation steps use this filter, rely on the API-provided eligible-fleet count, and update eligibility messages.

Changes

Unmanaged fleet targeting

Layer / File(s) Summary
Fleet endpoint filtering
libs/ui-components/src/components/Fleet/useFleets.ts
Adds the onlyUnmanaged option and combines unmanaged and name selectors in fieldSelector.
Target selection integration
libs/ui-components/src/components/Catalog/InstallWizard/steps/SelectTargetStep.tsx
Requests unmanaged fleets and removes owner-based row disabling.
Catalog fleet eligibility
libs/ui-components/src/components/Catalog/InstallWizard/steps/SpecificationsStep.tsx
Uses the API-provided eligible-fleet count and updates catalog deployment eligibility messages.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: ⚪ Minimal · up to cfa7c

The PR makes a localized UI change to filter non-selectable fleets and explain why; no actionable merge-blocking risk remains after normal checks and review.

Suggested labels: ui-components, i18n

Suggested reviewers: rawagner

🚥 Pre-merge checks | ✅ 14 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Generated-Files-Not-Hand-Edited ⚠️ Warning The PR directly changes the generated file libs/i18n/locales/en/translation.json. The diff replaces two translation entries, and libs/i18n/package.json identifies this file as output of `i18next-p… Revert the manual changes to libs/i18n/locales/en/translation.json. Keep the source-key changes, run npm run i18n, and commit only the generated output produced by that command.
✅ Passed checks (14 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 3…
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 No hardcoded secret was introduced. The pull request adds only fleet-filter values and user-facing translation text. The added-line scan found no credential URLs, secret-like variable assignments, PEM…
No-Weak-Crypto ✅ Passed The pull request adds fleet filtering, pagination handling, and user-facing text only. The added lines contain no MD5, SHA1, DES, RC4, 3DES, Blowfish, ECB, crypto API, custom cryptography, or secret/t…
No-Injection-Vectors ✅ Passed PASS: The PR adds only fleet filtering, query-string construction, and translated UI text. The changed files contain no eval/exec, dangerouslySetInnerHTML, os.system, exec.Command, or yaml.load usage.…
Container-Privileges ✅ Passed PASS — The pull request changes only TypeScript fleet-selection logic and localization text. The diff introduces no container or Kubernetes manifest fields for privileged: true, hostPID, `hostNetw…
No-Sensitive-Data-In-Logs ✅ Passed PASS: The pull request adds no logging statements or logging integrations. The added code only builds a fleet API field selector, updates fleet filtering, and changes user-facing text. The shared fetc…
Resource-Leaks ✅ Passed PASS: The pull request changes only TypeScript and translation files. The diff from HEAD^ to HEAD contains no files under proxy/ and no Go files. Therefore, the resource-leaks check for opened f…
Unchecked-Errors ✅ Passed PASS. The pull request changes only libs/i18n/locales/en/translation.json and TypeScript files under libs/ui-components. It does not change any Go file under proxy/, so this check has no applica…
Ai-Attribution ✅ Passed The pull-request commit explicitly uses the acceptable trailer Made-with: Cursor. Its parsed trailers contain no AI-related Co-Authored-By entry. The PR description also contains no conflicting AI…
I18n-Compliance ✅ Passed PASS: The changed .tsx files wrap all added user-visible text in t(). The new fleet-disabled reason and fleet description use hardcoded string literals. Structural inspection found no t() call that us…
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: catalog deployments cannot target fleets with an owner from ResourceSync.
Full details: Docstring Coverage

Explanation

No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 3 files.

Full details: No-Hardcoded-Secrets

Explanation

No hardcoded secret was introduced. The pull request adds only fleet-filter values and user-facing translation text. The added-line scan found no credential URLs, secret-like variable assignments, PEM private keys, or base64 string literals longer than 32 characters. Existing secret-related translation terms and example URLs are unchanged context, not secret values.

Full details: No-Weak-Crypto

Explanation

The pull request adds fleet filtering, pagination handling, and user-facing text only. The added lines contain no MD5, SHA1, DES, RC4, 3DES, Blowfish, ECB, crypto API, custom cryptography, or secret/token comparison logic. The weak-crypto check has no applicable failure.

Full details: No-Injection-Vectors

Explanation

PASS: The PR adds only fleet filtering, query-string construction, and translated UI text. The changed files contain no eval/exec, dangerouslySetInnerHTML, os.system, exec.Command, or yaml.load usage. The user-controlled fleet name is placed in URLSearchParams for an API fieldSelector; it is not passed to an evaluated, shell, HTML, or YAML sink.

Full details: Container-Privileges

Explanation

PASS — The pull request changes only TypeScript fleet-selection logic and localization text. The diff introduces no container or Kubernetes manifest fields for privileged: true, hostPID, hostNetwork, hostIPC, SYS_ADMIN, allowPrivilegeEscalation: true, or root execution. The changed files also contain no privilege-related declarations.

Full details: No-Sensitive-Data-In-Logs

Explanation

PASS: The pull request adds no logging statements or logging integrations. The added code only builds a fleet API field selector, updates fleet filtering, and changes user-facing text. The shared fetch path stores errors in state but does not log them. No passwords, tokens, API keys, session IDs, PII, hostnames, or customer data are written to logs by the changed behavior.

Full details: Resource-Leaks

Explanation

PASS: The pull request changes only TypeScript and translation files. The diff from HEAD^ to HEAD contains no files under proxy/ and no Go files. Therefore, the resource-leaks check for opened files, HTTP bodies, network connections, or unmanaged goroutines in proxy/ is not applicable.

Full details: Unchecked-Errors

Explanation

PASS. The pull request changes only libs/i18n/locales/en/translation.json and TypeScript files under libs/ui-components. It does not change any Go file under proxy/, so this check has no applicable error-return changes.

Full details: Ai-Attribution

Explanation

The pull-request commit explicitly uses the acceptable trailer Made-with: Cursor. Its parsed trailers contain no AI-related Co-Authored-By entry. The PR description also contains no conflicting AI attribution.

Full details: Generated-Files-Not-Hand-Edited

Explanation

The PR directly changes the generated file libs/i18n/locales/en/translation.json. The diff replaces two translation entries, and libs/i18n/package.json identifies this file as output of i18next-parser and requires npm run i18n to regenerate it. No OpenAPI model files changed.

Full details: I18n-Compliance

Explanation

PASS: The changed .tsx files wrap all added user-visible text in t(). The new fleet-disabled reason and fleet description use hardcoded string literals. Structural inspection found no t() call that uses a variable key. The other changes are filtering and state logic, not unwrapped UI text.

  • Fix all pre-merge checks with AI
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@celdrake celdrake changed the title EDM-4064: Make explicit which fleets are not selectable EDM-4064: Deploy OS/apps cannot target fleets with an owner (ResourceSync) Aug 26, 2026
@celdrake
celdrake force-pushed the bugfix/EDM-4064-fleet-select-tooltip branch from cfa7c97 to f18830d Compare August 27, 2026 14:17
@celdrake
celdrake merged commit 2e4dbe7 into flightctl:main Aug 27, 2026
10 checks passed
@celdrake
celdrake deleted the bugfix/EDM-4064-fleet-select-tooltip branch August 27, 2026 14:23
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.

2 participants