From e744bb27b90efbb556fd5cdb885a024b61c04e2a Mon Sep 17 00:00:00 2001
From: Saif Chaudhry
Date: Mon, 16 Mar 2026 13:54:07 -0700
Subject: [PATCH 01/12] feat(clusters): allow operator install method on
non-OpenShift platforms
ROX-33119: Remove platform gating that restricted the Operator
installation method to OpenShift only. Update instruction text in
both Init Bundles and CRS flows to be platform-neutral, with
qualified sub-bullets for OpenShift vs other platforms and kubectl
as an alternative to oc.
Signed-off-by: Saif Chaudhry
---
.../SecureClusterUsingOperator.tsx | 41 ++++++++++++-----
.../Clusters/InitBundles/InitBundleForm.tsx | 15 +++----
.../SecureClusterUsingOperator.tsx | 44 ++++++++++++++-----
3 files changed, 68 insertions(+), 32 deletions(-)
diff --git a/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx b/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
index a3be07cb0747e..140493a9fe488 100644
--- a/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
+++ b/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
@@ -26,13 +26,23 @@ function SecureClusterUsingOperator({
- In the Red Hat OpenShift Container Platform web console on the cluster that
- you are securing, you have installed the RHACS Operator.
+ In the cluster that you are securing, you have installed the RHACS Operator.
- For Operator installation, create a new Red Hat OpenShift Container Platform
- project. rhacs-operator is a good name choice.
+ For Operator installation, create a new project or namespace.{' '}
+ rhacs-operator is a good name choice.
+ To install the RHACS Operator:
+
+
+ On Red Hat OpenShift Container Platform, use{' '}
+ Operators > OperatorHub in the web console.
+
+
+ On other platforms, apply an image pull secret and use the{' '}
+ rhacs-operator Helm chart.
+
+
Apply the cluster registration secret on the secured cluster.
@@ -43,9 +53,9 @@ function SecureClusterUsingOperator({
- In the OpenShift Container Platform web console on the cluster that
- you are securing, in the top menu, click + to open
- the Import YAML page.
+ On an OpenShift cluster: In the OpenShift Container Platform web
+ console on the cluster that you are securing, in the top menu, click{' '}
+ + to open the Import YAML page.
You can drag the cluster registration secret file or copy and paste
@@ -55,11 +65,22 @@ function SecureClusterUsingOperator({
- On the cluster that you are securing, using the Red Hat OpenShift
- CLI, run a command similar to the following:
+ On an OpenShift cluster: using the oc CLI, run a
+ command similar to the following:
+
+
+ oc create -f <cluster-registration-secret-file>.yaml -n
+ stackrox
+
+
+
+
+ On other clusters: using the kubectl CLI, run a
+ command similar to the following:
- oc create -f cluster-registration-secret.yaml -n stackrox
+ kubectl create -f <cluster-registration-secret-file>.yaml -n
+ stackrox
diff --git a/ui/apps/platform/src/Containers/Clusters/InitBundles/InitBundleForm.tsx b/ui/apps/platform/src/Containers/Clusters/InitBundles/InitBundleForm.tsx
index 1dbc8d771c71b..71386619553bf 100644
--- a/ui/apps/platform/src/Containers/Clusters/InitBundles/InitBundleForm.tsx
+++ b/ui/apps/platform/src/Containers/Clusters/InitBundles/InitBundleForm.tsx
@@ -105,7 +105,7 @@ function InitBundleForm(): ReactElement {
function onChangePlatform(value) {
return setValues({
- installation: value === 'OpenShift' ? 'Operator' : 'Helm',
+ installation: 'Operator',
name: values.name, // redundant but function requires all values
platform: value,
});
@@ -171,21 +171,16 @@ function InitBundleForm(): ReactElement {
id="installation"
value={values.installation}
handleSelect={onSelectInstallation}
- isDisabled={values.platform !== 'OpenShift'}
toggleAriaLabel="Installation method menu toggle"
aria-label="Select an installation method"
>
- {Object.entries(installationOptions)
- .filter(
- ([installationKey]) =>
- values.platform === 'OpenShift' ||
- installationKey !== 'Operator'
- )
- .map(([installationKey, installationLabel]) => (
+ {Object.entries(installationOptions).map(
+ ([installationKey, installationLabel]) => (
{installationLabel}
- ))}
+ )
+ )}
diff --git a/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx b/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx
index 5af37f464c6dc..1cc7e75db6296 100644
--- a/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx
+++ b/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx
@@ -32,6 +32,7 @@ function SecureClusterUsingOperator({
rel="noopener noreferrer"
>
Generating and applying an init bundle for RHACS on Red Hat OpenShift
+ (OpenShift)
@@ -43,9 +44,10 @@ function SecureClusterUsingOperator({
target="_blank"
rel="noopener noreferrer"
>
- Installing RHACS on secured clusters by using the Operator
+ Installing RHACS on secured clusters by using the Operator (OpenShift)
+ {/* TODO ROX-33550: Add non-OpenShift operator documentation links when available */}
>
)}
@@ -62,13 +64,23 @@ function SecureClusterUsingOperator({
- In the Red Hat OpenShift Container Platform web console on the cluster that
- you are securing, you have installed the RHACS Operator.
+ In the cluster that you are securing, you have installed the RHACS Operator.
- For Operator installation, create a new Red Hat OpenShift Container Platform
- project. rhacs-operator is a good name choice.
+ For Operator installation, create a new project or namespace.{' '}
+ rhacs-operator is a good name choice.
+ To install the RHACS Operator:
+
+
+ On Red Hat OpenShift Container Platform, use{' '}
+ Operators > OperatorHub in the web console.
+
+
+ On other platforms, apply an image pull secret and use the{' '}
+ rhacs-operator Helm chart.
+
+
Repeat for each secured cluster
@@ -97,9 +109,9 @@ function SecureClusterUsingOperator({
- In the OpenShift Container Platform web console on the cluster that
- you are securing, in the top menu, click + to open
- the Import YAML page.
+ On an OpenShift cluster: In the OpenShift Container Platform web
+ console on the cluster that you are securing, in the top menu, click{' '}
+ + to open the Import YAML page.
You can drag the init bundle file or copy and paste its contents
@@ -108,12 +120,20 @@ function SecureClusterUsingOperator({
- On the cluster that you are securing, using the Red Hat OpenShift
- CLI, run a command similar to the following:
+ On an OpenShift cluster: using the oc CLI, run a
+ command similar to the following:
+
+
+ oc create -f <init-bundle-file>.yaml -n stackrox
+
+
+
+
+ On other clusters: using the kubectl CLI, run a
+ command similar to the following:
- oc create -f name-Operator-secrets-cluster-init-bundle.yaml -n
- stackrox
+ kubectl create -f <init-bundle-file>.yaml -n stackrox
From 01b1c355589ed31c4f728065040ee55185281a83 Mon Sep 17 00:00:00 2001
From: Saif Chaudhry
Date: Mon, 16 Mar 2026 15:35:00 -0700
Subject: [PATCH 02/12] fix(clusters): simplify onChangePlatform and fix
ClipboardCopy whitespace
Simplify onChangePlatform to only set the platform field instead of
resetting installation to Operator on every platform switch, which
silently overrode the user's selection. Also fix ClipboardCopy in
CRS operator instructions where line wrapping caused whitespace in
the copied command text.
Signed-off-by: Saif Chaudhry
---
.../SecureClusterUsingOperator.tsx | 8 ++++----
.../Containers/Clusters/InitBundles/InitBundleForm.tsx | 7 +------
2 files changed, 5 insertions(+), 10 deletions(-)
diff --git a/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx b/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
index 140493a9fe488..1d8b98a863631 100644
--- a/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
+++ b/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
@@ -69,8 +69,7 @@ function SecureClusterUsingOperator({
command similar to the following:
- oc create -f <cluster-registration-secret-file>.yaml -n
- stackrox
+ {'oc create -f .yaml -n stackrox'}
@@ -79,8 +78,9 @@ function SecureClusterUsingOperator({
command similar to the following:
- kubectl create -f <cluster-registration-secret-file>.yaml -n
- stackrox
+ {
+ 'kubectl create -f .yaml -n stackrox'
+ }
diff --git a/ui/apps/platform/src/Containers/Clusters/InitBundles/InitBundleForm.tsx b/ui/apps/platform/src/Containers/Clusters/InitBundles/InitBundleForm.tsx
index 71386619553bf..05a8f63ea0722 100644
--- a/ui/apps/platform/src/Containers/Clusters/InitBundles/InitBundleForm.tsx
+++ b/ui/apps/platform/src/Containers/Clusters/InitBundles/InitBundleForm.tsx
@@ -68,7 +68,6 @@ function InitBundleForm(): ReactElement {
isSubmitting,
isValid,
setFieldValue,
- setValues,
submitForm,
touched,
values,
@@ -104,11 +103,7 @@ function InitBundleForm(): ReactElement {
}
function onChangePlatform(value) {
- return setValues({
- installation: 'Operator',
- name: values.name, // redundant but function requires all values
- platform: value,
- });
+ return setFieldValue('platform', value);
}
function onSelectInstallation(_id: string, value: string) {
From 550afd8db718235c19f0d726aae4eb367d1b5394 Mon Sep 17 00:00:00 2001
From: Saif Chaudhry
Date: Mon, 16 Mar 2026 15:37:53 -0700
Subject: [PATCH 03/12] refactor(clusters): narrow InstallationKey and
PlatformKey types
Remove Record annotations that widened as const
types, so InstallationKey resolves to 'Operator' | 'Helm' and
PlatformKey to 'OpenShift' | 'EKS' | 'AKS' | 'GKE'. Add oneOf
validators to the yup schema for compile-time and runtime safety.
Signed-off-by: Saif Chaudhry
---
.../src/Containers/Clusters/InitBundles/InitBundleForm.tsx | 4 ++--
.../Containers/Clusters/InitBundles/InitBundleForm.utils.ts | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/ui/apps/platform/src/Containers/Clusters/InitBundles/InitBundleForm.tsx b/ui/apps/platform/src/Containers/Clusters/InitBundles/InitBundleForm.tsx
index 05a8f63ea0722..4d44cde91ffcb 100644
--- a/ui/apps/platform/src/Containers/Clusters/InitBundles/InitBundleForm.tsx
+++ b/ui/apps/platform/src/Containers/Clusters/InitBundles/InitBundleForm.tsx
@@ -54,8 +54,8 @@ const validationSchema: yup.ObjectSchema = yup.object().sh
'Name can have only the following characters: letters, digits, period, underscore, hyphen (but no spaces)'
)
.required('Bundle name is required'),
- installation: yup.string().trim().required(), // Select
- platform: yup.string().trim().required(), // Radio
+ installation: yup.string().trim().oneOf(['Operator', 'Helm']).required(),
+ platform: yup.string().trim().oneOf(['OpenShift', 'EKS', 'AKS', 'GKE']).required(),
});
function InitBundleForm(): ReactElement {
diff --git a/ui/apps/platform/src/Containers/Clusters/InitBundles/InitBundleForm.utils.ts b/ui/apps/platform/src/Containers/Clusters/InitBundles/InitBundleForm.utils.ts
index d26ded813edd8..a9f9a316d3cdb 100644
--- a/ui/apps/platform/src/Containers/Clusters/InitBundles/InitBundleForm.utils.ts
+++ b/ui/apps/platform/src/Containers/Clusters/InitBundles/InitBundleForm.utils.ts
@@ -2,14 +2,14 @@ import FileSaver from 'file-saver';
import type { GenerateClusterInitBundleResponse } from 'services/ClustersService';
-export const installationOptions: Record = {
+export const installationOptions = {
Operator: 'Operator (recommended)',
Helm: 'Helm chart',
} as const;
export type InstallationKey = keyof typeof installationOptions;
-export const platformOptions: Record = {
+export const platformOptions = {
OpenShift: 'OpenShift',
EKS: 'EKS',
AKS: 'AKS',
From aec708c28380988a5d58fcda1d0bd6f26203710d Mon Sep 17 00:00:00 2001
From: Saif Chaudhry
Date: Mon, 16 Mar 2026 15:45:31 -0700
Subject: [PATCH 04/12] fix(clusters): correct grammar in operator instruction
text
Add missing article in heading ("using the Operator installation
method"), replace awkward colon with comma in OpenShift web console
bullet, remove redundant clause, and fix plural "secrets" to
singular "secret" in CRS apply step.
Signed-off-by: Saif Chaudhry
---
.../SecureClusterUsingOperator.tsx | 9 ++++-----
.../Clusters/InitBundles/SecureClusterUsingOperator.tsx | 8 ++++----
2 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx b/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
index 1d8b98a863631..249cc9a65078e 100644
--- a/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
+++ b/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
@@ -47,15 +47,14 @@ function SecureClusterUsingOperator({
Apply the cluster registration secret on the secured cluster.
- Perform one of the following tasks to apply the cluster registration
- secrets:
+ Perform one of the following tasks to apply the cluster registration secret:
- On an OpenShift cluster: In the OpenShift Container Platform web
- console on the cluster that you are securing, in the top menu, click{' '}
- + to open the Import YAML page.
+ On an OpenShift cluster, in the OpenShift Container Platform web
+ console, in the top menu, click + to open the{' '}
+ Import YAML page.
You can drag the cluster registration secret file or copy and paste
diff --git a/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx b/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx
index 1cc7e75db6296..66cc774f7fa06 100644
--- a/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx
+++ b/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx
@@ -18,7 +18,7 @@ function SecureClusterUsingOperator({
return (
- Secure a cluster using Operator installation method
+ Secure a cluster using the Operator installation method
{version && (
<>
@@ -109,9 +109,9 @@ function SecureClusterUsingOperator({
- On an OpenShift cluster: In the OpenShift Container Platform web
- console on the cluster that you are securing, in the top menu, click{' '}
- + to open the Import YAML page.
+ On an OpenShift cluster, in the OpenShift Container Platform web
+ console, in the top menu, click + to open the{' '}
+ Import YAML page.
You can drag the init bundle file or copy and paste its contents
From d95da09401382ba340d4cf8cf9be897e8ad4accf Mon Sep 17 00:00:00 2001
From: Saif Chaudhry
Date: Mon, 16 Mar 2026 15:47:00 -0700
Subject: [PATCH 05/12] fix(clusters): simplify operator prerequisite wording
Rewrite "In the cluster that you are securing, you have installed
the RHACS Operator" to lead with the action for clarity.
Signed-off-by: Saif Chaudhry
---
.../ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx | 2 +-
.../Clusters/InitBundles/SecureClusterUsingOperator.tsx | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx b/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
index 249cc9a65078e..72b1febfd3441 100644
--- a/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
+++ b/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
@@ -26,7 +26,7 @@ function SecureClusterUsingOperator({
- In the cluster that you are securing, you have installed the RHACS Operator.
+ You have installed the RHACS Operator on the cluster you are securing.
For Operator installation, create a new project or namespace.{' '}
diff --git a/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx b/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx
index 66cc774f7fa06..a45dc7658e582 100644
--- a/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx
+++ b/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx
@@ -64,7 +64,7 @@ function SecureClusterUsingOperator({
- In the cluster that you are securing, you have installed the RHACS Operator.
+ You have installed the RHACS Operator on the cluster you are securing.
For Operator installation, create a new project or namespace.{' '}
From edf5a648e46839a3909dd0adee54180c6ab25238 Mon Sep 17 00:00:00 2001
From: Saif Chaudhry
Date: Mon, 16 Mar 2026 15:48:19 -0700
Subject: [PATCH 06/12] fix(clusters): tighten wordy instruction text
Remove "by" from "by using", replace redundant "YAML file for the
init bundle/cluster registration secret" with "its YAML file",
shorten "Perform one of the following tasks to apply..." to "Apply
it using one of the following methods:", and simplify the final
install step.
Signed-off-by: Saif Chaudhry
---
.../SecureClusterUsingOperator.tsx | 17 +++++------------
.../SecureClusterUsingOperator.tsx | 19 +++++++------------
2 files changed, 12 insertions(+), 24 deletions(-)
diff --git a/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx b/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
index 72b1febfd3441..5e9b9ca27f0b9 100644
--- a/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
+++ b/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
@@ -13,7 +13,7 @@ function SecureClusterUsingOperator({
return (
- You can install secured cluster services on your clusters by using the{' '}
+ You can install secured cluster services on your clusters using the{' '}
SecuredCluster custom resource.
Prerequisites
@@ -21,13 +21,11 @@ function SecureClusterUsingOperator({
In the RHACS web portal, you have created a cluster registration secret and
- downloaded the YAML file for the cluster registration secret.
+ downloaded its YAML file.
-
- You have installed the RHACS Operator on the cluster you are securing.
-
+ You have installed the RHACS Operator on the cluster you are securing.
For Operator installation, create a new project or namespace.{' '}
rhacs-operator is a good name choice.
@@ -46,9 +44,7 @@ function SecureClusterUsingOperator({
Apply the cluster registration secret on the secured cluster.
-
- Perform one of the following tasks to apply the cluster registration secret:
-
+ Apply it using one of the following methods:
@@ -85,10 +81,7 @@ function SecureClusterUsingOperator({
-
- On the cluster that you are securing, install secured cluster services using
- the RHACS Operator.
-
+ Install secured cluster services on the cluster using the RHACS Operator.
diff --git a/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx b/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx
index a45dc7658e582..dced2f978f811 100644
--- a/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx
+++ b/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx
@@ -51,21 +51,19 @@ function SecureClusterUsingOperator({
>
)}
- You can install secured cluster services on your clusters by using the{' '}
+ You can install secured cluster services on your clusters using the{' '}
SecuredCluster custom resource.
Prerequisites
- In the RHACS web portal, you have created an init bundle and downloaded the
- YAML file for the init bundle.
+ In the RHACS web portal, you have created an init bundle and downloaded its
+ YAML file.
-
- You have installed the RHACS Operator on the cluster you are securing.
-
+ You have installed the RHACS Operator on the cluster you are securing.
For Operator installation, create a new project or namespace.{' '}
rhacs-operator is a good name choice.
@@ -89,8 +87,8 @@ function SecureClusterUsingOperator({
Apply the init bundle on the secured cluster.
Applying the init bundle creates the secrets and resources that the secured
- cluster needs to communicate with RHACS. Perform one of the following tasks
- to apply the init bundle:
+ cluster needs to communicate with RHACS. Apply it using one of the following
+ methods:
{version && (
@@ -139,10 +137,7 @@ function SecureClusterUsingOperator({
-
- On the cluster that you are securing, install secured cluster services using
- the RHACS Operator.
-
+ Install secured cluster services on the cluster using the RHACS Operator.
From 9b6e83ebe0f09b6f70432123dfb283ad781bb312 Mon Sep 17 00:00:00 2001
From: Saif Chaudhry
Date: Tue, 17 Mar 2026 13:51:28 -0700
Subject: [PATCH 07/12] fix(clusters): use HTML entities for ClipboardCopy
angle brackets
Standardize ClipboardCopy content to use HTML entities (</>)
instead of JSX string expressions for angle brackets, matching the
pattern used in the InitBundles variant and other ClipboardCopy
usages across the codebase.
Signed-off-by: Saif Chaudhry
---
.../SecureClusterUsingOperator.tsx | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx b/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
index 5e9b9ca27f0b9..d2dcf1e5a51bb 100644
--- a/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
+++ b/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
@@ -64,7 +64,7 @@ function SecureClusterUsingOperator({
command similar to the following:
- {'oc create -f .yaml -n stackrox'}
+ oc create -f <cluster-registration-secret-file>.yaml -n stackrox
@@ -73,9 +73,7 @@ function SecureClusterUsingOperator({
command similar to the following:
- {
- 'kubectl create -f .yaml -n stackrox'
- }
+ kubectl create -f <cluster-registration-secret-file>.yaml -n stackrox
From 22477e6e9aaccba6d0fae5bc590a8f1686609ffb Mon Sep 17 00:00:00 2001
From: Saif Chaudhry
Date: Tue, 17 Mar 2026 13:51:43 -0700
Subject: [PATCH 08/12] refactor(clusters): derive oneOf values from option
objects
Derive Yup oneOf validation values from installationOptions and
platformOptions objects instead of hardcoding them. This prevents
silent divergence if a new option is added to the source-of-truth
objects but not to the schema.
Signed-off-by: Saif Chaudhry
---
.../Clusters/InitBundles/InitBundleForm.tsx | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/ui/apps/platform/src/Containers/Clusters/InitBundles/InitBundleForm.tsx b/ui/apps/platform/src/Containers/Clusters/InitBundles/InitBundleForm.tsx
index 4d44cde91ffcb..ee1177d83ccd6 100644
--- a/ui/apps/platform/src/Containers/Clusters/InitBundles/InitBundleForm.tsx
+++ b/ui/apps/platform/src/Containers/Clusters/InitBundles/InitBundleForm.tsx
@@ -54,8 +54,16 @@ const validationSchema: yup.ObjectSchema = yup.object().sh
'Name can have only the following characters: letters, digits, period, underscore, hyphen (but no spaces)'
)
.required('Bundle name is required'),
- installation: yup.string().trim().oneOf(['Operator', 'Helm']).required(),
- platform: yup.string().trim().oneOf(['OpenShift', 'EKS', 'AKS', 'GKE']).required(),
+ installation: yup
+ .string()
+ .trim()
+ .oneOf(Object.keys(installationOptions) as InstallationKey[])
+ .required(),
+ platform: yup
+ .string()
+ .trim()
+ .oneOf(Object.keys(platformOptions) as PlatformKey[])
+ .required(),
});
function InitBundleForm(): ReactElement {
From a2e72fa430b96a5a355e744b4385a96eb6ec3056 Mon Sep 17 00:00:00 2001
From: Saif Chaudhry
Date: Tue, 17 Mar 2026 13:51:54 -0700
Subject: [PATCH 09/12] fix(clusters): add type annotation to onChangePlatform
parameter
Add explicit string type to the value parameter to avoid implicit
any, consistent with the type narrowing done elsewhere in this PR.
Signed-off-by: Saif Chaudhry
---
.../src/Containers/Clusters/InitBundles/InitBundleForm.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ui/apps/platform/src/Containers/Clusters/InitBundles/InitBundleForm.tsx b/ui/apps/platform/src/Containers/Clusters/InitBundles/InitBundleForm.tsx
index ee1177d83ccd6..0e043b832d3b7 100644
--- a/ui/apps/platform/src/Containers/Clusters/InitBundles/InitBundleForm.tsx
+++ b/ui/apps/platform/src/Containers/Clusters/InitBundles/InitBundleForm.tsx
@@ -110,7 +110,7 @@ function InitBundleForm(): ReactElement {
return setFieldValue(event.target.id, value);
}
- function onChangePlatform(value) {
+ function onChangePlatform(value: string) {
return setFieldValue('platform', value);
}
From 3f45cd2b5de49458eaf52c9ae737a36c05098cc3 Mon Sep 17 00:00:00 2001
From: Saif Chaudhry
Date: Tue, 17 Mar 2026 13:52:05 -0700
Subject: [PATCH 10/12] fix(clusters): remove trailing whitespace in
instruction text
Remove trailing space before closing tags in both
SecureClusterUsingOperator components.
Signed-off-by: Saif Chaudhry
---
.../ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx | 2 +-
.../Clusters/InitBundles/SecureClusterUsingOperator.tsx | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx b/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
index d2dcf1e5a51bb..410cd2e36f2a0 100644
--- a/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
+++ b/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
@@ -43,7 +43,7 @@ function SecureClusterUsingOperator({
- Apply the cluster registration secret on the secured cluster.
+ Apply the cluster registration secret on the secured cluster.
Apply it using one of the following methods:
diff --git a/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx b/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx
index dced2f978f811..b7381d866f2c4 100644
--- a/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx
+++ b/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx
@@ -84,7 +84,7 @@ function SecureClusterUsingOperator({
Repeat for each secured cluster
- Apply the init bundle on the secured cluster.
+ Apply the init bundle on the secured cluster.
Applying the init bundle creates the secrets and resources that the secured
cluster needs to communicate with RHACS. Apply it using one of the following
From c91af7a6940883b53bc0e35e4db00925b2cbbdea Mon Sep 17 00:00:00 2001
From: Saif Chaudhry
Date: Tue, 17 Mar 2026 14:15:15 -0700
Subject: [PATCH 11/12] fix(clusters): use JSX expressions for ClipboardCopy
angle brackets
HTML entities cause prettier to treat the content as plain text and
wrap long lines, which introduces newlines in the copied command.
JSX string expressions are treated as atomic by prettier and
preserve the command as a single line.
Signed-off-by: Saif Chaudhry
---
.../SecureClusterUsingOperator.tsx | 6 ++++--
.../Clusters/InitBundles/SecureClusterUsingOperator.tsx | 4 ++--
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx b/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
index 410cd2e36f2a0..1e5f63dc34658 100644
--- a/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
+++ b/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
@@ -64,7 +64,7 @@ function SecureClusterUsingOperator({
command similar to the following:
- oc create -f <cluster-registration-secret-file>.yaml -n stackrox
+ {'oc create -f .yaml -n stackrox'}
@@ -73,7 +73,9 @@ function SecureClusterUsingOperator({
command similar to the following:
- kubectl create -f <cluster-registration-secret-file>.yaml -n stackrox
+ {
+ 'kubectl create -f .yaml -n stackrox'
+ }
diff --git a/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx b/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx
index b7381d866f2c4..9a0e9c8d1a857 100644
--- a/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx
+++ b/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx
@@ -122,7 +122,7 @@ function SecureClusterUsingOperator({
command similar to the following:
- oc create -f <init-bundle-file>.yaml -n stackrox
+ {'oc create -f .yaml -n stackrox'}
@@ -131,7 +131,7 @@ function SecureClusterUsingOperator({
command similar to the following:
- kubectl create -f <init-bundle-file>.yaml -n stackrox
+ {'kubectl create -f .yaml -n stackrox'}
From 37648764e8c0fd86ae4a22f2de729042773476d4 Mon Sep 17 00:00:00 2001
From: Saif Chaudhry
Date: Tue, 17 Mar 2026 14:18:33 -0700
Subject: [PATCH 12/12] fix(clusters): extract ClipboardCopy commands into
variables
Move CLI commands into named constants so ClipboardCopy children
use simple variable references, avoiding both HTML entity escaping
and JSX string expression wrapping for angle brackets.
Signed-off-by: Saif Chaudhry
---
.../SecureClusterUsingOperator.tsx | 13 +++++--------
.../InitBundles/SecureClusterUsingOperator.tsx | 11 +++++------
2 files changed, 10 insertions(+), 14 deletions(-)
diff --git a/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx b/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
index 1e5f63dc34658..92751a694f589 100644
--- a/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
+++ b/ui/apps/platform/src/Containers/Clusters/ClusterRegistrationSecrets/SecureClusterUsingOperator.tsx
@@ -5,6 +5,9 @@ export type SecureClusterUsingOperatorProps = {
headingLevel: 'h2' | 'h3';
};
+const ocApplyCommand = 'oc create -f .yaml -n stackrox';
+const kubectlApplyCommand = 'kubectl create -f .yaml -n stackrox';
+
function SecureClusterUsingOperator({
headingLevel,
}: SecureClusterUsingOperatorProps): ReactElement {
@@ -63,20 +66,14 @@ function SecureClusterUsingOperator({
On an OpenShift cluster: using the oc CLI, run a
command similar to the following:
-
- {'oc create -f .yaml -n stackrox'}
-
+ {ocApplyCommand}
On other clusters: using the kubectl CLI, run a
command similar to the following:
-
- {
- 'kubectl create -f .yaml -n stackrox'
- }
-
+ {kubectlApplyCommand}
diff --git a/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx b/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx
index 9a0e9c8d1a857..57188c3e1c450 100644
--- a/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx
+++ b/ui/apps/platform/src/Containers/Clusters/InitBundles/SecureClusterUsingOperator.tsx
@@ -9,6 +9,9 @@ export type SecureClusterUsingOperatorProps = {
headingLevel: 'h2' | 'h3';
};
+const ocApplyCommand = 'oc create -f .yaml -n stackrox';
+const kubectlApplyCommand = 'kubectl create -f .yaml -n stackrox';
+
function SecureClusterUsingOperator({
headingLevel,
}: SecureClusterUsingOperatorProps): ReactElement {
@@ -121,18 +124,14 @@ function SecureClusterUsingOperator({
On an OpenShift cluster: using the oc CLI, run a
command similar to the following:
-
- {'oc create -f .yaml -n stackrox'}
-
+ {ocApplyCommand}
On other clusters: using the kubectl CLI, run a
command similar to the following:
-
- {'kubectl create -f .yaml -n stackrox'}
-
+ {kubectlApplyCommand}