@openshift-assisted/ui-lib 2.17.3-cim → 2.17.6-cim
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/@types/cim/components/Agent/BMHStatusInfo.d.ts.map +1 -1
- package/build/@types/cim/components/Agent/MinimalHWRequirements.d.ts.map +1 -1
- package/build/@types/cim/components/ClusterDeployment/NetworkConfiguration.d.ts +1 -1
- package/build/@types/cim/components/ClusterDeployment/NetworkConfiguration.d.ts.map +1 -1
- package/build/@types/cim/components/ClusterDeployment/networkConfigurationValidation.d.ts +1 -1
- package/build/@types/cim/components/ClusterDeployment/networkConfigurationValidation.d.ts.map +1 -1
- package/build/@types/cim/components/ClusterDeployment/use-networking-formik.d.ts +4 -4
- package/build/@types/cim/components/ClusterDeployment/use-networking-formik.d.ts.map +1 -1
- package/build/@types/cim/components/Hypershift/DetailsPage/ConditionsTable.d.ts.map +1 -1
- package/build/@types/cim/components/Hypershift/DetailsPage/HostedClusterProgress.d.ts.map +1 -1
- package/build/@types/cim/components/Hypershift/DetailsPage/NodePoolsProgress.d.ts.map +1 -1
- package/build/@types/cim/components/Hypershift/utils/status.d.ts +2 -2
- package/build/@types/cim/components/Hypershift/utils/status.d.ts.map +1 -1
- package/build/@types/cim/components/InfraEnv/EnvironmentDetails.d.ts.map +1 -1
- package/build/@types/cim/components/InfraEnv/InfraEnvHostsTabAgentsWarning.d.ts.map +1 -1
- package/build/@types/cim/components/helpers/agentStatus.d.ts +1 -1
- package/build/@types/cim/components/helpers/agentStatus.d.ts.map +1 -1
- package/build/@types/cim/components/modals/CimConfiguration/CimConfigurationFormFields.d.ts.map +1 -1
- package/build/@types/cim/components/modals/CimConfiguration/CimConfigurationModal.d.ts.map +1 -1
- package/build/@types/cim/components/modals/CimConfiguration/persist.d.ts.map +1 -1
- package/build/@types/cim/components/modals/CimConfiguration/types.d.ts +1 -1
- package/build/@types/cim/components/modals/MassDeleteAgentModal.d.ts.map +1 -1
- package/build/@types/common/components/clusterConfiguration/DiscoveryTroubleshootingModal.d.ts.map +1 -1
- package/build/@types/common/components/clusterDetail/FinalizingProgress.d.ts +1 -1
- package/build/@types/common/components/clusterDetail/FinalizingProgress.d.ts.map +1 -1
- package/build/@types/common/components/clusterDetail/OperatorsProgressItem.d.ts.map +1 -1
- package/build/@types/common/components/clusterDetail/ProgressBarTexts.d.ts.map +1 -1
- package/build/@types/common/components/clusterWizard/ReviewValidations.d.ts.map +1 -1
- package/build/@types/common/components/clusterWizard/networkingSteps/AvailableSubnetsControl.d.ts +2 -1
- package/build/@types/common/components/clusterWizard/networkingSteps/AvailableSubnetsControl.d.ts.map +1 -1
- package/build/@types/common/components/clusterWizard/networkingSteps/StackTypeControlGroup.d.ts +2 -1
- package/build/@types/common/components/clusterWizard/networkingSteps/StackTypeControlGroup.d.ts.map +1 -1
- package/build/@types/common/components/clusterWizard/networkingSteps/VirtualIPControlGroup.d.ts.map +1 -1
- package/build/@types/common/components/hosts/HostPropertyValidationPopover.d.ts.map +1 -1
- package/build/@types/common/components/hosts/HostStatus.d.ts.map +1 -1
- package/build/@types/common/components/hosts/HostValidationGroups.d.ts.map +1 -1
- package/build/@types/common/components/hosts/Hostname.d.ts.map +1 -1
- package/build/@types/common/components/hosts/MassChangeHostnameModal.d.ts.map +1 -1
- package/build/@types/common/components/hosts/VMRebootConfigurationInfo.d.ts.map +1 -1
- package/build/@types/common/components/hosts/status.d.ts.map +1 -1
- package/build/@types/common/components/storage/DisksTable.d.ts.map +1 -1
- package/build/@types/common/components/storage/StorageUtils.d.ts +1 -1
- package/build/@types/common/components/storage/StorageUtils.d.ts.map +1 -1
- package/build/@types/common/components/ui/WizardNavItem.d.ts.map +1 -1
- package/build/@types/common/components/ui/formik/RemovableField.d.ts.map +1 -1
- package/build/@types/common/components/ui/formik/RichInputField.d.ts.map +1 -1
- package/build/@types/common/components/ui/formik/utils.d.ts +1 -0
- package/build/@types/common/components/ui/formik/utils.d.ts.map +1 -1
- package/build/@types/common/components/ui/index.d.ts +0 -1
- package/build/@types/common/components/ui/index.d.ts.map +1 -1
- package/build/@types/common/config/constants.d.ts +2 -2
- package/build/@types/common/config/constants.d.ts.map +1 -1
- package/build/@types/common/validationSchemas/addressValidation.d.ts.map +1 -1
- package/build/@types/common/validationSchemas/networkingValidation.d.ts +10 -0
- package/build/@types/common/validationSchemas/networkingValidation.d.ts.map +1 -1
- package/build/@types/ocm/components/clusterConfiguration/OcmOperatorProgressItem.d.ts.map +1 -1
- package/build/@types/ocm/components/clusterConfiguration/OpenshiftVersionHelperText.d.ts.map +1 -1
- package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.d.ts.map +1 -1
- package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/networkConfigurationValidation.d.ts.map +1 -1
- package/build/@types/ocm/components/clusterConfiguration/platformIntegration/PlatformIntegrationNote.d.ts.map +1 -1
- package/build/@types/ocm/components/clusterConfiguration/review/ReviewPreflightChecks.d.ts.map +1 -1
- package/build/@types/ocm/components/clusterDetail/HostInventoryExpandable.d.ts +1 -1
- package/build/@types/ocm/components/clusterDetail/HostInventoryExpandable.d.ts.map +1 -1
- package/build/@types/ocm/components/clusterDetail/OpenShiftVersionDetail.d.ts.map +1 -1
- package/build/@types/ocm/components/clusterDetail/ResetClusterModal.d.ts.map +1 -1
- package/build/@types/ocm/components/clusters/ClusterStatus.d.ts.map +1 -1
- package/build/@types/ocm/components/featureSupportLevels/ReviewClusterFeatureSupportLevels.d.ts.map +1 -1
- package/build/@types/ocm/components/ui/InfoLinkWithModal.d.ts.map +1 -1
- package/build/cjs/cim/components/Agent/BMHStatusInfo.js +4 -4
- package/build/cjs/cim/components/Agent/BMHStatusInfo.js.map +1 -1
- package/build/cjs/cim/components/Agent/MinimalHWRequirements.js +2 -2
- package/build/cjs/cim/components/Agent/MinimalHWRequirements.js.map +1 -1
- package/build/cjs/cim/components/ClusterDeployment/NetworkConfiguration.js +44 -5
- package/build/cjs/cim/components/ClusterDeployment/NetworkConfiguration.js.map +1 -1
- package/build/cjs/cim/components/ClusterDeployment/networkConfigurationValidation.js +27 -11
- package/build/cjs/cim/components/ClusterDeployment/networkConfigurationValidation.js.map +1 -1
- package/build/cjs/cim/components/ClusterDeployment/use-networking-formik.js +13 -18
- package/build/cjs/cim/components/ClusterDeployment/use-networking-formik.js.map +1 -1
- package/build/cjs/cim/components/Hypershift/DetailsPage/ConditionsTable.js +7 -6
- package/build/cjs/cim/components/Hypershift/DetailsPage/ConditionsTable.js.map +1 -1
- package/build/cjs/cim/components/Hypershift/DetailsPage/HostedClusterProgress.js +3 -2
- package/build/cjs/cim/components/Hypershift/DetailsPage/HostedClusterProgress.js.map +1 -1
- package/build/cjs/cim/components/Hypershift/DetailsPage/NodePoolsProgress.js +2 -2
- package/build/cjs/cim/components/Hypershift/DetailsPage/NodePoolsProgress.js.map +1 -1
- package/build/cjs/cim/components/Hypershift/utils/status.js +8 -7
- package/build/cjs/cim/components/Hypershift/utils/status.js.map +1 -1
- package/build/cjs/cim/components/InfraEnv/EnvironmentDetails.js +4 -4
- package/build/cjs/cim/components/InfraEnv/EnvironmentDetails.js.map +1 -1
- package/build/cjs/cim/components/InfraEnv/InfraEnvHostsTabAgentsWarning.js +3 -3
- package/build/cjs/cim/components/InfraEnv/InfraEnvHostsTabAgentsWarning.js.map +1 -1
- package/build/cjs/cim/components/helpers/agentStatus.js +3 -2
- package/build/cjs/cim/components/helpers/agentStatus.js.map +1 -1
- package/build/cjs/cim/components/modals/CimConfiguration/CimConfigurationFormFields.js +7 -3
- package/build/cjs/cim/components/modals/CimConfiguration/CimConfigurationFormFields.js.map +1 -1
- package/build/cjs/cim/components/modals/CimConfiguration/CimConfigurationModal.js +4 -3
- package/build/cjs/cim/components/modals/CimConfiguration/CimConfigurationModal.js.map +1 -1
- package/build/cjs/cim/components/modals/CimConfiguration/persist.js +7 -0
- package/build/cjs/cim/components/modals/CimConfiguration/persist.js.map +1 -1
- package/build/cjs/cim/components/modals/MassDeleteAgentModal.js +2 -2
- package/build/cjs/cim/components/modals/MassDeleteAgentModal.js.map +1 -1
- package/build/cjs/common/components/clusterConfiguration/DiscoveryTroubleshootingModal.js +2 -1
- package/build/cjs/common/components/clusterConfiguration/DiscoveryTroubleshootingModal.js.map +1 -1
- package/build/cjs/common/components/clusterDetail/FinalizingProgress.js +8 -7
- package/build/cjs/common/components/clusterDetail/FinalizingProgress.js.map +1 -1
- package/build/cjs/common/components/clusterDetail/OperatorsProgressItem.js +4 -4
- package/build/cjs/common/components/clusterDetail/OperatorsProgressItem.js.map +1 -1
- package/build/cjs/common/components/clusterDetail/ProgressBarTexts.js +5 -4
- package/build/cjs/common/components/clusterDetail/ProgressBarTexts.js.map +1 -1
- package/build/cjs/common/components/clusterWizard/ReviewValidations.js +7 -6
- package/build/cjs/common/components/clusterWizard/ReviewValidations.js.map +1 -1
- package/build/cjs/common/components/clusterWizard/networkingSteps/AvailableSubnetsControl.js +8 -2
- package/build/cjs/common/components/clusterWizard/networkingSteps/AvailableSubnetsControl.js.map +1 -1
- package/build/cjs/common/components/clusterWizard/networkingSteps/StackTypeControlGroup.js +29 -19
- package/build/cjs/common/components/clusterWizard/networkingSteps/StackTypeControlGroup.js.map +1 -1
- package/build/cjs/common/components/clusterWizard/networkingSteps/VirtualIPControlGroup.js +2 -2
- package/build/cjs/common/components/clusterWizard/networkingSteps/VirtualIPControlGroup.js.map +1 -1
- package/build/cjs/common/components/hosts/HostPropertyValidationPopover.js +6 -6
- package/build/cjs/common/components/hosts/HostPropertyValidationPopover.js.map +1 -1
- package/build/cjs/common/components/hosts/HostStatus.js +2 -1
- package/build/cjs/common/components/hosts/HostStatus.js.map +1 -1
- package/build/cjs/common/components/hosts/HostValidationGroups.js +6 -6
- package/build/cjs/common/components/hosts/HostValidationGroups.js.map +1 -1
- package/build/cjs/common/components/hosts/Hostname.js +4 -3
- package/build/cjs/common/components/hosts/Hostname.js.map +1 -1
- package/build/cjs/common/components/hosts/MassChangeHostnameModal.js +2 -2
- package/build/cjs/common/components/hosts/MassChangeHostnameModal.js.map +1 -1
- package/build/cjs/common/components/hosts/VMRebootConfigurationInfo.js +2 -1
- package/build/cjs/common/components/hosts/VMRebootConfigurationInfo.js.map +1 -1
- package/build/cjs/common/components/hosts/status.js +19 -13
- package/build/cjs/common/components/hosts/status.js.map +1 -1
- package/build/cjs/common/components/storage/DisksTable.js +4 -2
- package/build/cjs/common/components/storage/DisksTable.js.map +1 -1
- package/build/cjs/common/components/storage/StorageUtils.js +3 -2
- package/build/cjs/common/components/storage/StorageUtils.js.map +1 -1
- package/build/cjs/common/components/ui/WizardNavItem.js +2 -2
- package/build/cjs/common/components/ui/WizardNavItem.js.map +1 -1
- package/build/cjs/common/components/ui/formik/RemovableField.js +3 -3
- package/build/cjs/common/components/ui/formik/RemovableField.js.map +1 -1
- package/build/cjs/common/components/ui/formik/RichInputField.js +4 -4
- package/build/cjs/common/components/ui/formik/RichInputField.js.map +1 -1
- package/build/cjs/common/components/ui/formik/utils.js +5 -1
- package/build/cjs/common/components/ui/formik/utils.js.map +1 -1
- package/build/cjs/common/components/ui/index.js +1 -3
- package/build/cjs/common/components/ui/index.js.map +1 -1
- package/build/cjs/common/config/constants.js +9 -2
- package/build/cjs/common/config/constants.js.map +1 -1
- package/build/cjs/common/validationSchemas/addressValidation.js +16 -4
- package/build/cjs/common/validationSchemas/addressValidation.js.map +1 -1
- package/build/cjs/common/validationSchemas/networkingValidation.js +19 -1
- package/build/cjs/common/validationSchemas/networkingValidation.js.map +1 -1
- package/build/cjs/ocm/components/clusterConfiguration/OcmOperatorProgressItem.js +4 -4
- package/build/cjs/ocm/components/clusterConfiguration/OcmOperatorProgressItem.js.map +1 -1
- package/build/cjs/ocm/components/clusterConfiguration/OpenshiftVersionHelperText.js +5 -2
- package/build/cjs/ocm/components/clusterConfiguration/OpenshiftVersionHelperText.js.map +1 -1
- package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.js +6 -3
- package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.js.map +1 -1
- package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/networkConfigurationValidation.js +4 -4
- package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/networkConfigurationValidation.js.map +1 -1
- package/build/cjs/ocm/components/clusterConfiguration/platformIntegration/PlatformIntegrationNote.js +5 -3
- package/build/cjs/ocm/components/clusterConfiguration/platformIntegration/PlatformIntegrationNote.js.map +1 -1
- package/build/cjs/ocm/components/clusterConfiguration/review/ReviewPreflightChecks.js +11 -7
- package/build/cjs/ocm/components/clusterConfiguration/review/ReviewPreflightChecks.js.map +1 -1
- package/build/cjs/ocm/components/clusterDetail/HostInventoryExpandable.js +5 -4
- package/build/cjs/ocm/components/clusterDetail/HostInventoryExpandable.js.map +1 -1
- package/build/cjs/ocm/components/clusterDetail/OpenShiftVersionDetail.js +4 -3
- package/build/cjs/ocm/components/clusterDetail/OpenShiftVersionDetail.js.map +1 -1
- package/build/cjs/ocm/components/clusterDetail/ResetClusterModal.js +4 -2
- package/build/cjs/ocm/components/clusterDetail/ResetClusterModal.js.map +1 -1
- package/build/cjs/ocm/components/clusters/ClusterStatus.js +13 -7
- package/build/cjs/ocm/components/clusters/ClusterStatus.js.map +1 -1
- package/build/cjs/ocm/components/featureSupportLevels/ReviewClusterFeatureSupportLevels.js +7 -6
- package/build/cjs/ocm/components/featureSupportLevels/ReviewClusterFeatureSupportLevels.js.map +1 -1
- package/build/cjs/ocm/components/ui/InfoLinkWithModal.js +2 -2
- package/build/cjs/ocm/components/ui/InfoLinkWithModal.js.map +1 -1
- package/lib/cim/components/Agent/BMHStatusInfo.tsx +12 -4
- package/lib/cim/components/Agent/MinimalHWRequirements.tsx +4 -2
- package/lib/cim/components/ClusterDeployment/NetworkConfiguration.tsx +51 -3
- package/lib/cim/components/ClusterDeployment/networkConfigurationValidation.ts +22 -8
- package/lib/cim/components/ClusterDeployment/use-networking-formik.ts +14 -22
- package/lib/cim/components/Hypershift/DetailsPage/ConditionsTable.tsx +13 -7
- package/lib/cim/components/Hypershift/DetailsPage/HostedClusterProgress.tsx +8 -4
- package/lib/cim/components/Hypershift/DetailsPage/NodePoolsProgress.tsx +6 -2
- package/lib/cim/components/Hypershift/utils/status.tsx +20 -9
- package/lib/cim/components/InfraEnv/EnvironmentDetails.tsx +11 -4
- package/lib/cim/components/InfraEnv/InfraEnvHostsTabAgentsWarning.tsx +4 -6
- package/lib/cim/components/helpers/agentStatus.tsx +7 -3
- package/lib/cim/components/modals/CimConfiguration/CimConfigurationFormFields.tsx +7 -5
- package/lib/cim/components/modals/CimConfiguration/CimConfigurationModal.tsx +4 -3
- package/lib/cim/components/modals/CimConfiguration/persist.ts +11 -0
- package/lib/cim/components/modals/CimConfiguration/types.ts +1 -1
- package/lib/cim/components/modals/MassDeleteAgentModal.tsx +12 -5
- package/lib/common/components/clusterConfiguration/DiscoveryTroubleshootingModal.tsx +5 -2
- package/lib/common/components/clusterDetail/FinalizingProgress.tsx +21 -10
- package/lib/common/components/clusterDetail/OperatorsProgressItem.tsx +11 -5
- package/lib/common/components/clusterDetail/ProgressBarTexts.tsx +17 -5
- package/lib/common/components/clusterWizard/ReviewValidations.tsx +15 -6
- package/lib/common/components/clusterWizard/networkingSteps/AvailableSubnetsControl.tsx +8 -1
- package/lib/common/components/clusterWizard/networkingSteps/StackTypeControlGroup.tsx +37 -27
- package/lib/common/components/clusterWizard/networkingSteps/VirtualIPControlGroup.tsx +0 -2
- package/lib/common/components/hosts/HostPropertyValidationPopover.tsx +9 -5
- package/lib/common/components/hosts/HostStatus.tsx +14 -3
- package/lib/common/components/hosts/HostValidationGroups.tsx +9 -5
- package/lib/common/components/hosts/Hostname.tsx +7 -4
- package/lib/common/components/hosts/MassChangeHostnameModal.tsx +6 -2
- package/lib/common/components/hosts/VMRebootConfigurationInfo.tsx +12 -3
- package/lib/common/components/hosts/status.tsx +46 -13
- package/lib/common/components/storage/DisksTable.tsx +15 -4
- package/lib/common/components/storage/StorageUtils.tsx +6 -4
- package/lib/common/components/ui/WizardNavItem.tsx +4 -7
- package/lib/common/components/ui/formik/RemovableField.tsx +8 -4
- package/lib/common/components/ui/formik/RichInputField.tsx +10 -6
- package/lib/common/components/ui/formik/utils.ts +6 -0
- package/lib/common/components/ui/index.ts +0 -2
- package/lib/common/config/constants.ts +10 -1
- package/lib/common/validationSchemas/addressValidation.tsx +16 -11
- package/lib/common/validationSchemas/networkingValidation.tsx +39 -1
- package/lib/ocm/components/clusterConfiguration/OcmOperatorProgressItem.tsx +11 -5
- package/lib/ocm/components/clusterConfiguration/OpenshiftVersionHelperText.tsx +8 -7
- package/lib/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.tsx +8 -5
- package/lib/ocm/components/clusterConfiguration/networkConfiguration/networkConfigurationValidation.ts +6 -5
- package/lib/ocm/components/clusterConfiguration/platformIntegration/PlatformIntegrationNote.tsx +6 -3
- package/lib/ocm/components/clusterConfiguration/review/ReviewPreflightChecks.tsx +28 -15
- package/lib/ocm/components/clusterDetail/HostInventoryExpandable.tsx +11 -5
- package/lib/ocm/components/clusterDetail/OpenShiftVersionDetail.tsx +8 -5
- package/lib/ocm/components/clusterDetail/ResetClusterModal.tsx +6 -3
- package/lib/ocm/components/clusters/ClusterStatus.tsx +30 -8
- package/lib/ocm/components/featureSupportLevels/ReviewClusterFeatureSupportLevels.tsx +12 -8
- package/lib/ocm/components/ui/InfoLinkWithModal.tsx +4 -2
- package/package.json +3 -3
- package/build/@types/common/components/ui/UiIcon.d.ts +0 -11
- package/build/@types/common/components/ui/UiIcon.d.ts.map +0 -1
- package/build/cjs/common/components/ui/UiIcon.js +0 -11
- package/build/cjs/common/components/ui/UiIcon.js.map +0 -1
- package/lib/common/components/ui/UiIcon.tsx +0 -21
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
Form,
|
|
8
8
|
HelperText,
|
|
9
9
|
HelperTextItem,
|
|
10
|
+
Icon,
|
|
10
11
|
Modal,
|
|
11
12
|
ModalBody,
|
|
12
13
|
ModalFooter,
|
|
@@ -19,7 +20,6 @@ import {
|
|
|
19
20
|
} from '@patternfly/react-core';
|
|
20
21
|
import { Formik, useFormikContext } from 'formik';
|
|
21
22
|
import * as Yup from 'yup';
|
|
22
|
-
import { t_global_icon_color_status_info_default as blueInfoColor } from '@patternfly/react-tokens/dist/js/t_global_icon_color_status_info_default';
|
|
23
23
|
import { InfoCircleIcon } from '@patternfly/react-icons/dist/js/icons/info-circle-icon';
|
|
24
24
|
import { TFunction } from 'i18next';
|
|
25
25
|
|
|
@@ -235,7 +235,11 @@ const MassChangeHostnameForm = ({
|
|
|
235
235
|
>
|
|
236
236
|
<Button
|
|
237
237
|
variant="link"
|
|
238
|
-
icon={
|
|
238
|
+
icon={
|
|
239
|
+
<Icon status="info">
|
|
240
|
+
<InfoCircleIcon />
|
|
241
|
+
</Icon>
|
|
242
|
+
}
|
|
239
243
|
isInline
|
|
240
244
|
>
|
|
241
245
|
{t('ai:Not changeable')}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
Button,
|
|
4
|
+
ButtonVariant,
|
|
5
|
+
Popover,
|
|
6
|
+
Content,
|
|
7
|
+
ContentVariants,
|
|
8
|
+
Icon,
|
|
9
|
+
} from '@patternfly/react-core';
|
|
3
10
|
import { InfoCircleIcon } from '@patternfly/react-icons/dist/js/icons/info-circle-icon';
|
|
4
11
|
import { Trans } from 'react-i18next';
|
|
5
|
-
import { PrismCode
|
|
12
|
+
import { PrismCode } from '../../../common/components/ui';
|
|
6
13
|
import { useTranslation } from '../../hooks/use-translation-wrapper';
|
|
7
14
|
|
|
8
15
|
export const VMRebootConfigurationContent = () => {
|
|
@@ -43,7 +50,9 @@ const VMRebootConfigurationInfo = () => {
|
|
|
43
50
|
<Popover bodyContent={<VMRebootConfigurationContent />} minWidth="35rem">
|
|
44
51
|
<Button variant={ButtonVariant.link} isInline>
|
|
45
52
|
<>
|
|
46
|
-
<
|
|
53
|
+
<Icon size="sm">
|
|
54
|
+
<InfoCircleIcon />
|
|
55
|
+
</Icon>
|
|
47
56
|
|
|
48
57
|
</>
|
|
49
58
|
{t('ai:Check your VM reboot configuration')}
|
|
@@ -8,13 +8,10 @@ import { ExclamationTriangleIcon } from '@patternfly/react-icons/dist/js/icons/e
|
|
|
8
8
|
import { InProgressIcon } from '@patternfly/react-icons/dist/js/icons/in-progress-icon';
|
|
9
9
|
import { LinkIcon } from '@patternfly/react-icons/dist/js/icons/link-icon';
|
|
10
10
|
import { PendingIcon } from '@patternfly/react-icons/dist/js/icons/pending-icon';
|
|
11
|
-
import { t_global_icon_color_status_danger_default as dangerColor } from '@patternfly/react-tokens/dist/js/t_global_icon_color_status_danger_default';
|
|
12
|
-
import { t_global_icon_color_status_warning_default as warningColor } from '@patternfly/react-tokens/dist/js/t_global_icon_color_status_warning_default';
|
|
13
|
-
import { t_global_color_status_success_default as okColor } from '@patternfly/react-tokens/dist/js/t_global_color_status_success_default';
|
|
14
|
-
import { chart_color_blue_300 as blueColor } from '@patternfly/react-tokens/dist/js/chart_color_blue_300';
|
|
15
11
|
import { Host } from '@openshift-assisted/types/assisted-installer-service';
|
|
16
12
|
import { HostStatus } from './types';
|
|
17
13
|
import { TFunction } from 'i18next';
|
|
14
|
+
import { Icon } from '@patternfly/react-core';
|
|
18
15
|
|
|
19
16
|
export const hostStatus = (t: TFunction): HostStatus<Host['status'] | 'finalizing'> =>
|
|
20
17
|
Object.freeze({
|
|
@@ -85,7 +82,11 @@ export const hostStatus = (t: TFunction): HostStatus<Host['status'] | 'finalizin
|
|
|
85
82
|
key: 'insufficient-unbound',
|
|
86
83
|
title: t('ai:Insufficient'),
|
|
87
84
|
category: 'Discovery related',
|
|
88
|
-
icon:
|
|
85
|
+
icon: (
|
|
86
|
+
<Icon status="warning">
|
|
87
|
+
<ExclamationTriangleIcon />
|
|
88
|
+
</Icon>
|
|
89
|
+
),
|
|
89
90
|
details: t(
|
|
90
91
|
'ai:This host does not meet the minimum hardware or networking requirements and can not be included in the cluster.',
|
|
91
92
|
),
|
|
@@ -94,7 +95,11 @@ export const hostStatus = (t: TFunction): HostStatus<Host['status'] | 'finalizin
|
|
|
94
95
|
key: 'known-unbound',
|
|
95
96
|
title: t('ai:Available'),
|
|
96
97
|
category: 'Discovery related',
|
|
97
|
-
icon:
|
|
98
|
+
icon: (
|
|
99
|
+
<Icon status="info">
|
|
100
|
+
<ConnectedIcon />
|
|
101
|
+
</Icon>
|
|
102
|
+
),
|
|
98
103
|
details: t(
|
|
99
104
|
'ai:This host meets the minimum hardware and networking requirements and can be included in the cluster.',
|
|
100
105
|
),
|
|
@@ -125,7 +130,11 @@ export const hostStatus = (t: TFunction): HostStatus<Host['status'] | 'finalizin
|
|
|
125
130
|
key: 'known',
|
|
126
131
|
title: t('ai:Ready'),
|
|
127
132
|
category: 'Discovery related',
|
|
128
|
-
icon:
|
|
133
|
+
icon: (
|
|
134
|
+
<Icon status="success">
|
|
135
|
+
<CheckCircleIcon />
|
|
136
|
+
</Icon>
|
|
137
|
+
),
|
|
129
138
|
details: t(
|
|
130
139
|
'ai:This host meets the minimum hardware and networking requirements and will be included in the cluster.',
|
|
131
140
|
),
|
|
@@ -143,7 +152,11 @@ export const hostStatus = (t: TFunction): HostStatus<Host['status'] | 'finalizin
|
|
|
143
152
|
key: 'insufficient',
|
|
144
153
|
title: t('ai:Insufficient'),
|
|
145
154
|
category: 'Discovery related',
|
|
146
|
-
icon:
|
|
155
|
+
icon: (
|
|
156
|
+
<Icon status="warning">
|
|
157
|
+
<ExclamationTriangleIcon />
|
|
158
|
+
</Icon>
|
|
159
|
+
),
|
|
147
160
|
details: t(
|
|
148
161
|
'ai:This host does not meet the minimum hardware or networking requirements and will not be included in the cluster.',
|
|
149
162
|
),
|
|
@@ -186,14 +199,22 @@ export const hostStatus = (t: TFunction): HostStatus<Host['status'] | 'finalizin
|
|
|
186
199
|
key: 'installing-pending-user-action',
|
|
187
200
|
title: t('ai:Pending user action'),
|
|
188
201
|
category: 'Installation related',
|
|
189
|
-
icon:
|
|
202
|
+
icon: (
|
|
203
|
+
<Icon status="warning">
|
|
204
|
+
<ExclamationTriangleIcon />
|
|
205
|
+
</Icon>
|
|
206
|
+
),
|
|
190
207
|
details: t('ai:This host is pending user action'),
|
|
191
208
|
},
|
|
192
209
|
installed: {
|
|
193
210
|
key: 'installed',
|
|
194
211
|
title: t('ai:Installed'),
|
|
195
212
|
category: 'Installation related',
|
|
196
|
-
icon:
|
|
213
|
+
icon: (
|
|
214
|
+
<Icon status="success">
|
|
215
|
+
<CheckCircleIcon />
|
|
216
|
+
</Icon>
|
|
217
|
+
),
|
|
197
218
|
details: t('ai:This host completed its installation successfully.'),
|
|
198
219
|
},
|
|
199
220
|
cancelled: {
|
|
@@ -208,7 +229,11 @@ export const hostStatus = (t: TFunction): HostStatus<Host['status'] | 'finalizin
|
|
|
208
229
|
key: 'error',
|
|
209
230
|
title: t('ai:Error'),
|
|
210
231
|
category: 'Installation related',
|
|
211
|
-
icon:
|
|
232
|
+
icon: (
|
|
233
|
+
<Icon status="danger">
|
|
234
|
+
<ExclamationCircleIcon />
|
|
235
|
+
</Icon>
|
|
236
|
+
),
|
|
212
237
|
details: t('ai:This host failed its installation.'),
|
|
213
238
|
withProgress: true,
|
|
214
239
|
},
|
|
@@ -223,7 +248,11 @@ export const hostStatus = (t: TFunction): HostStatus<Host['status'] | 'finalizin
|
|
|
223
248
|
key: 'resetting-pending-user-action',
|
|
224
249
|
title: t('ai:Reboot required'),
|
|
225
250
|
category: 'Installation related',
|
|
226
|
-
icon:
|
|
251
|
+
icon: (
|
|
252
|
+
<Icon status="warning">
|
|
253
|
+
<ExclamationTriangleIcon />
|
|
254
|
+
</Icon>
|
|
255
|
+
),
|
|
227
256
|
details: t(
|
|
228
257
|
'ai:Host has already been booted from disk during the previous installation. To finish resetting the installation, boot the host into the discovery image',
|
|
229
258
|
),
|
|
@@ -238,7 +267,11 @@ export const hostStatus = (t: TFunction): HostStatus<Host['status'] | 'finalizin
|
|
|
238
267
|
key: 'added-to-existing-cluster',
|
|
239
268
|
title: t('ai:Installed'),
|
|
240
269
|
category: 'Installation related',
|
|
241
|
-
icon:
|
|
270
|
+
icon: (
|
|
271
|
+
<Icon status="success">
|
|
272
|
+
<CheckCircleIcon />
|
|
273
|
+
</Icon>
|
|
274
|
+
),
|
|
242
275
|
details: t('ai:This host completed its installation successfully.'),
|
|
243
276
|
},
|
|
244
277
|
});
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
Content,
|
|
4
|
+
ContentVariants,
|
|
5
|
+
Popover,
|
|
6
|
+
Alert,
|
|
7
|
+
AlertVariant,
|
|
8
|
+
Icon,
|
|
9
|
+
} from '@patternfly/react-core';
|
|
3
10
|
import { TableVariant, Thead, Tbody, Table, Th, Tr, Td } from '@patternfly/react-table';
|
|
4
11
|
import type { Disk, Host } from '@openshift-assisted/types/assisted-installer-service';
|
|
5
12
|
import type { WithTestID } from '../../types/index';
|
|
@@ -12,7 +19,7 @@ import FormatDiskCheckbox, {
|
|
|
12
19
|
isInDiskSkipFormattingList,
|
|
13
20
|
} from '../hosts/FormatDiskCheckbox';
|
|
14
21
|
import { fileSize } from '../../utils';
|
|
15
|
-
import { PopoverIcon
|
|
22
|
+
import { PopoverIcon } from '../ui';
|
|
16
23
|
import { useTranslation } from '../../hooks/use-translation-wrapper';
|
|
17
24
|
import { TFunction } from 'i18next';
|
|
18
25
|
|
|
@@ -100,7 +107,9 @@ const DiskName = ({
|
|
|
100
107
|
{isIndented && <span style={{ width: '1rem', display: 'inline-block' }} />}
|
|
101
108
|
{isInDiskSkipFormattingList(host, disk.id) && (
|
|
102
109
|
<Popover bodyContent={<SkipFormattingDisk />} minWidth="20rem" maxWidth="30rem">
|
|
103
|
-
<
|
|
110
|
+
<Icon size="sm" status="warning">
|
|
111
|
+
<ExclamationTriangleIcon />
|
|
112
|
+
</Icon>
|
|
104
113
|
</Popover>
|
|
105
114
|
)}
|
|
106
115
|
{' '}
|
|
@@ -115,7 +124,9 @@ const DiskName = ({
|
|
|
115
124
|
maxWidth="30rem"
|
|
116
125
|
data-testid="disk-limitations-popover"
|
|
117
126
|
>
|
|
118
|
-
<
|
|
127
|
+
<Icon size="sm" status="warning">
|
|
128
|
+
<ExclamationTriangleIcon />
|
|
129
|
+
</Icon>
|
|
119
130
|
</Popover>
|
|
120
131
|
</>
|
|
121
132
|
)}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { TFunction } from 'i18next';
|
|
3
|
-
import {
|
|
4
|
-
import { TableRow } from '../hosts/AITable';
|
|
5
|
-
import { Popover, Content, ContentVariants } from '@patternfly/react-core';
|
|
3
|
+
import { Popover, Content, ContentVariants, Icon } from '@patternfly/react-core';
|
|
6
4
|
import { ExclamationTriangleIcon } from '@patternfly/react-icons/dist/js/icons/exclamation-triangle-icon';
|
|
7
5
|
import { Host } from '@openshift-assisted/types/assisted-installer-service';
|
|
6
|
+
import { getHostRole, getInventory, RoleCell } from '../../index';
|
|
7
|
+
import { TableRow } from '../hosts/AITable';
|
|
8
8
|
|
|
9
9
|
const SkipFormattingDisks = () => (
|
|
10
10
|
<Content component={ContentVariants.p}>Some bootable disks will skip formatting</Content>
|
|
@@ -49,7 +49,9 @@ export const numberOfDisksColumn: TableRow<Host> = {
|
|
|
49
49
|
{' '}
|
|
50
50
|
{host.skipFormattingDisks && (
|
|
51
51
|
<Popover bodyContent={<SkipFormattingDisks />} minWidth="20rem" maxWidth="30rem">
|
|
52
|
-
<
|
|
52
|
+
<Icon size="sm" status="warning">
|
|
53
|
+
<ExclamationTriangleIcon />
|
|
54
|
+
</Icon>
|
|
53
55
|
</Popover>
|
|
54
56
|
)}
|
|
55
57
|
</>
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import React, { PropsWithChildren, ReactNode } from 'react';
|
|
2
|
-
import { WizardNavItem, WizardNavItemProps } from '@patternfly/react-core';
|
|
2
|
+
import { Icon, WizardNavItem, WizardNavItemProps } from '@patternfly/react-core';
|
|
3
3
|
import { ExclamationCircleIcon } from '@patternfly/react-icons/dist/js/icons/exclamation-circle-icon';
|
|
4
|
-
import UiIcon from './UiIcon';
|
|
5
4
|
|
|
6
5
|
const getNavItemContent = (
|
|
7
6
|
content: ReactNode,
|
|
@@ -13,11 +12,9 @@ const getNavItemContent = (
|
|
|
13
12
|
return (
|
|
14
13
|
<>
|
|
15
14
|
{content}
|
|
16
|
-
<
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
icon={<ExclamationCircleIcon />}
|
|
20
|
-
/>
|
|
15
|
+
<Icon status="danger" className="wizard-nav-item-warning-icon">
|
|
16
|
+
<ExclamationCircleIcon />
|
|
17
|
+
</Icon>
|
|
21
18
|
</>
|
|
22
19
|
);
|
|
23
20
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { Button, ButtonVariant, Tooltip, TooltipProps } from '@patternfly/react-core';
|
|
2
|
+
import { Button, ButtonVariant, Icon, Tooltip, TooltipProps } from '@patternfly/react-core';
|
|
3
3
|
import { MinusCircleIcon } from '@patternfly/react-icons/dist/js/icons/minus-circle-icon';
|
|
4
|
-
import './RemovableField.css';
|
|
5
4
|
import classnames from 'classnames';
|
|
6
|
-
|
|
5
|
+
|
|
6
|
+
import './RemovableField.css';
|
|
7
7
|
|
|
8
8
|
interface RemovableFieldProps {
|
|
9
9
|
onRemove: VoidFunction;
|
|
@@ -30,7 +30,11 @@ const RemovableField: React.FC<RemovableFieldProps & Omit<TooltipProps, 'content
|
|
|
30
30
|
distance={0}
|
|
31
31
|
content={
|
|
32
32
|
<Button
|
|
33
|
-
icon={
|
|
33
|
+
icon={
|
|
34
|
+
<Icon size="sm">
|
|
35
|
+
<MinusCircleIcon />
|
|
36
|
+
</Icon>
|
|
37
|
+
}
|
|
34
38
|
variant={ButtonVariant.plain}
|
|
35
39
|
onClick={onRemove}
|
|
36
40
|
data-testid={removeButtonDataTestId}
|
|
@@ -15,15 +15,13 @@ import {
|
|
|
15
15
|
FormHelperText,
|
|
16
16
|
HelperText,
|
|
17
17
|
ButtonVariant,
|
|
18
|
+
Icon,
|
|
18
19
|
} from '@patternfly/react-core';
|
|
19
20
|
import { CheckCircleIcon } from '@patternfly/react-icons/dist/js/icons/check-circle-icon';
|
|
20
21
|
import { CheckIcon } from '@patternfly/react-icons/dist/js/icons/check-icon';
|
|
21
22
|
import { ExclamationCircleIcon } from '@patternfly/react-icons/dist/js/icons/exclamation-circle-icon';
|
|
22
23
|
import { InfoCircleIcon } from '@patternfly/react-icons/dist/js/icons/info-circle-icon';
|
|
23
24
|
import { TimesIcon } from '@patternfly/react-icons/dist/js/icons/times-icon';
|
|
24
|
-
import { t_global_color_status_success_default as okColor } from '@patternfly/react-tokens/dist/js/t_global_color_status_success_default';
|
|
25
|
-
import { t_global_icon_color_status_danger_default as dangerColor } from '@patternfly/react-tokens/dist/js/t_global_icon_color_status_danger_default';
|
|
26
|
-
import { t_global_icon_color_status_info_default as blueInfoColor } from '@patternfly/react-tokens/dist/js/t_global_icon_color_status_info_default';
|
|
27
25
|
|
|
28
26
|
import { InputFieldProps as BaseInputProps } from './types';
|
|
29
27
|
import { getFieldId } from './utils';
|
|
@@ -164,11 +162,17 @@ const RichInputField: React.FC<RichInputFieldPropsProps> = React.forwardRef(
|
|
|
164
162
|
<Button
|
|
165
163
|
icon={
|
|
166
164
|
!isValid ? (
|
|
167
|
-
<
|
|
165
|
+
<Icon status="danger">
|
|
166
|
+
<ExclamationCircleIcon />
|
|
167
|
+
</Icon>
|
|
168
168
|
) : value ? (
|
|
169
|
-
<
|
|
169
|
+
<Icon status="success">
|
|
170
|
+
<CheckCircleIcon />
|
|
171
|
+
</Icon>
|
|
170
172
|
) : (
|
|
171
|
-
<
|
|
173
|
+
<Icon status="info">
|
|
174
|
+
<InfoCircleIcon />
|
|
175
|
+
</Icon>
|
|
172
176
|
)
|
|
173
177
|
}
|
|
174
178
|
variant={ButtonVariant.control}
|
|
@@ -126,6 +126,12 @@ export const allSubnetsIPv4 = (
|
|
|
126
126
|
return !!networks?.every((network) => network.cidr && Address4.isValid(network.cidr));
|
|
127
127
|
};
|
|
128
128
|
|
|
129
|
+
export const allSubnetsIPv6 = (
|
|
130
|
+
networks: (MachineNetwork | ClusterNetwork | ServiceNetwork)[] | undefined,
|
|
131
|
+
) => {
|
|
132
|
+
return !!networks?.every((network) => network.cidr && Address6.isValid(network.cidr));
|
|
133
|
+
};
|
|
134
|
+
|
|
129
135
|
export const labelsToArray = (labels: { [key in string]: string } = {}): string[] => {
|
|
130
136
|
const result: string[] = [];
|
|
131
137
|
for (const key in labels) {
|
|
@@ -28,5 +28,3 @@ export { default as ClusterEventsToolbar } from './ClusterEventsToolbar';
|
|
|
28
28
|
export { default as ModalProgress } from './ModalProgress';
|
|
29
29
|
export { default as ConfirmationModal } from './ConfirmationModal';
|
|
30
30
|
export { default as NoPermissionsError } from './NoPermissionsError';
|
|
31
|
-
|
|
32
|
-
export { default as UiIcon } from './UiIcon';
|
|
@@ -287,8 +287,10 @@ export const CLUSTER_DEFAULT_NETWORK_SETTINGS_IPV6 = {
|
|
|
287
287
|
export const CLUSTER_DEFAULT_NETWORK_SETTINGS: Pick<
|
|
288
288
|
ClusterDefaultConfig,
|
|
289
289
|
| 'clusterNetworksIpv4'
|
|
290
|
+
| 'clusterNetworksIpv6'
|
|
290
291
|
| 'clusterNetworksDualstack'
|
|
291
292
|
| 'serviceNetworksIpv4'
|
|
293
|
+
| 'serviceNetworksIpv6'
|
|
292
294
|
| 'serviceNetworksDualstack'
|
|
293
295
|
> = {
|
|
294
296
|
clusterNetworksIpv4: [
|
|
@@ -297,6 +299,12 @@ export const CLUSTER_DEFAULT_NETWORK_SETTINGS: Pick<
|
|
|
297
299
|
hostPrefix: CLUSTER_DEFAULT_NETWORK_SETTINGS_IPV4.clusterNetworkHostPrefix,
|
|
298
300
|
},
|
|
299
301
|
],
|
|
302
|
+
clusterNetworksIpv6: [
|
|
303
|
+
{
|
|
304
|
+
cidr: CLUSTER_DEFAULT_NETWORK_SETTINGS_IPV6.clusterNetworkCidr,
|
|
305
|
+
hostPrefix: CLUSTER_DEFAULT_NETWORK_SETTINGS_IPV6.clusterNetworkHostPrefix,
|
|
306
|
+
},
|
|
307
|
+
],
|
|
300
308
|
clusterNetworksDualstack: [
|
|
301
309
|
{
|
|
302
310
|
cidr: CLUSTER_DEFAULT_NETWORK_SETTINGS_IPV4.clusterNetworkCidr,
|
|
@@ -308,6 +316,7 @@ export const CLUSTER_DEFAULT_NETWORK_SETTINGS: Pick<
|
|
|
308
316
|
},
|
|
309
317
|
],
|
|
310
318
|
serviceNetworksIpv4: [{ cidr: CLUSTER_DEFAULT_NETWORK_SETTINGS_IPV4.serviceNetworkCidr }],
|
|
319
|
+
serviceNetworksIpv6: [{ cidr: CLUSTER_DEFAULT_NETWORK_SETTINGS_IPV6.serviceNetworkCidr }],
|
|
311
320
|
serviceNetworksDualstack: [
|
|
312
321
|
{ cidr: CLUSTER_DEFAULT_NETWORK_SETTINGS_IPV4.serviceNetworkCidr },
|
|
313
322
|
{ cidr: CLUSTER_DEFAULT_NETWORK_SETTINGS_IPV6.serviceNetworkCidr },
|
|
@@ -334,7 +343,7 @@ export const NO_SUBNET_SET = 'NO_SUBNET_SET';
|
|
|
334
343
|
export const NETWORK_TYPE_OVN = 'OVNKubernetes';
|
|
335
344
|
export const NETWORK_TYPE_SDN = 'OpenShiftSDN';
|
|
336
345
|
|
|
337
|
-
export const
|
|
346
|
+
export const SINGLE_STACK = 'singleStack';
|
|
338
347
|
export const DUAL_STACK = 'dualStack';
|
|
339
348
|
|
|
340
349
|
export const PREFIX_MAX_RESTRICTION = {
|
|
@@ -7,13 +7,7 @@ import { getAddress } from '../components/ui/formik/utils';
|
|
|
7
7
|
import { getSubnet } from '../components/clusterConfiguration/utils';
|
|
8
8
|
import { HostSubnets, NetworkConfigurationValues } from '../types';
|
|
9
9
|
import { IP_V4_ZERO, IP_V6_ZERO, MAC_REGEX } from './regexes';
|
|
10
|
-
import {
|
|
11
|
-
alwaysRequired,
|
|
12
|
-
getArrayIndexFromPath,
|
|
13
|
-
isIPorDN,
|
|
14
|
-
isIPv4Address,
|
|
15
|
-
isIPv6Address,
|
|
16
|
-
} from './utils';
|
|
10
|
+
import { getArrayIndexFromPath, isIPorDN, isIPv4Address, isIPv6Address } from './utils';
|
|
17
11
|
import { NO_SUBNET_SET } from '../config';
|
|
18
12
|
import { overlap } from 'cidr-tools';
|
|
19
13
|
import parseUrl from 'parse-url';
|
|
@@ -28,6 +22,7 @@ export const ipValidationSchema = (t: TFunction) =>
|
|
|
28
22
|
|
|
29
23
|
export const ipNoSuffixValidationSchema = (t: TFunction) =>
|
|
30
24
|
Yup.string().test('ip-validation-no-suffix', t('ai:Not a valid IP address'), (value?: string) => {
|
|
25
|
+
if (!value) return true;
|
|
31
26
|
const address = getAddress(value || '');
|
|
32
27
|
return !!address && address.address === address.addressMinusSuffix;
|
|
33
28
|
});
|
|
@@ -173,15 +168,25 @@ export const vipNoSuffixValidationSchema = (
|
|
|
173
168
|
}
|
|
174
169
|
if (apiVip === ingressVip) {
|
|
175
170
|
return this.createError({
|
|
176
|
-
message:
|
|
177
|
-
|
|
178
|
-
|
|
171
|
+
message:
|
|
172
|
+
index === 0
|
|
173
|
+
? t('ai:The primary Ingress and API IP addresses cannot be the same.')
|
|
174
|
+
: t('ai:The secondary Ingress and API IP addresses cannot be the same.'),
|
|
179
175
|
});
|
|
180
176
|
}
|
|
181
177
|
return true;
|
|
182
178
|
});
|
|
179
|
+
const requiredField = (message: string) =>
|
|
180
|
+
Yup.string().test('required-field', message, function (value?: string) {
|
|
181
|
+
const index = getArrayIndexFromPath(this.path || '');
|
|
182
|
+
const api1 = (values.apiVips?.[1]?.ip ?? '').toString().trim();
|
|
183
|
+
const ingress1 = (values.ingressVips?.[1]?.ip ?? '').toString().trim();
|
|
184
|
+
// Dual-stack: secondary VIPs (index 1) are optional; skip required when both are empty
|
|
185
|
+
if (index === 1 && api1 === '' && ingress1 === '') return true;
|
|
186
|
+
return !!value;
|
|
187
|
+
});
|
|
183
188
|
|
|
184
|
-
return
|
|
189
|
+
return requiredField(t('ai:Required field'))
|
|
185
190
|
.concat(ipNoSuffixValidationSchema(t))
|
|
186
191
|
.concat(vipFamilyMatchSchema)
|
|
187
192
|
.concat(vipRangeValidationSchema(hostSubnets, values, false, t))
|
|
@@ -13,7 +13,8 @@ import {
|
|
|
13
13
|
ipBlockValidationSchema,
|
|
14
14
|
} from './addressValidation';
|
|
15
15
|
import { isMajorMinorVersionEqualOrGreater } from '../utils';
|
|
16
|
-
import { allSubnetsIPv4 } from '../components/ui/formik/utils';
|
|
16
|
+
import { allSubnetsIPv4, allSubnetsIPv6 } from '../components/ui/formik/utils';
|
|
17
|
+
import { SINGLE_STACK } from '../config';
|
|
17
18
|
|
|
18
19
|
export const machineNetworksValidationSchema = Yup.array().of(
|
|
19
20
|
Yup.object({ cidr: hostSubnetValidationSchema, clusterId: Yup.string() }),
|
|
@@ -111,3 +112,40 @@ export const IPv4ValidationSchema = Yup.array().test(
|
|
|
111
112
|
`All network subnets must be IPv4.`,
|
|
112
113
|
(values?: (MachineNetwork | ClusterNetwork | ServiceNetwork)[]) => allSubnetsIPv4(values),
|
|
113
114
|
);
|
|
115
|
+
|
|
116
|
+
export const IPv6ValidationSchema = Yup.array().test(
|
|
117
|
+
'single-stack-ipv6',
|
|
118
|
+
'All network subnets must be IPv6.',
|
|
119
|
+
(values?: (MachineNetwork | ClusterNetwork | ServiceNetwork)[]) => allSubnetsIPv6(values),
|
|
120
|
+
);
|
|
121
|
+
|
|
122
|
+
export const clusterNetworksSchema = (
|
|
123
|
+
t: TFunction,
|
|
124
|
+
stackType: string,
|
|
125
|
+
primaryCidr: string | undefined,
|
|
126
|
+
openshiftVersion?: string,
|
|
127
|
+
) => {
|
|
128
|
+
const singleStackFamilySchema =
|
|
129
|
+
primaryCidr && isCIDR.v6(primaryCidr) ? IPv6ValidationSchema : IPv4ValidationSchema;
|
|
130
|
+
|
|
131
|
+
const stackFamilySchema =
|
|
132
|
+
stackType === SINGLE_STACK
|
|
133
|
+
? singleStackFamilySchema
|
|
134
|
+
: dualStackValidationSchema(t('ai:cluster network'), t, openshiftVersion);
|
|
135
|
+
return clusterNetworksValidationSchema(t).concat(stackFamilySchema);
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
export const serviceNetworksSchema = (
|
|
139
|
+
t: TFunction,
|
|
140
|
+
stackType: string,
|
|
141
|
+
primaryCidr: string | undefined,
|
|
142
|
+
openshiftVersion?: string,
|
|
143
|
+
) => {
|
|
144
|
+
const singleStackFamilySchema =
|
|
145
|
+
primaryCidr && isCIDR.v6(primaryCidr) ? IPv6ValidationSchema : IPv4ValidationSchema;
|
|
146
|
+
const stackFamilySchema =
|
|
147
|
+
stackType === SINGLE_STACK
|
|
148
|
+
? singleStackFamilySchema
|
|
149
|
+
: dualStackValidationSchema(t('ai:service network'), t, openshiftVersion);
|
|
150
|
+
return serviceNetworkValidationSchema(t).concat(stackFamilySchema);
|
|
151
|
+
};
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { Button, ButtonVariant, List, ListItem, Popover } from '@patternfly/react-core';
|
|
2
|
+
import { Button, ButtonVariant, Icon, List, ListItem, Popover } from '@patternfly/react-core';
|
|
3
3
|
import { CheckCircleIcon } from '@patternfly/react-icons/dist/js/icons/check-circle-icon';
|
|
4
4
|
import { ExclamationCircleIcon } from '@patternfly/react-icons/dist/js/icons/exclamation-circle-icon';
|
|
5
5
|
import { InProgressIcon } from '@patternfly/react-icons/dist/js/icons/in-progress-icon';
|
|
6
6
|
import { PendingIcon } from '@patternfly/react-icons/dist/js/icons/pending-icon';
|
|
7
|
-
import { t_global_icon_color_status_danger_default as dangerColor } from '@patternfly/react-tokens/dist/js/t_global_icon_color_status_danger_default';
|
|
8
|
-
import { t_global_color_status_success_default as okColor } from '@patternfly/react-tokens/dist/js/t_global_color_status_success_default';
|
|
9
7
|
import { pluralize } from 'humanize-plus';
|
|
10
8
|
import { TFunction } from 'i18next';
|
|
11
9
|
|
|
@@ -60,9 +58,17 @@ export function getOperatorsLabel(operators: MonitoredOperatorsList, t: TFunctio
|
|
|
60
58
|
export function getOperatorsIcon(status: OperatorStatus | 'pending') {
|
|
61
59
|
switch (status) {
|
|
62
60
|
case 'available':
|
|
63
|
-
return
|
|
61
|
+
return (
|
|
62
|
+
<Icon status="success">
|
|
63
|
+
<CheckCircleIcon />
|
|
64
|
+
</Icon>
|
|
65
|
+
);
|
|
64
66
|
case 'failed':
|
|
65
|
-
return
|
|
67
|
+
return (
|
|
68
|
+
<Icon status="danger">
|
|
69
|
+
<ExclamationCircleIcon />
|
|
70
|
+
</Icon>
|
|
71
|
+
);
|
|
66
72
|
case 'progressing':
|
|
67
73
|
return <InProgressIcon />;
|
|
68
74
|
default:
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
OpenshiftVersionOptionType,
|
|
5
|
-
UiIcon,
|
|
6
|
-
} from '../../../common';
|
|
2
|
+
import { Icon } from '@patternfly/react-core';
|
|
3
|
+
import { OPENSHIFT_LIFE_CYCLE_DATES_LINK, OpenshiftVersionOptionType } from '../../../common';
|
|
7
4
|
import { TFunction } from 'i18next';
|
|
8
5
|
import { ExclamationCircleIcon } from '@patternfly/react-icons/dist/js/icons/exclamation-circle-icon';
|
|
9
6
|
import { ExclamationTriangleIcon } from '@patternfly/react-icons/dist/js/icons/exclamation-triangle-icon';
|
|
@@ -29,7 +26,9 @@ export const getOpenshiftVersionHelperText = (
|
|
|
29
26
|
if (!versions.length && !isModal) {
|
|
30
27
|
return (
|
|
31
28
|
<>
|
|
32
|
-
<
|
|
29
|
+
<Icon status="danger" size="sm">
|
|
30
|
+
<ExclamationCircleIcon />
|
|
31
|
+
</Icon>
|
|
33
32
|
{t('ai:No release image is available.')}
|
|
34
33
|
</>
|
|
35
34
|
);
|
|
@@ -50,7 +49,9 @@ export const getOpenshiftVersionHelperText = (
|
|
|
50
49
|
}
|
|
51
50
|
return (
|
|
52
51
|
<>
|
|
53
|
-
<
|
|
52
|
+
<Icon status="warning">
|
|
53
|
+
<ExclamationTriangleIcon />
|
|
54
|
+
</Icon>
|
|
54
55
|
|
|
55
56
|
{messageSelectedVersion}
|
|
56
57
|
<OpenShiftLifeCycleDatesLink />
|
package/lib/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.tsx
CHANGED
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
getFormikErrorFields,
|
|
10
10
|
getHostSubnets,
|
|
11
11
|
HostSubnets,
|
|
12
|
-
|
|
12
|
+
SINGLE_STACK,
|
|
13
13
|
isSNO,
|
|
14
14
|
LoadingState,
|
|
15
15
|
NetworkConfigurationValues,
|
|
@@ -236,9 +236,13 @@ const NetworkConfigurationPage = ({ cluster }: { cluster: Cluster }) => {
|
|
|
236
236
|
const isMultiNodeCluster = !isSNO(cluster);
|
|
237
237
|
const isUserManagedNetworking = values.managedNetworkingType === 'userManaged';
|
|
238
238
|
|
|
239
|
+
// Only send VIPs that have a non-empty IP;
|
|
240
|
+
const apiVips = (values.apiVips || []).filter((v) => (v?.ip ?? '').trim() !== '');
|
|
241
|
+
const ingressVips = (values.ingressVips || []).filter((v) => (v?.ip ?? '').trim() !== '');
|
|
242
|
+
|
|
239
243
|
const params: V2ClusterUpdateParams = {
|
|
240
|
-
apiVips
|
|
241
|
-
ingressVips
|
|
244
|
+
apiVips,
|
|
245
|
+
ingressVips,
|
|
242
246
|
sshPublicKey: values.sshPublicKey,
|
|
243
247
|
vipDhcpAllocation: values.vipDhcpAllocation,
|
|
244
248
|
networkType: values.networkType,
|
|
@@ -247,7 +251,6 @@ const NetworkConfigurationPage = ({ cluster }: { cluster: Cluster }) => {
|
|
|
247
251
|
serviceNetworks: values.serviceNetworks,
|
|
248
252
|
userManagedNetworking: isUserManagedNetworking,
|
|
249
253
|
};
|
|
250
|
-
|
|
251
254
|
if (params.userManagedNetworking) {
|
|
252
255
|
params.apiVips = [];
|
|
253
256
|
params.ingressVips = [];
|
|
@@ -259,7 +262,7 @@ const NetworkConfigurationPage = ({ cluster }: { cluster: Cluster }) => {
|
|
|
259
262
|
if (values.vipDhcpAllocation) {
|
|
260
263
|
delete params.apiVips;
|
|
261
264
|
delete params.ingressVips;
|
|
262
|
-
} else if (values.stackType ===
|
|
265
|
+
} else if (values.stackType === SINGLE_STACK) {
|
|
263
266
|
// The API will rebuild the default machineNetwork
|
|
264
267
|
params.machineNetworks = [];
|
|
265
268
|
}
|