@openshift-assisted/ui-lib 2.56.1 → 2.56.3
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/common/api/assisted-service/OfflineOpenshiftVersionsAPI.d.ts +7 -0
- package/build/@types/common/api/assisted-service/OfflineOpenshiftVersionsAPI.d.ts.map +1 -0
- package/build/@types/common/api/assisted-service/index.d.ts +1 -0
- package/build/@types/common/api/assisted-service/index.d.ts.map +1 -1
- package/build/@types/common/components/ui/OpenShiftVersionDropdown.d.ts +3 -2
- package/build/@types/common/components/ui/OpenShiftVersionDropdown.d.ts.map +1 -1
- package/build/@types/common/config/constants.d.ts.map +1 -1
- package/build/@types/ocm/components/wizard/NewClusterWizard.d.ts.map +1 -1
- package/build/@types/ocm/components/wizard/clusterWizardContext/ClusterWizardContext.d.ts.map +1 -1
- package/build/@types/ocm/components/wizard/clusterWizardContext/ClusterWizardContextProvider.d.ts +1 -1
- package/build/@types/ocm/components/wizard/clusterWizardContext/ClusterWizardContextProvider.d.ts.map +1 -1
- package/build/@types/ocm/components/wizard/clusterWizardContext/utils.d.ts +7 -0
- package/build/@types/ocm/components/wizard/clusterWizardContext/utils.d.ts.map +1 -0
- package/build/@types/ocm/components/wizard/steps/clusterDetails/ClusterDetailsForm.d.ts.map +1 -1
- package/build/@types/ocm/components/wizard/steps/disconnected/BasicStep.d.ts +1 -1
- package/build/@types/ocm/components/wizard/steps/disconnected/BasicStep.d.ts.map +1 -1
- package/build/@types/ocm/components/wizard/steps/disconnected/DisconnectedReviewStep.d.ts.map +1 -1
- package/build/@types/ocm/components/wizard/steps/disconnected/DisconnectedStaticIp.d.ts +4 -0
- package/build/@types/ocm/components/wizard/steps/disconnected/DisconnectedStaticIp.d.ts.map +1 -0
- package/build/@types/ocm/components/wizard/steps/disconnected/InstallDisconnectedSwitch.d.ts.map +1 -1
- package/build/@types/ocm/components/wizard/steps/disconnected/OptionalConfigurationsStep.d.ts.map +1 -1
- package/build/@types/ocm/components/wizard/steps/disconnected/index.d.ts +1 -0
- package/build/@types/ocm/components/wizard/steps/disconnected/index.d.ts.map +1 -1
- package/build/@types/ocm/components/wizard/steps/staticIp/StaticIp.d.ts +1 -1
- package/build/@types/ocm/components/wizard/steps/staticIp/StaticIp.d.ts.map +1 -1
- package/build/@types/ocm/components/wizard/steps/staticIp/commonValidationSchemas.d.ts +6 -1
- package/build/@types/ocm/components/wizard/steps/staticIp/commonValidationSchemas.d.ts.map +1 -1
- package/build/@types/ocm/components/wizard/steps/staticIp/components/FormViewNetworkWide/FormViewNetworkWide.d.ts.map +1 -1
- package/build/@types/ocm/components/wizard/steps/staticIp/components/FormViewNetworkWide/FormViewNetworkWideFields.d.ts.map +1 -1
- package/build/@types/ocm/components/wizard/steps/staticIp/components/FormViewNetworkWide/disconnectedNetworkWideValidationSchema.d.ts +24 -0
- package/build/@types/ocm/components/wizard/steps/staticIp/components/FormViewNetworkWide/disconnectedNetworkWideValidationSchema.d.ts.map +1 -0
- package/build/@types/ocm/components/wizard/steps/staticIp/components/FormViewNetworkWide/formViewNetworkWideValidationSchema.d.ts +46 -1
- package/build/@types/ocm/components/wizard/steps/staticIp/components/FormViewNetworkWide/formViewNetworkWideValidationSchema.d.ts.map +1 -1
- package/build/@types/ocm/components/wizard/steps/staticIp/components/StaticIpPage.d.ts.map +1 -1
- package/build/@types/ocm/components/wizard/steps/staticIp/data/dataTypes.d.ts +1 -1
- package/build/@types/ocm/components/wizard/steps/staticIp/data/dataTypes.d.ts.map +1 -1
- package/build/@types/ocm/components/wizard/steps/staticIp/data/disconnectedNetworkWide.d.ts +8 -0
- package/build/@types/ocm/components/wizard/steps/staticIp/data/disconnectedNetworkWide.d.ts.map +1 -0
- package/build/@types/ocm/components/wizard/steps/staticIp/data/formDataFromInfraEnvField.d.ts.map +1 -1
- package/build/@types/ocm/components/wizard/steps/staticIp/data/fromInfraEnv.d.ts +2 -0
- package/build/@types/ocm/components/wizard/steps/staticIp/data/fromInfraEnv.d.ts.map +1 -1
- package/build/@types/ocm/components/wizard/steps/staticIp/data/index.d.ts +1 -0
- package/build/@types/ocm/components/wizard/steps/staticIp/data/index.d.ts.map +1 -1
- package/build/@types/ocm/components/wizard/steps/staticIp/data/nmstateYaml.d.ts +1 -0
- package/build/@types/ocm/components/wizard/steps/staticIp/data/nmstateYaml.d.ts.map +1 -1
- package/build/@types/ocm/components/wizard/steps/staticIp/data/protocolVersion.d.ts +2 -2
- package/build/@types/ocm/components/wizard/steps/staticIp/data/protocolVersion.d.ts.map +1 -1
- package/build/@types/ocm/components/wizard/wizardComponents/ClusterWizardNavigation.d.ts +7 -0
- package/build/@types/ocm/components/wizard/wizardComponents/ClusterWizardNavigation.d.ts.map +1 -1
- package/build/@types/ocm/services/apis/index.d.ts +1 -1
- package/build/@types/ocm/services/apis/index.d.ts.map +1 -1
- package/build/cjs/common/api/assisted-service/OfflineOpenshiftVersionsAPI.js +13 -0
- package/build/cjs/common/api/assisted-service/OfflineOpenshiftVersionsAPI.js.map +1 -0
- package/build/cjs/common/api/assisted-service/index.js +3 -1
- package/build/cjs/common/api/assisted-service/index.js.map +1 -1
- package/build/cjs/common/components/clusterWizard/ClusterWizardStep.css +9 -0
- package/build/cjs/common/components/ui/OpenShiftVersionDropdown.js +5 -5
- package/build/cjs/common/components/ui/OpenShiftVersionDropdown.js.map +1 -1
- package/build/cjs/common/config/constants.js +1 -0
- package/build/cjs/common/config/constants.js.map +1 -1
- package/build/cjs/common/validationSchemas/addressValidation.js +2 -2
- package/build/cjs/common/validationSchemas/addressValidation.js.map +1 -1
- package/build/cjs/ocm/components/wizard/NewClusterWizard.js +4 -0
- package/build/cjs/ocm/components/wizard/NewClusterWizard.js.map +1 -1
- package/build/cjs/ocm/components/wizard/clusterWizardContext/ClusterWizardContext.js.map +1 -1
- package/build/cjs/ocm/components/wizard/clusterWizardContext/ClusterWizardContextProvider.js +62 -62
- package/build/cjs/ocm/components/wizard/clusterWizardContext/ClusterWizardContextProvider.js.map +1 -1
- package/build/cjs/ocm/components/wizard/clusterWizardContext/utils.js +61 -0
- package/build/cjs/ocm/components/wizard/clusterWizardContext/utils.js.map +1 -0
- package/build/cjs/ocm/components/wizard/steps/clusterDetails/ClusterDetailsForm.js +1 -3
- package/build/cjs/ocm/components/wizard/steps/clusterDetails/ClusterDetailsForm.js.map +1 -1
- package/build/cjs/ocm/components/wizard/steps/disconnected/BasicStep.js +148 -11
- package/build/cjs/ocm/components/wizard/steps/disconnected/BasicStep.js.map +1 -1
- package/build/cjs/ocm/components/wizard/steps/disconnected/DisconnectedReviewStep.js +23 -12
- package/build/cjs/ocm/components/wizard/steps/disconnected/DisconnectedReviewStep.js.map +1 -1
- package/build/cjs/ocm/components/wizard/steps/disconnected/DisconnectedStaticIp.js +26 -0
- package/build/cjs/ocm/components/wizard/steps/disconnected/DisconnectedStaticIp.js.map +1 -0
- package/build/cjs/ocm/components/wizard/steps/disconnected/InstallDisconnectedSwitch.js +1 -1
- package/build/cjs/ocm/components/wizard/steps/disconnected/InstallDisconnectedSwitch.js.map +1 -1
- package/build/cjs/ocm/components/wizard/steps/disconnected/OptionalConfigurationsStep.js +87 -56
- package/build/cjs/ocm/components/wizard/steps/disconnected/OptionalConfigurationsStep.js.map +1 -1
- package/build/cjs/ocm/components/wizard/steps/disconnected/index.js +1 -0
- package/build/cjs/ocm/components/wizard/steps/disconnected/index.js.map +1 -1
- package/build/cjs/ocm/components/wizard/steps/staticIp/StaticIp.js.map +1 -1
- package/build/cjs/ocm/components/wizard/steps/staticIp/commonValidationSchemas.js +49 -12
- package/build/cjs/ocm/components/wizard/steps/staticIp/commonValidationSchemas.js.map +1 -1
- package/build/cjs/ocm/components/wizard/steps/staticIp/components/FormViewNetworkWide/FormViewNetworkWide.js +13 -4
- package/build/cjs/ocm/components/wizard/steps/staticIp/components/FormViewNetworkWide/FormViewNetworkWide.js.map +1 -1
- package/build/cjs/ocm/components/wizard/steps/staticIp/components/FormViewNetworkWide/FormViewNetworkWideFields.js +96 -4
- package/build/cjs/ocm/components/wizard/steps/staticIp/components/FormViewNetworkWide/FormViewNetworkWideFields.js.map +1 -1
- package/build/cjs/ocm/components/wizard/steps/staticIp/components/FormViewNetworkWide/disconnectedNetworkWideValidationSchema.js +70 -0
- package/build/cjs/ocm/components/wizard/steps/staticIp/components/FormViewNetworkWide/disconnectedNetworkWideValidationSchema.js.map +1 -0
- package/build/cjs/ocm/components/wizard/steps/staticIp/components/FormViewNetworkWide/formViewNetworkWideValidationSchema.js +19 -9
- package/build/cjs/ocm/components/wizard/steps/staticIp/components/FormViewNetworkWide/formViewNetworkWideValidationSchema.js.map +1 -1
- package/build/cjs/ocm/components/wizard/steps/staticIp/components/StaticIpPage.js +8 -2
- package/build/cjs/ocm/components/wizard/steps/staticIp/components/StaticIpPage.js.map +1 -1
- package/build/cjs/ocm/components/wizard/steps/staticIp/data/disconnectedNetworkWide.js +55 -0
- package/build/cjs/ocm/components/wizard/steps/staticIp/data/disconnectedNetworkWide.js.map +1 -0
- package/build/cjs/ocm/components/wizard/steps/staticIp/data/formDataFromInfraEnvField.js +5 -1
- package/build/cjs/ocm/components/wizard/steps/staticIp/data/formDataFromInfraEnvField.js.map +1 -1
- package/build/cjs/ocm/components/wizard/steps/staticIp/data/fromInfraEnv.js +48 -1
- package/build/cjs/ocm/components/wizard/steps/staticIp/data/fromInfraEnv.js.map +1 -1
- package/build/cjs/ocm/components/wizard/steps/staticIp/data/index.js +1 -0
- package/build/cjs/ocm/components/wizard/steps/staticIp/data/index.js.map +1 -1
- package/build/cjs/ocm/components/wizard/steps/staticIp/data/nmstateYaml.js +12 -1
- package/build/cjs/ocm/components/wizard/steps/staticIp/data/nmstateYaml.js.map +1 -1
- package/build/cjs/ocm/components/wizard/steps/staticIp/data/protocolVersion.js +9 -7
- package/build/cjs/ocm/components/wizard/steps/staticIp/data/protocolVersion.js.map +1 -1
- package/build/cjs/ocm/components/wizard/wizardComponents/ClusterWizardNavigation.js +31 -20
- package/build/cjs/ocm/components/wizard/wizardComponents/ClusterWizardNavigation.js.map +1 -1
- package/build/cjs/ocm/services/apis/index.js +2 -1
- package/build/cjs/ocm/services/apis/index.js.map +1 -1
- package/lib/common/api/assisted-service/OfflineOpenshiftVersionsAPI.ts +14 -0
- package/lib/common/api/assisted-service/index.ts +1 -0
- package/lib/common/components/clusterWizard/ClusterWizardStep.css +9 -0
- package/lib/common/components/ui/OpenShiftVersionDropdown.tsx +13 -8
- package/lib/common/config/constants.ts +1 -0
- package/lib/common/validationSchemas/_validationSchemas.test.ts +1 -1
- package/lib/common/validationSchemas/addressValidation.tsx +2 -2
- package/lib/ocm/components/wizard/NewClusterWizard.tsx +5 -0
- package/lib/ocm/components/wizard/clusterWizardContext/ClusterWizardContext.tsx +1 -1
- package/lib/ocm/components/wizard/clusterWizardContext/ClusterWizardContextProvider.tsx +63 -85
- package/lib/ocm/components/wizard/clusterWizardContext/utils.ts +73 -0
- package/lib/ocm/components/wizard/steps/clusterDetails/ClusterDetailsForm.tsx +0 -5
- package/lib/ocm/components/wizard/steps/disconnected/BasicStep.tsx +251 -16
- package/lib/ocm/components/wizard/steps/disconnected/DisconnectedReviewStep.tsx +47 -20
- package/lib/ocm/components/wizard/steps/disconnected/DisconnectedStaticIp.tsx +29 -0
- package/lib/ocm/components/wizard/steps/disconnected/InstallDisconnectedSwitch.tsx +1 -0
- package/lib/ocm/components/wizard/steps/disconnected/OptionalConfigurationsStep.tsx +137 -69
- package/lib/ocm/components/wizard/steps/disconnected/index.tsx +1 -0
- package/lib/ocm/components/wizard/steps/staticIp/StaticIp.tsx +1 -1
- package/lib/ocm/components/wizard/steps/staticIp/commonValidationSchemas.tsx +42 -3
- package/lib/ocm/components/wizard/steps/staticIp/components/FormViewNetworkWide/FormViewNetworkWide.tsx +15 -4
- package/lib/ocm/components/wizard/steps/staticIp/components/FormViewNetworkWide/FormViewNetworkWideFields.tsx +232 -14
- package/lib/ocm/components/wizard/steps/staticIp/components/FormViewNetworkWide/disconnectedNetworkWideValidationSchema.tsx +98 -0
- package/lib/ocm/components/wizard/steps/staticIp/components/FormViewNetworkWide/formViewNetworkWideValidationSchema.tsx +14 -5
- package/lib/ocm/components/wizard/steps/staticIp/components/StaticIpPage.tsx +8 -3
- package/lib/ocm/components/wizard/steps/staticIp/data/dataTypes.ts +1 -1
- package/lib/ocm/components/wizard/steps/staticIp/data/disconnectedNetworkWide.ts +81 -0
- package/lib/ocm/components/wizard/steps/staticIp/data/formDataFromInfraEnvField.ts +6 -2
- package/lib/ocm/components/wizard/steps/staticIp/data/fromInfraEnv.ts +57 -2
- package/lib/ocm/components/wizard/steps/staticIp/data/index.tsx +1 -0
- package/lib/ocm/components/wizard/steps/staticIp/data/nmstateYaml.ts +16 -0
- package/lib/ocm/components/wizard/steps/staticIp/data/protocolVersion.ts +9 -7
- package/lib/ocm/components/wizard/utils/_wizardTransition.test.ts +60 -1
- package/lib/ocm/components/wizard/wizardComponents/ClusterWizardNavigation.tsx +39 -16
- package/lib/ocm/services/apis/index.ts +1 -0
- package/package.json +3 -3
|
@@ -2,8 +2,6 @@ import * as React from 'react';
|
|
|
2
2
|
import { saveAs } from 'file-saver';
|
|
3
3
|
import { useNavigate } from 'react-router';
|
|
4
4
|
import {
|
|
5
|
-
Split,
|
|
6
|
-
SplitItem,
|
|
7
5
|
Alert,
|
|
8
6
|
Grid,
|
|
9
7
|
DescriptionList,
|
|
@@ -18,7 +16,6 @@ import {
|
|
|
18
16
|
} from '@patternfly/react-core';
|
|
19
17
|
import {
|
|
20
18
|
ClusterWizardStep,
|
|
21
|
-
TechnologyPreview,
|
|
22
19
|
PULL_SECRET_INFO_LINK,
|
|
23
20
|
singleClusterOperators,
|
|
24
21
|
WithErrorBoundary,
|
|
@@ -29,11 +26,12 @@ import {
|
|
|
29
26
|
} from '../../../../../common';
|
|
30
27
|
import { ClusterWizardFooter, ClusterWizardNavigation } from '../../wizardComponents';
|
|
31
28
|
import { useClusterWizardContext } from '../../clusterWizardContext';
|
|
32
|
-
|
|
29
|
+
|
|
30
|
+
const opSpecs = getOperatorSpecs(() => undefined, true);
|
|
33
31
|
|
|
34
32
|
export const DisconnectedReviewStep = () => {
|
|
35
33
|
const { moveBack, disconnectedInfraEnv } = useClusterWizardContext();
|
|
36
|
-
const
|
|
34
|
+
const openshiftVersion = disconnectedInfraEnv?.openshiftVersion;
|
|
37
35
|
const navigate = useNavigate();
|
|
38
36
|
|
|
39
37
|
return (
|
|
@@ -52,23 +50,14 @@ export const DisconnectedReviewStep = () => {
|
|
|
52
50
|
>
|
|
53
51
|
<WithErrorBoundary title="Failed to load Review step">
|
|
54
52
|
<Grid hasGutter>
|
|
55
|
-
<
|
|
56
|
-
<SplitItem>
|
|
57
|
-
<Content component="h2">Review and download ISO</Content>
|
|
58
|
-
</SplitItem>
|
|
59
|
-
<SplitItem>
|
|
60
|
-
<TechnologyPreview />
|
|
61
|
-
</SplitItem>
|
|
62
|
-
</Split>
|
|
53
|
+
<Content component="h2">Review and download ISO</Content>
|
|
63
54
|
<Alert isInline variant="info" title="ISO boot instructions">
|
|
64
55
|
<List component={ListComponent.ol} type={OrderType.number}>
|
|
65
56
|
<ListItem>Download the ISO.</ListItem>
|
|
66
57
|
<ListItem>
|
|
67
58
|
Boot your cluster's machines from this ISO and{' '}
|
|
68
59
|
<ExternalLink
|
|
69
|
-
href={getDisconnectedDocsLink(
|
|
70
|
-
getMajorMinorVersion(DISCONNECTED_OPENSHIFT_VERSION),
|
|
71
|
-
)}
|
|
60
|
+
href={getDisconnectedDocsLink(getMajorMinorVersion(openshiftVersion))}
|
|
72
61
|
>
|
|
73
62
|
follow instructions
|
|
74
63
|
</ExternalLink>
|
|
@@ -93,10 +82,48 @@ export const DisconnectedReviewStep = () => {
|
|
|
93
82
|
<DescriptionList isHorizontal>
|
|
94
83
|
<DescriptionListGroup>
|
|
95
84
|
<DescriptionListTerm>OpenShift version</DescriptionListTerm>
|
|
96
|
-
<DescriptionListDescription>
|
|
97
|
-
{disconnectedInfraEnv?.openshiftVersion ?? DISCONNECTED_OPENSHIFT_VERSION}
|
|
98
|
-
</DescriptionListDescription>
|
|
85
|
+
<DescriptionListDescription>{openshiftVersion}</DescriptionListDescription>
|
|
99
86
|
</DescriptionListGroup>
|
|
87
|
+
{disconnectedInfraEnv?.rendezvousIp && (
|
|
88
|
+
<DescriptionListGroup>
|
|
89
|
+
<DescriptionListTerm>Rendezvous IP</DescriptionListTerm>
|
|
90
|
+
<DescriptionListDescription>
|
|
91
|
+
{disconnectedInfraEnv.rendezvousIp}
|
|
92
|
+
</DescriptionListDescription>
|
|
93
|
+
</DescriptionListGroup>
|
|
94
|
+
)}
|
|
95
|
+
{disconnectedInfraEnv?.proxy?.httpProxy && (
|
|
96
|
+
<DescriptionListGroup>
|
|
97
|
+
<DescriptionListTerm>HTTP proxy</DescriptionListTerm>
|
|
98
|
+
<DescriptionListDescription>
|
|
99
|
+
{disconnectedInfraEnv.proxy.httpProxy}
|
|
100
|
+
</DescriptionListDescription>
|
|
101
|
+
</DescriptionListGroup>
|
|
102
|
+
)}
|
|
103
|
+
{disconnectedInfraEnv?.proxy?.httpsProxy && (
|
|
104
|
+
<DescriptionListGroup>
|
|
105
|
+
<DescriptionListTerm>HTTPS proxy</DescriptionListTerm>
|
|
106
|
+
<DescriptionListDescription>
|
|
107
|
+
{disconnectedInfraEnv.proxy.httpsProxy}
|
|
108
|
+
</DescriptionListDescription>
|
|
109
|
+
</DescriptionListGroup>
|
|
110
|
+
)}
|
|
111
|
+
{disconnectedInfraEnv?.proxy?.noProxy && (
|
|
112
|
+
<DescriptionListGroup>
|
|
113
|
+
<DescriptionListTerm>No proxy</DescriptionListTerm>
|
|
114
|
+
<DescriptionListDescription>
|
|
115
|
+
{disconnectedInfraEnv.proxy.noProxy}
|
|
116
|
+
</DescriptionListDescription>
|
|
117
|
+
</DescriptionListGroup>
|
|
118
|
+
)}
|
|
119
|
+
{disconnectedInfraEnv?.ntpSources && (
|
|
120
|
+
<DescriptionListGroup>
|
|
121
|
+
<DescriptionListTerm>NTP sources</DescriptionListTerm>
|
|
122
|
+
<DescriptionListDescription>
|
|
123
|
+
{disconnectedInfraEnv.ntpSources}
|
|
124
|
+
</DescriptionListDescription>
|
|
125
|
+
</DescriptionListGroup>
|
|
126
|
+
)}
|
|
100
127
|
<DescriptionListGroup>
|
|
101
128
|
<DescriptionListTerm>CPU architecture</DescriptionListTerm>
|
|
102
129
|
<DescriptionListDescription>
|
|
@@ -105,7 +132,7 @@ export const DisconnectedReviewStep = () => {
|
|
|
105
132
|
</DescriptionListGroup>
|
|
106
133
|
<DescriptionListGroup>
|
|
107
134
|
<DescriptionListTerm>ISO size</DescriptionListTerm>
|
|
108
|
-
<DescriptionListDescription>approx.
|
|
135
|
+
<DescriptionListDescription>approx. 60+GB</DescriptionListDescription>
|
|
109
136
|
</DescriptionListGroup>
|
|
110
137
|
</DescriptionList>
|
|
111
138
|
</Grid>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { InfraEnvUpdateParams } from '@openshift-assisted/types/assisted-installer-service';
|
|
3
|
+
import { InfraEnvsAPI } from '../../../../../common';
|
|
4
|
+
import { useClusterWizardContext } from '../../clusterWizardContext';
|
|
5
|
+
import { StaticIp } from '../staticIp/StaticIp';
|
|
6
|
+
|
|
7
|
+
export const DisconnectedStaticIp: React.FC = () => {
|
|
8
|
+
const { disconnectedInfraEnv, setDisconnectedInfraEnv } = useClusterWizardContext();
|
|
9
|
+
|
|
10
|
+
const updateInfraEnv = React.useCallback(
|
|
11
|
+
async (params: InfraEnvUpdateParams) => {
|
|
12
|
+
if (!disconnectedInfraEnv?.id) {
|
|
13
|
+
throw new Error('No disconnected infraEnv available');
|
|
14
|
+
}
|
|
15
|
+
const { data: updatedInfraEnv } = await InfraEnvsAPI.update(disconnectedInfraEnv.id, params);
|
|
16
|
+
setDisconnectedInfraEnv(updatedInfraEnv);
|
|
17
|
+
return updatedInfraEnv;
|
|
18
|
+
},
|
|
19
|
+
[disconnectedInfraEnv, setDisconnectedInfraEnv],
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
if (!disconnectedInfraEnv) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return <StaticIp infraEnv={disconnectedInfraEnv} updateInfraEnv={updateInfraEnv} />;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export default DisconnectedStaticIp;
|
|
@@ -14,6 +14,7 @@ export const InstallDisconnectedSwitch = ({ isDisabled }: { isDisabled?: boolean
|
|
|
14
14
|
onChange={(_, checked) => setInstallDisconnected(checked)}
|
|
15
15
|
ouiaId="DisconnectedInstall"
|
|
16
16
|
isDisabled={isDisabled}
|
|
17
|
+
label={<>{"I'm installing on a disconnected/air-gapped/secured environment"}</>}
|
|
17
18
|
/>
|
|
18
19
|
);
|
|
19
20
|
|
|
@@ -1,48 +1,82 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import * as Yup from 'yup';
|
|
3
3
|
import { Formik, useFormikContext } from 'formik';
|
|
4
|
-
import { AlertVariant } from '@patternfly/react-core';
|
|
5
|
-
import {
|
|
6
|
-
|
|
4
|
+
import { Alert, AlertVariant, Form, Grid, GridItem, Content } from '@patternfly/react-core';
|
|
5
|
+
import {
|
|
6
|
+
InfraEnv,
|
|
7
|
+
InfraEnvUpdateParams,
|
|
8
|
+
} from '@openshift-assisted/types/assisted-installer-service';
|
|
7
9
|
import {
|
|
8
10
|
ClusterWizardStep,
|
|
9
11
|
WithErrorBoundary,
|
|
10
12
|
UploadSSH,
|
|
11
|
-
isInOcm,
|
|
12
|
-
PullSecret,
|
|
13
13
|
useAlerts,
|
|
14
14
|
sshPublicKeyValidationSchema,
|
|
15
|
-
pullSecretValidationSchema,
|
|
16
15
|
InfraEnvsAPI,
|
|
17
|
-
ClustersAPI,
|
|
18
16
|
handleApiError,
|
|
19
17
|
getApiErrorMessage,
|
|
20
18
|
useTranslation,
|
|
19
|
+
InputField,
|
|
20
|
+
ipValidationSchema,
|
|
21
|
+
getFormikErrorFields,
|
|
22
|
+
httpProxyValidationSchema,
|
|
23
|
+
httpsProxyValidationSchema,
|
|
24
|
+
noProxyValidationSchema,
|
|
25
|
+
ntpSourceValidationSchema,
|
|
26
|
+
ProxyFields,
|
|
27
|
+
NtpSourcesFields,
|
|
21
28
|
} from '../../../../../common';
|
|
22
|
-
import { usePullSecret } from '../../../../hooks';
|
|
23
29
|
import { useClusterWizardContext } from '../../clusterWizardContext';
|
|
24
30
|
import { ClusterWizardNavigation, ClusterWizardFooter } from '../../wizardComponents';
|
|
25
|
-
import {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
31
|
+
import { getDummyInfraEnvField } from '../staticIp/data/dummyData';
|
|
32
|
+
import {
|
|
33
|
+
canonicalizeIp,
|
|
34
|
+
getHostIpsFromInfraEnv,
|
|
35
|
+
getStaticNetworkConfig,
|
|
36
|
+
} from '../staticIp/data/fromInfraEnv';
|
|
29
37
|
|
|
30
38
|
type OptionalConfigurationsValues = {
|
|
31
39
|
sshPublicKey: string;
|
|
32
|
-
|
|
40
|
+
rendezvousIp: string;
|
|
41
|
+
enableProxy: boolean;
|
|
42
|
+
httpProxy: string;
|
|
43
|
+
httpsProxy: string;
|
|
44
|
+
noProxy: string;
|
|
45
|
+
enableNtpSources: boolean;
|
|
46
|
+
ntpSourcesList: string;
|
|
33
47
|
};
|
|
34
48
|
|
|
35
49
|
type OptionalConfigurationsFormProps = {
|
|
36
|
-
defaultPullSecret?: string;
|
|
37
50
|
isSubmitting: boolean;
|
|
38
51
|
};
|
|
39
52
|
|
|
53
|
+
const isRendezvousIpInStaticHostList = (
|
|
54
|
+
rendezvousIp: string | undefined,
|
|
55
|
+
infraEnv: InfraEnv | undefined,
|
|
56
|
+
): boolean => {
|
|
57
|
+
if (!rendezvousIp?.trim()) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
const staticHostIps = getHostIpsFromInfraEnv(infraEnv);
|
|
61
|
+
if (!staticHostIps.length) {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
const canonicalRendezvousIp = canonicalizeIp(rendezvousIp.trim());
|
|
65
|
+
return staticHostIps.some((ip) => canonicalizeIp(ip) === canonicalRendezvousIp);
|
|
66
|
+
};
|
|
67
|
+
|
|
40
68
|
const OptionalConfigurationsForm: React.FC<OptionalConfigurationsFormProps> = ({
|
|
41
|
-
defaultPullSecret,
|
|
42
69
|
isSubmitting,
|
|
43
70
|
}) => {
|
|
44
|
-
const { moveBack } = useClusterWizardContext();
|
|
45
|
-
const { isValid, submitForm } =
|
|
71
|
+
const { moveBack, disconnectedInfraEnv } = useClusterWizardContext();
|
|
72
|
+
const { isValid, submitForm, errors, touched, values } =
|
|
73
|
+
useFormikContext<OptionalConfigurationsValues>();
|
|
74
|
+
const errorFields = getFormikErrorFields(errors, touched);
|
|
75
|
+
|
|
76
|
+
const showRendezvousIpMismatchWarning =
|
|
77
|
+
!!disconnectedInfraEnv?.staticNetworkConfig &&
|
|
78
|
+
!!values.rendezvousIp.trim() &&
|
|
79
|
+
!isRendezvousIpInStaticHostList(values.rendezvousIp, disconnectedInfraEnv);
|
|
46
80
|
|
|
47
81
|
return (
|
|
48
82
|
<ClusterWizardStep
|
|
@@ -53,6 +87,7 @@ const OptionalConfigurationsForm: React.FC<OptionalConfigurationsFormProps> = ({
|
|
|
53
87
|
onBack={moveBack}
|
|
54
88
|
isSubmitting={isSubmitting}
|
|
55
89
|
isNextDisabled={!isValid}
|
|
90
|
+
errorFields={errorFields}
|
|
56
91
|
/>
|
|
57
92
|
}
|
|
58
93
|
>
|
|
@@ -63,8 +98,25 @@ const OptionalConfigurationsForm: React.FC<OptionalConfigurationsFormProps> = ({
|
|
|
63
98
|
</GridItem>
|
|
64
99
|
<GridItem>
|
|
65
100
|
<Form id="wizard-cluster-optional-config__form">
|
|
101
|
+
<InputField
|
|
102
|
+
label="Rendezvous IP"
|
|
103
|
+
name="rendezvousIp"
|
|
104
|
+
helperText="The IP address that hosts will use to communicate with the bootstrap node during installation."
|
|
105
|
+
maxLength={45}
|
|
106
|
+
/>
|
|
107
|
+
{showRendezvousIpMismatchWarning && (
|
|
108
|
+
<Alert
|
|
109
|
+
isInline
|
|
110
|
+
variant="warning"
|
|
111
|
+
title="Rendezvous IP does not match a configured static IP"
|
|
112
|
+
>
|
|
113
|
+
The rendezvous IP does not match any of the configured static IP addresses. The
|
|
114
|
+
installation may fail if the rendezvous IP is unreachable.
|
|
115
|
+
</Alert>
|
|
116
|
+
)}
|
|
66
117
|
<UploadSSH />
|
|
67
|
-
|
|
118
|
+
<ProxyFields />
|
|
119
|
+
<NtpSourcesFields />
|
|
68
120
|
</Form>
|
|
69
121
|
</GridItem>
|
|
70
122
|
</Grid>
|
|
@@ -73,31 +125,76 @@ const OptionalConfigurationsForm: React.FC<OptionalConfigurationsFormProps> = ({
|
|
|
73
125
|
);
|
|
74
126
|
};
|
|
75
127
|
|
|
128
|
+
const getStaticNetworkConfigUpdate = (infraEnv: InfraEnv) => {
|
|
129
|
+
if (!infraEnv.staticNetworkConfig) {
|
|
130
|
+
return [];
|
|
131
|
+
}
|
|
132
|
+
return getStaticNetworkConfig(infraEnv) ?? getDummyInfraEnvField();
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
const buildInfraEnvUpdateParams = (
|
|
136
|
+
values: OptionalConfigurationsValues,
|
|
137
|
+
disconnectedInfraEnv: InfraEnv,
|
|
138
|
+
): InfraEnvUpdateParams => ({
|
|
139
|
+
sshAuthorizedKey: values.sshPublicKey,
|
|
140
|
+
rendezvousIp: values.rendezvousIp,
|
|
141
|
+
staticNetworkConfig: getStaticNetworkConfigUpdate(disconnectedInfraEnv),
|
|
142
|
+
proxy: {
|
|
143
|
+
httpProxy: values.httpProxy,
|
|
144
|
+
httpsProxy: values.httpsProxy,
|
|
145
|
+
noProxy: values.noProxy,
|
|
146
|
+
},
|
|
147
|
+
ntpSources: values.enableNtpSources ? values.ntpSourcesList : '',
|
|
148
|
+
});
|
|
149
|
+
|
|
76
150
|
export const OptionalConfigurationsStep = () => {
|
|
77
151
|
const { t } = useTranslation();
|
|
78
|
-
const {
|
|
79
|
-
moveNext,
|
|
80
|
-
disconnectedCluster,
|
|
81
|
-
setDisconnectedCluster,
|
|
82
|
-
disconnectedInfraEnv,
|
|
83
|
-
setDisconnectedInfraEnv,
|
|
84
|
-
} = useClusterWizardContext();
|
|
152
|
+
const { moveNext, disconnectedInfraEnv, setDisconnectedInfraEnv } = useClusterWizardContext();
|
|
85
153
|
const { addAlert, clearAlerts } = useAlerts();
|
|
86
154
|
const [isSubmitting, setIsSubmitting] = React.useState(false);
|
|
87
|
-
const defaultPullSecret = usePullSecret();
|
|
88
155
|
|
|
89
156
|
const validationSchema = React.useMemo(
|
|
90
157
|
() =>
|
|
91
|
-
Yup.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
158
|
+
Yup.lazy((values: OptionalConfigurationsValues) =>
|
|
159
|
+
Yup.object({
|
|
160
|
+
sshPublicKey: sshPublicKeyValidationSchema(t),
|
|
161
|
+
rendezvousIp: Yup.string()
|
|
162
|
+
.max(45, 'IP address must be at most 45 characters')
|
|
163
|
+
.concat(ipValidationSchema(t)),
|
|
164
|
+
httpProxy: httpProxyValidationSchema({
|
|
165
|
+
values,
|
|
166
|
+
pairValueName: 'httpsProxy',
|
|
167
|
+
allowEmpty: true,
|
|
168
|
+
t,
|
|
169
|
+
}),
|
|
170
|
+
httpsProxy: httpsProxyValidationSchema({
|
|
171
|
+
values,
|
|
172
|
+
pairValueName: 'httpProxy',
|
|
173
|
+
allowEmpty: true,
|
|
174
|
+
t,
|
|
175
|
+
}),
|
|
176
|
+
noProxy: noProxyValidationSchema(t),
|
|
177
|
+
ntpSourcesList: values.enableNtpSources
|
|
178
|
+
? ntpSourceValidationSchema(t, false)
|
|
179
|
+
: ntpSourceValidationSchema(t),
|
|
180
|
+
}),
|
|
181
|
+
),
|
|
95
182
|
[t],
|
|
96
183
|
);
|
|
97
184
|
|
|
98
185
|
const initialValues: OptionalConfigurationsValues = {
|
|
99
186
|
sshPublicKey: disconnectedInfraEnv?.sshAuthorizedKey ?? '',
|
|
100
|
-
|
|
187
|
+
rendezvousIp: disconnectedInfraEnv?.rendezvousIp ?? '',
|
|
188
|
+
enableProxy: !!(
|
|
189
|
+
disconnectedInfraEnv?.proxy?.httpProxy ||
|
|
190
|
+
disconnectedInfraEnv?.proxy?.httpsProxy ||
|
|
191
|
+
disconnectedInfraEnv?.proxy?.noProxy
|
|
192
|
+
),
|
|
193
|
+
httpProxy: disconnectedInfraEnv?.proxy?.httpProxy ?? '',
|
|
194
|
+
httpsProxy: disconnectedInfraEnv?.proxy?.httpsProxy ?? '',
|
|
195
|
+
noProxy: disconnectedInfraEnv?.proxy?.noProxy ?? '',
|
|
196
|
+
enableNtpSources: !!disconnectedInfraEnv?.ntpSources?.trim(),
|
|
197
|
+
ntpSourcesList: disconnectedInfraEnv?.ntpSources ?? '',
|
|
101
198
|
};
|
|
102
199
|
|
|
103
200
|
const handleNext = React.useCallback(
|
|
@@ -105,31 +202,15 @@ export const OptionalConfigurationsStep = () => {
|
|
|
105
202
|
clearAlerts();
|
|
106
203
|
setIsSubmitting(true);
|
|
107
204
|
try {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
if (disconnectedCluster?.id && disconnectedInfraEnv?.id) {
|
|
111
|
-
const { data: updatedInfraEnv } = await InfraEnvsAPI.update(disconnectedInfraEnv.id, {
|
|
112
|
-
sshAuthorizedKey: values.sshPublicKey,
|
|
113
|
-
});
|
|
114
|
-
setDisconnectedInfraEnv(updatedInfraEnv);
|
|
115
|
-
} else {
|
|
116
|
-
const { data: cluster } = await ClustersAPI.registerDisconnected({
|
|
117
|
-
name: DISCONNECTED_CLUSTER_NAME,
|
|
118
|
-
openshiftVersion: DISCONNECTED_OPENSHIFT_VERSION,
|
|
119
|
-
});
|
|
120
|
-
setDisconnectedCluster(cluster);
|
|
121
|
-
|
|
122
|
-
const { data: createdInfraEnv } = await InfraEnvsAPI.register({
|
|
123
|
-
name: 'disconnected-infra-env',
|
|
124
|
-
pullSecret: pullSecretToUse,
|
|
125
|
-
clusterId: cluster.id,
|
|
126
|
-
imageType: DISCONNECTED_IMAGE_TYPE,
|
|
127
|
-
openshiftVersion: DISCONNECTED_OPENSHIFT_VERSION,
|
|
128
|
-
sshAuthorizedKey: values.sshPublicKey || undefined,
|
|
129
|
-
});
|
|
130
|
-
setDisconnectedInfraEnv(createdInfraEnv);
|
|
205
|
+
if (!disconnectedInfraEnv?.id) {
|
|
206
|
+
throw new Error('No disconnected infraEnv available');
|
|
131
207
|
}
|
|
132
208
|
|
|
209
|
+
const { data: updatedInfraEnv } = await InfraEnvsAPI.update(
|
|
210
|
+
disconnectedInfraEnv.id,
|
|
211
|
+
buildInfraEnvUpdateParams(values, disconnectedInfraEnv),
|
|
212
|
+
);
|
|
213
|
+
setDisconnectedInfraEnv(updatedInfraEnv);
|
|
133
214
|
moveNext();
|
|
134
215
|
} catch (error) {
|
|
135
216
|
handleApiError(error, () => {
|
|
@@ -143,29 +224,16 @@ export const OptionalConfigurationsStep = () => {
|
|
|
143
224
|
setIsSubmitting(false);
|
|
144
225
|
}
|
|
145
226
|
},
|
|
146
|
-
[
|
|
147
|
-
clearAlerts,
|
|
148
|
-
defaultPullSecret,
|
|
149
|
-
disconnectedCluster,
|
|
150
|
-
disconnectedInfraEnv,
|
|
151
|
-
setDisconnectedCluster,
|
|
152
|
-
setDisconnectedInfraEnv,
|
|
153
|
-
addAlert,
|
|
154
|
-
moveNext,
|
|
155
|
-
],
|
|
227
|
+
[clearAlerts, disconnectedInfraEnv, setDisconnectedInfraEnv, addAlert, moveNext],
|
|
156
228
|
);
|
|
157
229
|
|
|
158
230
|
return (
|
|
159
231
|
<Formik<OptionalConfigurationsValues>
|
|
160
232
|
initialValues={initialValues}
|
|
161
|
-
enableReinitialize
|
|
162
233
|
validationSchema={validationSchema}
|
|
163
234
|
onSubmit={(values) => void handleNext(values)}
|
|
164
235
|
>
|
|
165
|
-
<OptionalConfigurationsForm
|
|
166
|
-
defaultPullSecret={defaultPullSecret}
|
|
167
|
-
isSubmitting={isSubmitting}
|
|
168
|
-
/>
|
|
236
|
+
<OptionalConfigurationsForm isSubmitting={isSubmitting} />
|
|
169
237
|
</Formik>
|
|
170
238
|
);
|
|
171
239
|
};
|
|
@@ -2,7 +2,8 @@ import * as Yup from 'yup';
|
|
|
2
2
|
import { isInSubnet } from 'is-in-subnet';
|
|
3
3
|
import { Address4, Address6 } from 'ip-address';
|
|
4
4
|
import { getDuplicates } from '../../../../../common';
|
|
5
|
-
import {
|
|
5
|
+
import { ProtocolVersion } from './data/dataTypes';
|
|
6
|
+
import { getAddressObject } from './data/protocolVersion';
|
|
6
7
|
|
|
7
8
|
const RESERVED_IPS = ['127.0.0.0', '127.0.0.1', '0.0.0.0', '255.255.255.255'];
|
|
8
9
|
|
|
@@ -41,7 +42,7 @@ export const getUniqueValidationSchema = <FormValues,>(
|
|
|
41
42
|
);
|
|
42
43
|
};
|
|
43
44
|
|
|
44
|
-
const isValidIPv4Address = (addressStr: string) => {
|
|
45
|
+
export const isValidIPv4Address = (addressStr: string) => {
|
|
45
46
|
try {
|
|
46
47
|
// ip-address package treats cidr addresses as valid so need to verify it isn't a cidr
|
|
47
48
|
// Can't use Address4.isValid()
|
|
@@ -52,7 +53,7 @@ const isValidIPv4Address = (addressStr: string) => {
|
|
|
52
53
|
}
|
|
53
54
|
};
|
|
54
55
|
|
|
55
|
-
const isValidIPv6Address = (addressStr: string) => {
|
|
56
|
+
export const isValidIPv6Address = (addressStr: string) => {
|
|
56
57
|
try {
|
|
57
58
|
// ip-address package treats cidr addresses as valid so need to verify it isn't a cidr
|
|
58
59
|
// Can't use Address6.isValid()
|
|
@@ -87,6 +88,44 @@ const isReservedAddress = (addressStr: string, protocolVersion?: ProtocolVersion
|
|
|
87
88
|
}
|
|
88
89
|
};
|
|
89
90
|
|
|
91
|
+
export const detectProtocolVersionFromIp = (ip?: string): ProtocolVersion | undefined => {
|
|
92
|
+
if (!ip) {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
if (isValidIPv4Address(ip)) {
|
|
96
|
+
return ProtocolVersion.ipv4;
|
|
97
|
+
}
|
|
98
|
+
if (isValidIPv6Address(ip)) {
|
|
99
|
+
return ProtocolVersion.ipv6;
|
|
100
|
+
}
|
|
101
|
+
return undefined;
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
export const getFamilyAgnosticIpValidationSchema = () => {
|
|
105
|
+
return Yup.string().test(
|
|
106
|
+
'ipv4-or-ipv6',
|
|
107
|
+
'Value ${value} is not a valid IPv4 or IPv6 address',
|
|
108
|
+
(value?: string) => {
|
|
109
|
+
if (!value) {
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
return isValidIPv4Address(value) || isValidIPv6Address(value);
|
|
113
|
+
},
|
|
114
|
+
);
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
export const getDnsMatchingSubnetFamilyValidationSchema = (subnetIp: string) => {
|
|
118
|
+
const family = detectProtocolVersionFromIp(subnetIp);
|
|
119
|
+
if (!family) {
|
|
120
|
+
return getFamilyAgnosticIpValidationSchema()
|
|
121
|
+
.required('A value is required')
|
|
122
|
+
.concat(isNotReservedHostDNSAddress());
|
|
123
|
+
}
|
|
124
|
+
return getMultipleIpAddressValidationSchema(family)
|
|
125
|
+
.required('A value is required')
|
|
126
|
+
.concat(isNotReservedHostDNSAddress(family));
|
|
127
|
+
};
|
|
128
|
+
|
|
90
129
|
export const getIpAddressValidationSchema = (protocolVersion: ProtocolVersion) => {
|
|
91
130
|
const protocolVersionLabel = protocolVersion === ProtocolVersion.ipv4 ? 'IPv4' : 'IPv6';
|
|
92
131
|
return Yup.string().test(
|
|
@@ -5,15 +5,20 @@ import {
|
|
|
5
5
|
getFormViewNetworkWideValues,
|
|
6
6
|
getEmptyNetworkWideConfigurations,
|
|
7
7
|
networkWideToInfraEnvField,
|
|
8
|
+
disconnectedNetworkWideToInfraEnvField,
|
|
9
|
+
getDisconnectedFormViewNetworkWideValues,
|
|
8
10
|
FormViewHost,
|
|
9
11
|
FormViewNetworkWideValues,
|
|
10
12
|
} from '../../data';
|
|
11
13
|
import { StaticIpForm } from '../StaticIpForm';
|
|
12
14
|
import { StaticIpFormProps, StaticIpViewProps } from '../propTypes';
|
|
13
15
|
import { networkWideValidationSchema } from './formViewNetworkWideValidationSchema';
|
|
16
|
+
import { disconnectedNetworkWideValidationSchema } from './disconnectedNetworkWideValidationSchema';
|
|
14
17
|
import { FormViewNetworkWideFields } from './FormViewNetworkWideFields';
|
|
18
|
+
import { useClusterWizardContext } from '../../../../clusterWizardContext';
|
|
15
19
|
|
|
16
20
|
export const FormViewNetworkWide: React.FC<StaticIpViewProps> = ({ infraEnv, ...props }) => {
|
|
21
|
+
const { installDisconnected } = useClusterWizardContext();
|
|
17
22
|
const [formProps, setFormProps] = React.useState<StaticIpFormProps<FormViewNetworkWideValues>>();
|
|
18
23
|
const [hosts, setHosts] = React.useState<FormViewHost[]>();
|
|
19
24
|
|
|
@@ -26,16 +31,22 @@ export const FormViewNetworkWide: React.FC<StaticIpViewProps> = ({ infraEnv, ...
|
|
|
26
31
|
setFormProps({
|
|
27
32
|
infraEnv,
|
|
28
33
|
...props,
|
|
29
|
-
validationSchema:
|
|
34
|
+
validationSchema: installDisconnected
|
|
35
|
+
? disconnectedNetworkWideValidationSchema
|
|
36
|
+
: networkWideValidationSchema,
|
|
30
37
|
getInitialValues: (infraEnv: InfraEnv) => {
|
|
31
|
-
return
|
|
38
|
+
return installDisconnected
|
|
39
|
+
? getDisconnectedFormViewNetworkWideValues(infraEnv)
|
|
40
|
+
: getFormViewNetworkWideValues(infraEnv);
|
|
32
41
|
},
|
|
33
42
|
getUpdateParams: (currentInfraEnv: InfraEnv, values: FormViewNetworkWideValues) =>
|
|
34
|
-
|
|
43
|
+
installDisconnected
|
|
44
|
+
? disconnectedNetworkWideToInfraEnvField(currentInfraEnv, values)
|
|
45
|
+
: networkWideToInfraEnvField(currentInfraEnv, values),
|
|
35
46
|
getEmptyValues: () => getEmptyNetworkWideConfigurations(),
|
|
36
47
|
});
|
|
37
48
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
38
|
-
}, []);
|
|
49
|
+
}, [installDisconnected]);
|
|
39
50
|
if (!hosts || !formProps) {
|
|
40
51
|
return null;
|
|
41
52
|
}
|