diff --git a/src/Components/CreateImageWizard/CreateImageWizard.tsx b/src/Components/CreateImageWizard/CreateImageWizard.tsx
index 26430bc5..e7c59e5a 100644
--- a/src/Components/CreateImageWizard/CreateImageWizard.tsx
+++ b/src/Components/CreateImageWizard/CreateImageWizard.tsx
@@ -22,7 +22,6 @@ import ImageOutputStep from './steps/ImageOutput';
import KernelStep from './steps/Kernel';
import LocaleStep from './steps/Locale';
import OscapStep from './steps/Oscap';
-import OscapOnPremWarning from './steps/Oscap/OnPremWarning';
import PackagesStep from './steps/Packages';
import RegistrationStep from './steps/Registration';
import RepositoriesStep from './steps/Repositories';
@@ -82,7 +81,6 @@ import {
import isRhel from '../../Utilities/isRhel';
import { resolveRelPath } from '../../Utilities/path';
import { useFlag } from '../../Utilities/useGetEnvironment';
-import { useOnPremOpenSCAPAvailable } from '../../Utilities/useOnPremOpenSCAP';
import { ImageBuilderHeader } from '../sharedComponents/ImageBuilderHeader';
type CustomWizardFooterPropType = {
@@ -157,8 +155,6 @@ const CreateImageWizard = ({ isEdit }: CreateImageWizardProps) => {
const isFirewallEnabled = useFlag('image-builder.firewall.enabled');
const isServicesStepEnabled = useFlag('image-builder.services.enabled');
- const onPremOpenSCAPAvailable = useOnPremOpenSCAPAvailable();
-
// IMPORTANT: Ensure the wizard starts with a fresh initial state
useEffect(() => {
dispatch(initializeWizard());
@@ -416,11 +412,7 @@ const CreateImageWizard = ({ isEdit }: CreateImageWizardProps) => {
}
>
- {process.env.IS_ON_PREMISE && !onPremOpenSCAPAvailable ? (
-
- ) : (
-
- )}
+
,
{
+ return (
+
+ );
+};
+
+export default OscapOnPremSpinner;
diff --git a/src/Components/CreateImageWizard/steps/Oscap/index.tsx b/src/Components/CreateImageWizard/steps/Oscap/index.tsx
index 1df6a309..96322a55 100644
--- a/src/Components/CreateImageWizard/steps/Oscap/index.tsx
+++ b/src/Components/CreateImageWizard/steps/Oscap/index.tsx
@@ -10,6 +10,8 @@ import {
} from '@patternfly/react-core';
import { ExternalLinkAltIcon } from '@patternfly/react-icons';
+import OscapOnPremSpinner from './OnPremSpinner';
+import OscapOnPremWarning from './OnPremWarning';
import { Oscap, removeBetaFromRelease } from './Oscap';
import {
@@ -36,8 +38,9 @@ import {
clearKernelAppend,
} from '../../../../store/wizardSlice';
import { useFlag } from '../../../../Utilities/useGetEnvironment';
+import { useOnPremOpenSCAPAvailable } from '../../../../Utilities/useOnPremOpenSCAP';
-const OscapStep = () => {
+const OscapContent = () => {
const dispatch = useAppDispatch();
const complianceEnabled = useFlag('image-builder.compliance.enabled');
const complianceType = useAppSelector(selectComplianceType);
@@ -159,4 +162,20 @@ const OscapStep = () => {
);
};
+const OnPremOscapStep = () => {
+ const [onPremOpenSCAPAvailable, isLoading] = useOnPremOpenSCAPAvailable();
+
+ if (isLoading) {
+ return ;
+ }
+
+ if (!onPremOpenSCAPAvailable) {
+ return ;
+ }
+
+ return ;
+};
+
+const OscapStep = process.env.IS_ON_PREMISE ? OnPremOscapStep : OscapContent;
+
export default OscapStep;
diff --git a/src/Utilities/useOnPremOpenSCAP.tsx b/src/Utilities/useOnPremOpenSCAP.tsx
index 9c8a2d9c..6629ed4f 100644
--- a/src/Utilities/useOnPremOpenSCAP.tsx
+++ b/src/Utilities/useOnPremOpenSCAP.tsx
@@ -3,34 +3,30 @@ import { useEffect, useState } from 'react';
import cockpit from 'cockpit';
export const useOnPremOpenSCAPAvailable = () => {
+ // this can default to false in the service, since we will only render
+ // a loading spinner for on-prem
+ const [isLoading, setIsLoading] = useState(true);
const [packagesAvailable, setPackagesAvailable] = useState(false);
useEffect(() => {
- const checkPackages = async () => {
- try {
- const openSCAPAvailable = await cockpit.spawn(
- ['rpm', '-qa', 'openscap-scanner'],
- {}
- );
-
- const ssgAvailable = await cockpit.spawn(
- ['rpm', '-qa', 'scap-security-guide'],
- {}
- );
-
- setPackagesAvailable(openSCAPAvailable !== '' && ssgAvailable !== '');
- } catch {
- // this doesn't change the value,
- // but we need to handle the error
- // so just set the value to false
- setPackagesAvailable(false);
- }
+ const checkPackages = () => {
+ cockpit
+ .spawn(['rpm', '-qa', 'openscap-scanner', 'scap-security-guide'], {})
+ .then((res: string) => {
+ setPackagesAvailable(
+ res.includes('openscap-scanner') &&
+ res.includes('scap-security-guide')
+ );
+ setIsLoading(false);
+ })
+ .catch(() => {
+ setPackagesAvailable(false);
+ setIsLoading(false);
+ });
};
- if (process.env.IS_ON_PREMISE) {
- checkPackages();
- }
+ checkPackages();
}, []);
- return packagesAvailable;
+ return [packagesAvailable, isLoading];
};