oscap: lock the wizard step behind a feature flag

The oscap feature have been quite eagerly pushed forward and it seems we
went a bit fast with it. To take more time and make sure all the
stakeholders agree on the way forward the decision was taken to put this
functionality behind a feature flag.

The two feature flags for both stage and prod are there:
* https://insights-stage.unleash.devshift.net/projects/default/features/image-builder.wizard.oscap.enabled (enabled on stage so we can test the feature)
* https://insights.unleash.devshift.net/projects/default/features/image-builder.wizard.oscap.enabled (disabled on prod)
This commit is contained in:
Thomas Lavocat 2023-10-17 17:18:08 +02:00 committed by Klara Simickova
parent 3984971a72
commit d60c6cb74b
4 changed files with 27 additions and 10 deletions

View file

@ -320,7 +320,7 @@ const parseSizeUnit = (bytesize) => {
}; };
// map the compose request object to the expected form state // map the compose request object to the expected form state
const requestToState = (composeRequest, distroInfo, isBeta, isProd) => { const requestToState = (composeRequest, distroInfo, isProd, enableOscap) => {
if (composeRequest) { if (composeRequest) {
const imageRequest = composeRequest.image_requests[0]; const imageRequest = composeRequest.image_requests[0];
const uploadRequest = imageRequest.upload_request; const uploadRequest = imageRequest.upload_request;
@ -476,7 +476,7 @@ const requestToState = (composeRequest, distroInfo, isBeta, isProd) => {
} }
// oscap policy // oscap policy
if (isBeta) { if (enableOscap) {
formState['oscap-policy'] = formState['oscap-policy'] =
composeRequest?.customizations?.openscap?.profile_id; composeRequest?.customizations?.openscap?.profile_id;
} }
@ -487,7 +487,11 @@ const requestToState = (composeRequest, distroInfo, isBeta, isProd) => {
} }
}; };
const formStepHistory = (composeRequest, contentSourcesEnabled, isBeta) => { const formStepHistory = (
composeRequest,
contentSourcesEnabled,
enableOscap
) => {
if (composeRequest) { if (composeRequest) {
const imageRequest = composeRequest.image_requests[0]; const imageRequest = composeRequest.image_requests[0];
const uploadRequest = imageRequest.upload_request; const uploadRequest = imageRequest.upload_request;
@ -506,7 +510,7 @@ const formStepHistory = (composeRequest, contentSourcesEnabled, isBeta) => {
steps.push('registration'); steps.push('registration');
} }
if (isBeta) { if (enableOscap) {
steps.push('Compliance'); steps.push('Compliance');
} }
@ -559,24 +563,30 @@ const CreateImageWizard = () => {
const { isBeta, isProd } = useGetEnvironment(); const { isBeta, isProd } = useGetEnvironment();
// Only allow oscap to be used in Beta even if the flag says the feature is
// activated.
const oscapFeatureFlag =
useFlag('image-builder.wizard.oscap.enabled') && isBeta();
let initialState = requestToState( let initialState = requestToState(
composeRequest, composeRequest,
distroInfo, distroInfo,
isBeta(), isProd(),
isProd() oscapFeatureFlag
); );
const stepHistory = formStepHistory( const stepHistory = formStepHistory(
composeRequest, composeRequest,
contentSourcesEnabled, contentSourcesEnabled,
isBeta() oscapFeatureFlag
); );
if (initialState) { if (initialState) {
initialState.isBeta = isBeta(); initialState.isBeta = isBeta();
initialState.contentSourcesEnabled = contentSourcesEnabled; initialState.contentSourcesEnabled = contentSourcesEnabled;
initialState.enableOscap = oscapFeatureFlag;
} else { } else {
initialState = { initialState = {
isBeta: isBeta(), isBeta: isBeta(),
enableOscap: oscapFeatureFlag,
contentSourcesEnabled, contentSourcesEnabled,
}; };
} }

View file

@ -1,7 +1,7 @@
import isRhel from '../../../Utilities/isRhel.js'; import isRhel from '../../../Utilities/isRhel.js';
const imageOutputStepMapper = ( const imageOutputStepMapper = (
{ 'target-environment': targetEnv, release, isBeta } = {}, { 'target-environment': targetEnv, release, enableOscap } = {},
{ skipAws, skipGoogle, skipAzure } = {} { skipAws, skipGoogle, skipAzure } = {}
) => { ) => {
if (!skipAws && targetEnv?.aws) { if (!skipAws && targetEnv?.aws) {
@ -19,7 +19,7 @@ const imageOutputStepMapper = (
if (isRhel(release)) { if (isRhel(release)) {
return 'registration'; return 'registration';
} }
if (isBeta) { if (enableOscap) {
return 'Compliance'; return 'Compliance';
} }
return 'File system configuration'; return 'File system configuration';

View file

@ -70,7 +70,7 @@ const registrationStep = {
), ),
name: 'registration', name: 'registration',
nextStep: ({ values }) => { nextStep: ({ values }) => {
if (values.isBeta) { if (values.enableOscap) {
return 'Compliance'; return 'Compliance';
} else { } else {
return 'File system configuration'; return 'File system configuration';

View file

@ -49,6 +49,13 @@ jest.mock('@redhat-cloud-services/frontend-components/useChrome', () => ({
}), }),
})); }));
jest.mock('@unleash/proxy-client-react', () => ({
useUnleashContext: () => jest.fn(),
useFlag: jest.fn((flag) =>
flag === 'image-builder.wizard.oscap.enabled' ? true : false
),
}));
beforeAll(() => { beforeAll(() => {
// scrollTo is not defined in jsdom // scrollTo is not defined in jsdom
window.HTMLElement.prototype.scrollTo = function () {}; window.HTMLElement.prototype.scrollTo = function () {};