@rancher/shell 3.0.8-rc.1 → 3.0.8-rc.12
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/assets/brand/suse/banner.svg +1 -0
- package/assets/brand/suse/dark/banner.svg +1 -0
- package/assets/brand/suse/dark/login-landscape.svg +1 -0
- package/assets/brand/suse/dark/rancher-logo.svg +1 -1
- package/assets/brand/suse/favicon.png +0 -0
- package/assets/brand/suse/login-landscape.svg +1 -0
- package/assets/brand/suse/metadata.json +11 -1
- package/assets/brand/suse/rancher-logo.svg +1 -1
- package/assets/fonts/suse/suse-v2-latin-300.woff +0 -0
- package/assets/fonts/suse/suse-v2-latin-300.woff2 +0 -0
- package/assets/fonts/suse/suse-v2-latin-600.woff +0 -0
- package/assets/fonts/suse/suse-v2-latin-600.woff2 +0 -0
- package/assets/fonts/suse/suse-v2-latin-700.woff +0 -0
- package/assets/fonts/suse/suse-v2-latin-700.woff2 +0 -0
- package/assets/fonts/suse/suse-v2-latin-800.woff +0 -0
- package/assets/fonts/suse/suse-v2-latin-800.woff2 +0 -0
- package/assets/fonts/suse/suse-v2-latin-regular.woff +0 -0
- package/assets/fonts/suse/suse-v2-latin-regular.woff2 +0 -0
- package/assets/images/content/README.md +5 -0
- package/assets/images/content/cloud-native.svg +84 -0
- package/assets/images/content/dark/cloud-native.svg +21 -0
- package/assets/images/content/dark/shield.svg +59 -0
- package/assets/images/content/dark/suse.svg +10 -0
- package/assets/images/content/shield.svg +59 -0
- package/assets/images/content/suse.svg +10 -0
- package/assets/styles/base/_typography.scss +1 -0
- package/assets/styles/fonts/_fontstack.scss +53 -1
- package/assets/styles/global/_cards.scss +0 -3
- package/assets/styles/global/_layout.scss +21 -35
- package/assets/styles/themes/_dark.scss +1 -1
- package/assets/styles/themes/_light.scss +1 -1
- package/assets/styles/themes/_modern.scss +11 -3
- package/assets/styles/themes/_suse.scss +116 -24
- package/assets/translations/en-us.yaml +94 -10
- package/components/AutoscalerCard.vue +113 -0
- package/components/AutoscalerTab.vue +94 -0
- package/components/BackLink.vue +8 -0
- package/components/BannerGraphic.vue +36 -21
- package/components/BrandImage.vue +17 -6
- package/components/ClusterIconMenu.vue +1 -1
- package/components/ClusterProviderIcon.vue +1 -1
- package/components/Cron/CronExpressionEditor.vue +1 -1
- package/components/Cron/CronExpressionEditorModal.vue +1 -1
- package/components/Drawer/Chrome.vue +2 -6
- package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +4 -9
- package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +3 -8
- package/components/Drawer/ResourceDetailDrawer/composables.ts +3 -4
- package/components/Drawer/ResourceDetailDrawer/index.vue +4 -9
- package/components/Drawer/ResourceDetailDrawer/types.ts +17 -0
- package/components/Drawer/types.ts +3 -0
- package/components/DynamicContent/DynamicContentBanner.vue +102 -0
- package/components/DynamicContent/DynamicContentCloseButton.vue +42 -0
- package/components/DynamicContent/DynamicContentIcon.vue +132 -0
- package/components/DynamicContent/DynamicContentPanel.vue +112 -0
- package/components/DynamicContent/content.ts +78 -0
- package/components/EmberPage.vue +1 -1
- package/components/IconOrSvg.vue +2 -2
- package/components/PaginatedResourceTable.vue +2 -6
- package/components/PopoverCard.vue +192 -0
- package/components/Questions/__tests__/index.test.ts +159 -0
- package/components/Resource/Detail/CopyToClipboard.vue +4 -1
- package/components/Resource/Detail/FetchLoader/composables.ts +18 -4
- package/components/Resource/Detail/Metadata/Annotations/index.vue +2 -2
- package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +1 -1
- package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +4 -0
- package/components/Resource/Detail/Metadata/KeyValueRow.vue +1 -1
- package/components/Resource/Detail/Metadata/Labels/index.vue +2 -2
- package/components/Resource/Detail/Metadata/composables.ts +9 -9
- package/components/Resource/Detail/Metadata/index.vue +3 -3
- package/components/Resource/Detail/ResourcePopover/ResourcePopoverCard.vue +2 -19
- package/components/Resource/Detail/ResourcePopover/__tests__/ResourcePopoverCard.test.ts +0 -29
- package/components/Resource/Detail/ResourcePopover/__tests__/index.test.ts +132 -150
- package/components/Resource/Detail/ResourcePopover/index.vue +54 -159
- package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +0 -2
- package/components/Resource/Detail/TitleBar/composables.ts +2 -1
- package/components/Resource/Detail/TitleBar/index.vue +10 -6
- package/components/Resource/Detail/composables.ts +12 -0
- package/components/ResourceDetail/Masthead/latest.vue +29 -0
- package/components/ResourceDetail/index.vue +4 -1
- package/components/ResourceList/Masthead.vue +1 -1
- package/components/ResourceTable.vue +1 -1
- package/components/SortableTable/index.vue +2 -1
- package/components/Tabbed/__tests__/index.test.ts +86 -0
- package/components/{nav/WindowManager → Window}/ContainerLogs.vue +1 -1
- package/components/{nav/WindowManager → Window}/ContainerLogsActions.vue +1 -0
- package/components/{nav/WindowManager → Window}/__tests__/ContainerLogs.test.ts +1 -1
- package/components/{nav/WindowManager → Window}/__tests__/ContainerShell.test.ts +2 -2
- package/components/__tests__/AutoscalerCard.test.ts +154 -0
- package/components/__tests__/AutoscalerTab.test.ts +125 -0
- package/components/__tests__/PopoverCard.test.ts +204 -0
- package/components/auth/SelectPrincipal.vue +24 -6
- package/components/auth/__tests__/SelectPrincipal.test.ts +119 -0
- package/components/auth/login/ldap.vue +3 -3
- package/components/form/NodeScheduling.vue +2 -2
- package/components/formatter/Autoscaler.vue +97 -0
- package/components/formatter/InternalExternalIP.vue +198 -24
- package/components/formatter/__tests__/Autoscaler.test.ts +156 -0
- package/components/formatter/__tests__/InternalExternalIP.test.ts +133 -0
- package/components/google/util/__tests__/formatter.test.ts +47 -0
- package/components/google/util/formatter.ts +5 -2
- package/components/nav/Group.vue +21 -5
- package/components/nav/Header.vue +37 -17
- package/components/nav/NamespaceFilter.vue +13 -1
- package/components/nav/NotificationCenter/index.vue +2 -1
- package/components/nav/TopLevelMenu.helper.ts +16 -6
- package/components/nav/TopLevelMenu.vue +4 -2
- package/components/nav/Type.vue +8 -3
- package/components/{DraggableZone.vue → nav/WindowManager/PinArea.vue} +47 -80
- package/components/nav/WindowManager/composables/useComponentsMount.ts +70 -0
- package/components/nav/WindowManager/composables/useDimensionsHandler.ts +105 -0
- package/components/nav/WindowManager/composables/useDragHandler.ts +99 -0
- package/components/nav/WindowManager/composables/usePanelHandler.ts +72 -0
- package/components/nav/WindowManager/composables/usePanelsHandler.ts +14 -0
- package/components/nav/WindowManager/composables/useResizeHandler.ts +167 -0
- package/components/nav/WindowManager/composables/useTabsHandler.ts +51 -0
- package/components/nav/WindowManager/constants.ts +23 -0
- package/components/nav/WindowManager/index.vue +61 -575
- package/components/nav/WindowManager/panels/HorizontalPanel.vue +265 -0
- package/components/nav/WindowManager/panels/TabBodyContainer.vue +39 -0
- package/components/nav/WindowManager/panels/VerticalPanel.vue +308 -0
- package/components/nav/__tests__/Type.test.ts +59 -0
- package/components/templates/default.vue +4 -40
- package/components/templates/home.vue +31 -5
- package/components/templates/plain.vue +30 -4
- package/components/templates/standalone.vue +1 -1
- package/composables/useI18n.ts +10 -1
- package/composables/useInterval.ts +15 -0
- package/config/__test__/uiplugins.test.ts +309 -0
- package/config/labels-annotations.js +9 -1
- package/config/product/explorer.js +3 -1
- package/config/product/manager.js +20 -9
- package/config/router/navigation-guards/clusters.js +3 -3
- package/config/router/navigation-guards/products.js +1 -1
- package/config/router/routes.js +10 -2
- package/config/settings.ts +2 -1
- package/config/store.js +4 -2
- package/config/table-headers.js +8 -0
- package/config/types.js +9 -0
- package/config/uiplugins.js +46 -2
- package/config/version.js +1 -1
- package/core/__test__/extension-manager-impl.test.js +236 -0
- package/core/extension-manager-impl.js +21 -4
- package/core/plugin-helpers.ts +4 -2
- package/core/plugins-loader.js +2 -2
- package/core/types-provisioning.ts +8 -1
- package/detail/pod.vue +1 -0
- package/detail/provisioning.cattle.io.cluster.vue +19 -7
- package/dialog/DeveloperLoadExtensionDialog.vue +13 -4
- package/dialog/RollbackWorkloadDialog.vue +2 -5
- package/dialog/SearchDialog.vue +1 -0
- package/directives/ui-context.ts +103 -0
- package/edit/__tests__/fleet.cattle.io.helmop.test.ts +2 -2
- package/edit/auth/__tests__/oidc.test.ts +26 -0
- package/edit/auth/github.vue +5 -0
- package/edit/auth/oidc.vue +5 -1
- package/edit/autoscaling.horizontalpodautoscaler/index.vue +1 -0
- package/edit/cloudcredential.vue +1 -1
- package/edit/configmap.vue +1 -0
- package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
- package/edit/fleet.cattle.io.gitrepo.vue +0 -10
- package/edit/fleet.cattle.io.helmop.vue +6 -6
- package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
- package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
- package/edit/logging-flow/index.vue +1 -0
- package/edit/logging.banzaicloud.io.output/index.vue +1 -0
- package/edit/management.cattle.io.fleetworkspace.vue +1 -1
- package/edit/management.cattle.io.project.vue +1 -0
- package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +4 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +2 -1
- package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
- package/edit/monitoring.coreos.com.receiver/index.vue +2 -1
- package/edit/monitoring.coreos.com.route.vue +1 -1
- package/edit/namespace.vue +1 -0
- package/edit/networking.istio.io.destinationrule/index.vue +1 -0
- package/edit/networking.k8s.io.ingress/index.vue +1 -0
- package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +1 -0
- package/edit/networking.k8s.io.networkpolicy/index.vue +1 -0
- package/edit/node.vue +1 -0
- package/edit/persistentvolume/index.vue +27 -22
- package/edit/persistentvolume/plugins/awsElasticBlockStore.vue +13 -14
- package/edit/persistentvolume/plugins/azureDisk.vue +49 -48
- package/edit/persistentvolume/plugins/azureFile.vue +15 -14
- package/edit/persistentvolume/plugins/cephfs.vue +15 -14
- package/edit/persistentvolume/plugins/cinder.vue +15 -14
- package/edit/persistentvolume/plugins/csi.vue +18 -16
- package/edit/persistentvolume/plugins/fc.vue +13 -14
- package/edit/persistentvolume/plugins/flexVolume.vue +15 -14
- package/edit/persistentvolume/plugins/flocker.vue +1 -3
- package/edit/persistentvolume/plugins/gcePersistentDisk.vue +13 -14
- package/edit/persistentvolume/plugins/glusterfs.vue +15 -14
- package/edit/persistentvolume/plugins/hostPath.vue +40 -39
- package/edit/persistentvolume/plugins/iscsi.vue +13 -14
- package/edit/persistentvolume/plugins/local.vue +1 -3
- package/edit/persistentvolume/plugins/longhorn.vue +23 -22
- package/edit/persistentvolume/plugins/nfs.vue +15 -14
- package/edit/persistentvolume/plugins/photonPersistentDisk.vue +1 -14
- package/edit/persistentvolume/plugins/portworxVolume.vue +15 -14
- package/edit/persistentvolume/plugins/quobyte.vue +15 -14
- package/edit/persistentvolume/plugins/rbd.vue +15 -14
- package/edit/persistentvolume/plugins/scaleIO.vue +15 -14
- package/edit/persistentvolume/plugins/storageos.vue +15 -14
- package/edit/persistentvolume/plugins/vsphereVolume.vue +1 -3
- package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +32 -5
- package/edit/provisioning.cattle.io.cluster/__tests__/CustomCommand.test.ts +35 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/Networking.test.ts +155 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +21 -21
- package/edit/provisioning.cattle.io.cluster/index.vue +28 -18
- package/edit/provisioning.cattle.io.cluster/rke2.vue +50 -16
- package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +107 -5
- package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +92 -4
- package/edit/secret/index.vue +1 -1
- package/edit/service.vue +9 -4
- package/edit/serviceaccount.vue +1 -0
- package/edit/storage.k8s.io.storageclass/index.vue +1 -0
- package/edit/workload/index.vue +2 -1
- package/edit/workload/mixins/workload.js +1 -1
- package/initialize/App.vue +4 -4
- package/initialize/install-directives.js +2 -0
- package/initialize/install-plugins.js +19 -2
- package/list/provisioning.cattle.io.cluster.vue +15 -2
- package/machine-config/amazonec2.vue +42 -135
- package/machine-config/components/EC2Networking.vue +490 -0
- package/machine-config/components/__tests__/EC2Networking.test.ts +148 -0
- package/machine-config/components/__tests__/utils/vpcSubnetMockData.js +294 -0
- package/machine-config/digitalocean.vue +11 -0
- package/machine-config/google.vue +1 -1
- package/mixins/__tests__/brand.spec.ts +2 -2
- package/mixins/__tests__/chart.test.ts +21 -0
- package/mixins/brand.js +1 -7
- package/mixins/chart.js +7 -1
- package/mixins/create-edit-view/index.js +5 -0
- package/models/__tests__/chart.test.ts +33 -4
- package/models/__tests__/provisioning.cattle.io.cluster.test.ts +112 -5
- package/models/chart.js +25 -13
- package/models/cluster/node.js +13 -6
- package/models/cluster.x-k8s.io.machine.js +10 -20
- package/models/cluster.x-k8s.io.machinedeployment.js +5 -1
- package/models/management.cattle.io.cluster.js +21 -3
- package/models/management.cattle.io.kontainerdriver.js +1 -0
- package/models/provisioning.cattle.io.cluster.js +249 -33
- package/package.json +8 -7
- package/pages/auth/login.vue +41 -5
- package/pages/auth/setup.vue +1 -1
- package/pages/auth/verify.vue +3 -3
- package/pages/c/_cluster/apps/charts/__tests__/chart.test.ts +135 -0
- package/pages/c/_cluster/apps/charts/chart.vue +33 -15
- package/pages/c/_cluster/apps/charts/index.vue +11 -13
- package/pages/c/_cluster/apps/charts/install.vue +1 -1
- package/pages/c/_cluster/explorer/index.vue +8 -6
- package/pages/c/_cluster/manager/hostedprovider/index.vue +220 -0
- package/pages/c/_cluster/settings/brand.vue +1 -1
- package/pages/c/_cluster/uiplugins/__tests__/index.test.ts +7 -0
- package/pages/c/_cluster/uiplugins/catalogs.vue +147 -0
- package/pages/c/_cluster/uiplugins/index.vue +126 -184
- package/pages/home.vue +14 -4
- package/pkg/auto-import.js +3 -3
- package/pkg/dynamic-importer.lib.js +5 -1
- package/pkg/import.js +1 -1
- package/plugins/dashboard-client-init.js +3 -0
- package/plugins/dashboard-store/getters.js +19 -2
- package/plugins/dashboard-store/model-loader.js +1 -1
- package/plugins/dashboard-store/resource-class.js +10 -6
- package/plugins/dynamic-content.js +13 -0
- package/plugins/i18n.js +8 -0
- package/plugins/plugin.js +2 -2
- package/plugins/steve/__tests__/steve-pagination-utils.test.ts +333 -0
- package/plugins/steve/steve-class.js +1 -1
- package/plugins/steve/steve-pagination-utils.ts +39 -20
- package/plugins/steve/subscribe.js +17 -9
- package/plugins/subscribe-events.ts +4 -2
- package/rancher-components/Form/Checkbox/Checkbox.vue +1 -1
- package/rancher-components/Pill/RcStatusBadge/RcStatusBadge.vue +6 -34
- package/rancher-components/Pill/RcStatusBadge/index.ts +0 -1
- package/rancher-components/Pill/RcStatusBadge/types.ts +1 -1
- package/rancher-components/Pill/RcStatusIndicator/RcStatusIndicator.vue +5 -28
- package/rancher-components/Pill/RcStatusIndicator/types.ts +2 -1
- package/rancher-components/Pill/types.ts +0 -1
- package/rancher-components/RcDropdown/RcDropdownItem.vue +1 -0
- package/rancher-components/RcDropdown/RcDropdownItemSelect.vue +5 -1
- package/rancher-components/RcIcon/RcIcon.test.ts +51 -0
- package/rancher-components/RcIcon/RcIcon.vue +46 -0
- package/rancher-components/RcIcon/index.ts +1 -0
- package/rancher-components/RcIcon/types.ts +160 -0
- package/rancher-components/utils/status.test.ts +67 -0
- package/rancher-components/utils/status.ts +77 -0
- package/scripts/typegen.sh +1 -0
- package/store/__tests__/catalog.test.ts +1 -1
- package/store/action-menu.js +8 -0
- package/store/auth.js +4 -4
- package/store/catalog.js +6 -0
- package/store/features.js +1 -0
- package/store/i18n.js +3 -3
- package/store/index.js +40 -19
- package/store/notifications.ts +51 -4
- package/store/plugins.js +7 -3
- package/store/prefs.js +6 -6
- package/store/type-map.js +7 -7
- package/store/ui-context.ts +86 -0
- package/store/wm.ts +244 -0
- package/types/notifications/index.ts +27 -3
- package/types/shell/index.d.ts +80 -4
- package/types/store/__tests__/pagination.types.spec.ts +137 -0
- package/types/store/pagination.types.ts +157 -9
- package/types/store/subscribe-events.types.ts +8 -1
- package/types/store/subscribe.types.ts +1 -0
- package/types/window-manager.ts +24 -0
- package/utils/__tests__/object.test.ts +19 -0
- package/utils/__tests__/provider.test.ts +98 -0
- package/utils/__tests__/selector-typed.test.ts +263 -0
- package/utils/__tests__/version.test.ts +19 -1
- package/utils/autoscaler-utils.ts +7 -0
- package/utils/back-off.ts +3 -3
- package/utils/brand.ts +29 -0
- package/utils/chart.js +18 -0
- package/utils/color.js +1 -1
- package/utils/dynamic-content/__tests__/announcement.test.ts +498 -0
- package/utils/dynamic-content/__tests__/info.test.ts +21 -9
- package/utils/dynamic-content/announcement.ts +142 -0
- package/utils/dynamic-content/example.json +40 -0
- package/utils/dynamic-content/index.ts +6 -2
- package/utils/dynamic-content/info.ts +44 -2
- package/utils/dynamic-content/new-release.ts +1 -1
- package/utils/dynamic-content/notification-handler.ts +48 -0
- package/utils/dynamic-content/types.d.ts +53 -1
- package/utils/dynamic-importer.js +2 -2
- package/utils/favicon.js +4 -4
- package/utils/object.js +20 -2
- package/utils/pagination-utils.ts +2 -2
- package/utils/pagination-wrapper.ts +13 -9
- package/utils/provider.ts +14 -0
- package/utils/scroll.js +7 -0
- package/utils/selector-typed.ts +6 -2
- package/utils/settings.ts +15 -0
- package/utils/unit-tests/pagination-utils.spec.ts +8 -8
- package/utils/validators/machine-pool.ts +13 -3
- package/utils/version.js +15 -0
- package/vue.config.js +3 -3
- package/assets/images/icons/document.svg +0 -3
- package/plugins/nuxt-client-init.js +0 -3
- package/store/wm.js +0 -95
- /package/components/{nav/WindowManager → Window}/ChartReadme.vue +0 -0
- /package/components/{nav/WindowManager → Window}/ContainerShell.vue +0 -0
- /package/components/{nav/WindowManager → Window}/KubectlShell.vue +0 -0
- /package/components/{nav/WindowManager → Window}/MachineSsh.vue +0 -0
- /package/components/{nav/WindowManager → Window}/Window.vue +0 -0
|
@@ -112,8 +112,8 @@ describe('component: rke2', () => {
|
|
|
112
112
|
global: {
|
|
113
113
|
mocks: {
|
|
114
114
|
...defaultMocks,
|
|
115
|
-
$store:
|
|
116
|
-
$
|
|
115
|
+
$store: { dispatch: () => jest.fn(), getters: defaultGetters },
|
|
116
|
+
$extension: { getDynamic: jest.fn(() => undefined ) }
|
|
117
117
|
},
|
|
118
118
|
|
|
119
119
|
stubs: defaultStubs,
|
|
@@ -143,8 +143,8 @@ describe('component: rke2', () => {
|
|
|
143
143
|
global: {
|
|
144
144
|
mocks: {
|
|
145
145
|
...defaultMocks,
|
|
146
|
-
$store:
|
|
147
|
-
$
|
|
146
|
+
$store: { dispatch: () => jest.fn(), getters: defaultGetters },
|
|
147
|
+
$extension: { getDynamic: jest.fn(() => undefined ) },
|
|
148
148
|
},
|
|
149
149
|
|
|
150
150
|
stubs: defaultStubs,
|
|
@@ -174,8 +174,8 @@ describe('component: rke2', () => {
|
|
|
174
174
|
global: {
|
|
175
175
|
mocks: {
|
|
176
176
|
...defaultMocks,
|
|
177
|
-
$store:
|
|
178
|
-
$
|
|
177
|
+
$store: { dispatch: () => jest.fn(), getters: defaultGetters },
|
|
178
|
+
$extension: { getDynamic: jest.fn(() => undefined ) },
|
|
179
179
|
},
|
|
180
180
|
|
|
181
181
|
stubs: defaultStubs,
|
|
@@ -231,7 +231,7 @@ describe('component: rke2', () => {
|
|
|
231
231
|
},
|
|
232
232
|
getters: defaultGetters
|
|
233
233
|
},
|
|
234
|
-
$
|
|
234
|
+
$extension: { getDynamic: jest.fn(() => undefined ) },
|
|
235
235
|
},
|
|
236
236
|
|
|
237
237
|
stubs: defaultStubs,
|
|
@@ -275,7 +275,7 @@ describe('component: rke2', () => {
|
|
|
275
275
|
'management/findAll': () => ([]),
|
|
276
276
|
}
|
|
277
277
|
},
|
|
278
|
-
$
|
|
278
|
+
$extension: { getDynamic: jest.fn(() => undefined ) },
|
|
279
279
|
},
|
|
280
280
|
|
|
281
281
|
stubs: defaultStubs,
|
|
@@ -324,7 +324,7 @@ describe('component: rke2', () => {
|
|
|
324
324
|
'management/findAll': () => ([]),
|
|
325
325
|
}
|
|
326
326
|
},
|
|
327
|
-
$
|
|
327
|
+
$extension: { getDynamic: jest.fn(() => undefined ) },
|
|
328
328
|
},
|
|
329
329
|
|
|
330
330
|
stubs: defaultStubs,
|
|
@@ -369,8 +369,8 @@ describe('component: rke2', () => {
|
|
|
369
369
|
global: {
|
|
370
370
|
mocks: {
|
|
371
371
|
...defaultMocks,
|
|
372
|
-
$store:
|
|
373
|
-
$
|
|
372
|
+
$store: { dispatch: () => jest.fn(), getters: defaultGetters },
|
|
373
|
+
$extension: { getDynamic: jest.fn(() => undefined ) },
|
|
374
374
|
},
|
|
375
375
|
stubs: defaultStubs
|
|
376
376
|
}
|
|
@@ -409,8 +409,8 @@ describe('component: rke2', () => {
|
|
|
409
409
|
global: {
|
|
410
410
|
mocks: {
|
|
411
411
|
...defaultMocks,
|
|
412
|
-
$store:
|
|
413
|
-
$
|
|
412
|
+
$store: { dispatch: () => jest.fn(), getters: defaultGetters },
|
|
413
|
+
$extension: { getDynamic: jest.fn(() => undefined ) },
|
|
414
414
|
},
|
|
415
415
|
stubs: defaultStubs
|
|
416
416
|
}
|
|
@@ -441,8 +441,8 @@ describe('component: rke2', () => {
|
|
|
441
441
|
global: {
|
|
442
442
|
mocks: {
|
|
443
443
|
...defaultMocks,
|
|
444
|
-
$store:
|
|
445
|
-
$
|
|
444
|
+
$store: { dispatch: () => jest.fn(), getters: defaultGetters },
|
|
445
|
+
$extension: { getDynamic: jest.fn(() => undefined ) },
|
|
446
446
|
},
|
|
447
447
|
stubs: defaultStubs
|
|
448
448
|
}
|
|
@@ -489,8 +489,8 @@ describe('component: rke2', () => {
|
|
|
489
489
|
global: {
|
|
490
490
|
mocks: {
|
|
491
491
|
...defaultMocks,
|
|
492
|
-
$store:
|
|
493
|
-
$
|
|
492
|
+
$store: { dispatch: () => jest.fn(), getters: defaultGetters },
|
|
493
|
+
$extension: { getDynamic: jest.fn(() => undefined ) },
|
|
494
494
|
},
|
|
495
495
|
stubs: defaultStubs
|
|
496
496
|
}
|
|
@@ -536,8 +536,8 @@ describe('component: rke2', () => {
|
|
|
536
536
|
global: {
|
|
537
537
|
mocks: {
|
|
538
538
|
...defaultMocks,
|
|
539
|
-
$store:
|
|
540
|
-
$
|
|
539
|
+
$store: { dispatch: () => jest.fn(), getters: defaultGetters },
|
|
540
|
+
$extension: { getDynamic: jest.fn(() => undefined ) },
|
|
541
541
|
},
|
|
542
542
|
stubs: defaultStubs
|
|
543
543
|
}
|
|
@@ -600,8 +600,8 @@ describe('component: rke2', () => {
|
|
|
600
600
|
global: {
|
|
601
601
|
mocks: {
|
|
602
602
|
...defaultMocks,
|
|
603
|
-
$store:
|
|
604
|
-
$
|
|
603
|
+
$store: { dispatch: () => jest.fn(), getters: defaultGetters },
|
|
604
|
+
$extension: { getDynamic: jest.fn(() => undefined ) },
|
|
605
605
|
},
|
|
606
606
|
|
|
607
607
|
stubs: defaultStubs,
|
|
@@ -163,9 +163,8 @@ export default {
|
|
|
163
163
|
};
|
|
164
164
|
|
|
165
165
|
this.extensions = this.$extension.getProviders(context);
|
|
166
|
-
},
|
|
167
166
|
|
|
168
|
-
|
|
167
|
+
// At this point, we know we definitely have the mgmt cluster, so we can access `isImported` and `isLocal`
|
|
169
168
|
let subType = null;
|
|
170
169
|
|
|
171
170
|
subType = this.$route.query[SUB_TYPE] || null;
|
|
@@ -176,6 +175,11 @@ export default {
|
|
|
176
175
|
} else if (this.value.isLocal) {
|
|
177
176
|
subType = LOCAL;
|
|
178
177
|
}
|
|
178
|
+
|
|
179
|
+
this.subType = subType;
|
|
180
|
+
},
|
|
181
|
+
|
|
182
|
+
data() {
|
|
179
183
|
const rkeType = this.$route.query[RKE_TYPE] || null;
|
|
180
184
|
const chart = this.$route.query[CHART] || null;
|
|
181
185
|
const isImport = this.realMode === _IMPORT;
|
|
@@ -184,7 +188,7 @@ export default {
|
|
|
184
188
|
nodeDrivers: [],
|
|
185
189
|
kontainerDrivers: [],
|
|
186
190
|
extensions: [],
|
|
187
|
-
subType,
|
|
191
|
+
subType: null,
|
|
188
192
|
rkeType,
|
|
189
193
|
chart,
|
|
190
194
|
isImport,
|
|
@@ -216,7 +220,13 @@ export default {
|
|
|
216
220
|
if (this.value) {
|
|
217
221
|
// set subtype if editing EKS/GKE/AKS cluster -- this ensures that the component provided by extension is loaded instead of iframing old ember ui
|
|
218
222
|
if (this.value.provisioner) {
|
|
219
|
-
const matchingSubtype = this.subTypes.find((st) =>
|
|
223
|
+
const matchingSubtype = this.subTypes.find((st) => {
|
|
224
|
+
const typeLower = st.id.toLowerCase();
|
|
225
|
+
const provisionerLower = this.value.provisioner.toLowerCase();
|
|
226
|
+
|
|
227
|
+
// This allows extensions to provide type for edit without breaking edit for Ember kontainer providers
|
|
228
|
+
return (!!st.component && (typeLower === provisionerLower)) || (DRIVER_TO_IMPORT[typeLower] === provisionerLower);
|
|
229
|
+
});
|
|
220
230
|
|
|
221
231
|
if (matchingSubtype) {
|
|
222
232
|
this.selectType(matchingSubtype.id, false);
|
|
@@ -319,11 +329,12 @@ export default {
|
|
|
319
329
|
const vueKontainerTypes = getters['plugins/clusterDrivers'];
|
|
320
330
|
const machineTypes = this.nodeDrivers.filter((x) => x.spec.active && x.state === 'active');
|
|
321
331
|
|
|
332
|
+
// Keeping this for non Rancher-managed kontainer drivers
|
|
322
333
|
this.kontainerDrivers.filter((x) => (isImport ? x.showImport : x.showCreate)).forEach((obj) => {
|
|
323
334
|
if ( vueKontainerTypes.includes(obj.driverName) ) {
|
|
324
|
-
addType(this.$
|
|
335
|
+
addType(this.$extension, obj.driverName, 'hosted', false);
|
|
325
336
|
} else {
|
|
326
|
-
addType(this.$
|
|
337
|
+
addType(this.$extension, obj.driverName, 'hosted', false, (isImport ? obj.emberImportPath : obj.emberCreatePath));
|
|
327
338
|
}
|
|
328
339
|
});
|
|
329
340
|
if (!isImport) {
|
|
@@ -340,7 +351,7 @@ export default {
|
|
|
340
351
|
|
|
341
352
|
// If Elemental is installed, then add the elemental cluster provider
|
|
342
353
|
if (isElementalActive) {
|
|
343
|
-
addType(this.$
|
|
354
|
+
addType(this.$extension, ELEMENTAL_CLUSTER_PROVIDER, 'custom2', false);
|
|
344
355
|
}
|
|
345
356
|
|
|
346
357
|
// Only add the RKE2 options if RKE2 is enabled
|
|
@@ -348,10 +359,10 @@ export default {
|
|
|
348
359
|
machineTypes.forEach((type) => {
|
|
349
360
|
const id = type.spec.displayName || type.id;
|
|
350
361
|
|
|
351
|
-
addType(this.$
|
|
362
|
+
addType(this.$extension, id, _RKE2, false, null, undefined, type);
|
|
352
363
|
});
|
|
353
364
|
|
|
354
|
-
addType(this.$
|
|
365
|
+
addType(this.$extension, 'custom', 'custom2', false);
|
|
355
366
|
}
|
|
356
367
|
}
|
|
357
368
|
// Add from extensions
|
|
@@ -382,17 +393,16 @@ export default {
|
|
|
382
393
|
}
|
|
383
394
|
|
|
384
395
|
const subtype = {
|
|
385
|
-
id:
|
|
386
|
-
label:
|
|
387
|
-
description: ext.description,
|
|
396
|
+
id: ext.id,
|
|
397
|
+
label: ext.label || getters['i18n/t'](`cluster.provider.${ ext.id }`),
|
|
388
398
|
icon,
|
|
389
399
|
iconClass,
|
|
390
|
-
group:
|
|
391
|
-
disabled:
|
|
392
|
-
link:
|
|
393
|
-
tag:
|
|
394
|
-
component:
|
|
395
|
-
hidden:
|
|
400
|
+
group: ext.group || _RKE2,
|
|
401
|
+
disabled: ext.disabled || false,
|
|
402
|
+
link: ext.link,
|
|
403
|
+
tag: ext.tag,
|
|
404
|
+
component: ext.component,
|
|
405
|
+
hidden: ext.hidden,
|
|
396
406
|
};
|
|
397
407
|
|
|
398
408
|
out.push(subtype);
|
|
@@ -57,7 +57,7 @@ import { ExtensionPoint, TabLocation } from '@shell/core/types';
|
|
|
57
57
|
import MemberRoles from '@shell/edit/provisioning.cattle.io.cluster/tabs/MemberRoles';
|
|
58
58
|
import Basics from '@shell/edit/provisioning.cattle.io.cluster/tabs/Basics';
|
|
59
59
|
import Etcd from '@shell/edit/provisioning.cattle.io.cluster/tabs/etcd';
|
|
60
|
-
import Networking from '@shell/edit/provisioning.cattle.io.cluster/tabs/networking';
|
|
60
|
+
import Networking, { STACK_PREFS } from '@shell/edit/provisioning.cattle.io.cluster/tabs/networking';
|
|
61
61
|
import Upgrade from '@shell/edit/provisioning.cattle.io.cluster/tabs/upgrade';
|
|
62
62
|
import Registries from '@shell/edit/provisioning.cattle.io.cluster/tabs/registries';
|
|
63
63
|
import AddOnConfig from '@shell/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig';
|
|
@@ -219,6 +219,10 @@ export default {
|
|
|
219
219
|
this.value.spec.rkeConfig.machineGlobalConfig = {};
|
|
220
220
|
}
|
|
221
221
|
|
|
222
|
+
if (!this.value.spec.rkeConfig.networking) {
|
|
223
|
+
this.value.spec.rkeConfig.networking = {};
|
|
224
|
+
}
|
|
225
|
+
|
|
222
226
|
if (!this.value.spec.rkeConfig.machineSelectorConfig?.length) {
|
|
223
227
|
this.value.spec.rkeConfig.machineSelectorConfig = [{ config: {} }];
|
|
224
228
|
}
|
|
@@ -268,6 +272,7 @@ export default {
|
|
|
268
272
|
machinePoolValidation: {}, // map of validation states for each machine pool
|
|
269
273
|
machinePoolErrors: {},
|
|
270
274
|
addonConfigValidation: {}, // validation state of each addon config (boolean of whether codemirror's yaml lint passed)
|
|
275
|
+
stackPreferenceError: false, // spec.networking.stackPreference is validated in conjunction with hasSomeIpv6Pools
|
|
271
276
|
allNamespaces: [],
|
|
272
277
|
extensionTabs: getApplicableExtensionEnhancements(this, ExtensionPoint.TAB, TabLocation.CLUSTER_CREATE_RKE2, this.$route, this),
|
|
273
278
|
clusterAgentDeploymentCustomization: null,
|
|
@@ -497,7 +502,7 @@ export default {
|
|
|
497
502
|
* 2) Override via hardcoded setting
|
|
498
503
|
*/
|
|
499
504
|
cloudCredentialsOverride() {
|
|
500
|
-
const cloudCredential = this.$
|
|
505
|
+
const cloudCredential = this.$extension.getDynamic('cloud-credential', this.provider);
|
|
501
506
|
|
|
502
507
|
if (cloudCredential === undefined) {
|
|
503
508
|
return CLOUD_CREDENTIAL_OVERRIDE[this.provider];
|
|
@@ -522,16 +527,16 @@ export default {
|
|
|
522
527
|
* Extension provider where being provisioned by an extension
|
|
523
528
|
*/
|
|
524
529
|
extensionProvider() {
|
|
525
|
-
const extClass = this.$
|
|
530
|
+
const extClass = this.$extension.getDynamic('provisioner', this.provider);
|
|
526
531
|
|
|
527
532
|
if (extClass) {
|
|
528
533
|
return new extClass({
|
|
529
|
-
dispatch:
|
|
530
|
-
getters:
|
|
531
|
-
axios:
|
|
532
|
-
$
|
|
533
|
-
$t:
|
|
534
|
-
isCreate:
|
|
534
|
+
dispatch: this.$store.dispatch,
|
|
535
|
+
getters: this.$store.getters,
|
|
536
|
+
axios: this.$store.$axios,
|
|
537
|
+
$extension: this.$store.app.$extension,
|
|
538
|
+
$t: this.t,
|
|
539
|
+
isCreate: this.isCreate
|
|
535
540
|
});
|
|
536
541
|
}
|
|
537
542
|
|
|
@@ -843,6 +848,10 @@ export default {
|
|
|
843
848
|
}
|
|
844
849
|
},
|
|
845
850
|
|
|
851
|
+
hasSomeIpv6Pools() {
|
|
852
|
+
return !!(this.machinePools || []).find((p) => p.hasIpv6);
|
|
853
|
+
},
|
|
854
|
+
|
|
846
855
|
validationPassed() {
|
|
847
856
|
const validRequiredPools = this.hasMachinePools ? this.hasRequiredNodes() : true;
|
|
848
857
|
|
|
@@ -853,8 +862,9 @@ export default {
|
|
|
853
862
|
|
|
854
863
|
const hasAddonConfigErrors = Object.values(this.addonConfigValidation).filter((v) => v === false).length > 0;
|
|
855
864
|
|
|
856
|
-
return validRequiredPools && base && !hasAddonConfigErrors;
|
|
865
|
+
return validRequiredPools && base && !hasAddonConfigErrors && !this.stackPreferenceError;
|
|
857
866
|
},
|
|
867
|
+
|
|
858
868
|
currentCluster() {
|
|
859
869
|
if (this.mode === _EDIT) {
|
|
860
870
|
return { ...this.value };
|
|
@@ -862,6 +872,7 @@ export default {
|
|
|
862
872
|
return this.$store.getters['customisation/getPreviewCluster'];
|
|
863
873
|
}
|
|
864
874
|
},
|
|
875
|
+
|
|
865
876
|
localValue: {
|
|
866
877
|
get() {
|
|
867
878
|
return this.value;
|
|
@@ -870,6 +881,7 @@ export default {
|
|
|
870
881
|
this.$emit('update:value', newValue);
|
|
871
882
|
}
|
|
872
883
|
},
|
|
884
|
+
|
|
873
885
|
hideFooter() {
|
|
874
886
|
return this.needCredential && !this.credentialId;
|
|
875
887
|
},
|
|
@@ -879,6 +891,7 @@ export default {
|
|
|
879
891
|
this.fvFormIsValid &&
|
|
880
892
|
this.etcdConfigValid;
|
|
881
893
|
},
|
|
894
|
+
|
|
882
895
|
},
|
|
883
896
|
|
|
884
897
|
watch: {
|
|
@@ -975,6 +988,18 @@ export default {
|
|
|
975
988
|
this.agentConfig['cloud-provider-name'] = undefined;
|
|
976
989
|
}
|
|
977
990
|
},
|
|
991
|
+
|
|
992
|
+
hasSomeIpv6Pools(neu) {
|
|
993
|
+
if (this.isCreate && this.localValue.spec.rkeConfig.networking.stackPreference !== STACK_PREFS.IPV6) { // if stack pref is ipv6, the user has manually configured that and we shouldn't change it
|
|
994
|
+
if (neu) {
|
|
995
|
+
this.localValue.spec.rkeConfig.networking.stackPreference = STACK_PREFS.DUAL;
|
|
996
|
+
|
|
997
|
+
return;
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
this.localValue.spec.rkeConfig.networking.stackPreference = STACK_PREFS.IPV4;
|
|
1001
|
+
}
|
|
1002
|
+
},
|
|
978
1003
|
},
|
|
979
1004
|
|
|
980
1005
|
created() {
|
|
@@ -1303,13 +1328,14 @@ export default {
|
|
|
1303
1328
|
const name = `pool${ ++this.lastIdx }`;
|
|
1304
1329
|
|
|
1305
1330
|
const pool = {
|
|
1306
|
-
id:
|
|
1331
|
+
id: name,
|
|
1307
1332
|
config,
|
|
1308
|
-
remove:
|
|
1309
|
-
create:
|
|
1310
|
-
update:
|
|
1311
|
-
uid:
|
|
1312
|
-
|
|
1333
|
+
remove: false,
|
|
1334
|
+
create: true,
|
|
1335
|
+
update: false,
|
|
1336
|
+
uid: name,
|
|
1337
|
+
hasIpv6: false,
|
|
1338
|
+
pool: {
|
|
1313
1339
|
name,
|
|
1314
1340
|
etcdRole: numCurrentPools === 0,
|
|
1315
1341
|
controlPlaneRole: numCurrentPools === 0,
|
|
@@ -2231,6 +2257,7 @@ export default {
|
|
|
2231
2257
|
handleTabChange(data) {
|
|
2232
2258
|
this.activeTab = data;
|
|
2233
2259
|
},
|
|
2260
|
+
|
|
2234
2261
|
}
|
|
2235
2262
|
};
|
|
2236
2263
|
</script>
|
|
@@ -2413,6 +2440,7 @@ export default {
|
|
|
2413
2440
|
:side-tabs="true"
|
|
2414
2441
|
class="min-height"
|
|
2415
2442
|
:use-hash="useTabbedHash"
|
|
2443
|
+
:default-tab="defaultTab"
|
|
2416
2444
|
@changed="handleTabChange"
|
|
2417
2445
|
>
|
|
2418
2446
|
<Tab
|
|
@@ -2445,6 +2473,7 @@ export default {
|
|
|
2445
2473
|
:cloud-provider-options="cloudProviderOptions"
|
|
2446
2474
|
:is-azure-provider-unsupported="isAzureProviderUnsupported"
|
|
2447
2475
|
:can-azure-migrate-on-edit="canAzureMigrateOnEdit"
|
|
2476
|
+
:has-some-ipv6-pools="hasSomeIpv6Pools"
|
|
2448
2477
|
@update:value="$emit('input', $event)"
|
|
2449
2478
|
@cilium-values-changed="handleCiliumValuesChanged"
|
|
2450
2479
|
@enabled-system-services-changed="handleEnabledSystemServicesChanged"
|
|
@@ -2492,12 +2521,15 @@ export default {
|
|
|
2492
2521
|
v-if="haveArgInfo"
|
|
2493
2522
|
name="networking"
|
|
2494
2523
|
label-key="cluster.tabs.networking"
|
|
2524
|
+
:error="stackPreferenceError"
|
|
2495
2525
|
>
|
|
2496
2526
|
<Networking
|
|
2497
2527
|
v-model:value="localValue"
|
|
2498
2528
|
:mode="mode"
|
|
2499
2529
|
:selected-version="selectedVersion"
|
|
2500
2530
|
:truncate-limit="truncateLimit"
|
|
2531
|
+
:machine-pools="machinePools"
|
|
2532
|
+
:has-some-ipv6-pools="hasSomeIpv6Pools"
|
|
2501
2533
|
@truncate-hostname-changed="truncateHostname"
|
|
2502
2534
|
@cluster-cidr-changed="(val)=>localValue.spec.rkeConfig.machineGlobalConfig['cluster-cidr'] = val"
|
|
2503
2535
|
@service-cidr-changed="(val)=>localValue.spec.rkeConfig.machineGlobalConfig['service-cidr'] = val"
|
|
@@ -2508,6 +2540,8 @@ export default {
|
|
|
2508
2540
|
@local-cluster-auth-endpoint-changed="enableLocalClusterAuthEndpoint"
|
|
2509
2541
|
@ca-certs-changed="(val)=>localValue.spec.localClusterAuthEndpoint.caCerts = val"
|
|
2510
2542
|
@fqdn-changed="(val)=>localValue.spec.localClusterAuthEndpoint.fqdn = val"
|
|
2543
|
+
@stack-preference-changed="(val)=>localValue.spec.rkeConfig.networking.stackPreference = val"
|
|
2544
|
+
@validationChanged="(val)=>stackPreferenceError = !val"
|
|
2511
2545
|
/>
|
|
2512
2546
|
</Tab>
|
|
2513
2547
|
|
|
@@ -10,6 +10,7 @@ import UnitInput from '@shell/components/form/UnitInput.vue';
|
|
|
10
10
|
import { randomStr } from '@shell/utils/string';
|
|
11
11
|
import FormValidation from '@shell/mixins/form-validation';
|
|
12
12
|
import { MACHINE_POOL_VALIDATION } from '@shell/utils/validators/machine-pool';
|
|
13
|
+
import { isAutoscalerFeatureFlagEnabled } from '@shell/utils/autoscaler-utils';
|
|
13
14
|
|
|
14
15
|
export default {
|
|
15
16
|
|
|
@@ -99,6 +100,14 @@ export default {
|
|
|
99
100
|
MACHINE_POOL_VALIDATION,
|
|
100
101
|
|
|
101
102
|
fvFormRuleSets: MACHINE_POOL_VALIDATION.RULESETS,
|
|
103
|
+
fvExtraRules: {
|
|
104
|
+
isAutoscalerMaxGreaterThanMin: () => {
|
|
105
|
+
const min = this.value?.pool?.autoscalingMinSize || 0;
|
|
106
|
+
const max = this.value?.pool?.autoscalingMaxSize || 0;
|
|
107
|
+
|
|
108
|
+
return max - min >= 0 ? undefined : this.t('cluster.machinePool.autoscaler.validation.isAutoscalerMaxGreaterThanMin');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
102
111
|
};
|
|
103
112
|
},
|
|
104
113
|
|
|
@@ -113,6 +122,25 @@ export default {
|
|
|
113
122
|
|
|
114
123
|
isWindows() {
|
|
115
124
|
return this.value?.config?.os === 'windows';
|
|
125
|
+
},
|
|
126
|
+
|
|
127
|
+
isAutoscalerFeatureEnabled() {
|
|
128
|
+
return isAutoscalerFeatureFlagEnabled(this.$store);
|
|
129
|
+
},
|
|
130
|
+
|
|
131
|
+
isAutoscalerEnabled: {
|
|
132
|
+
get() {
|
|
133
|
+
return typeof this.value?.pool?.autoscalingMinSize !== 'undefined' || typeof this.value?.pool?.autoscalingMinSize !== 'undefined';
|
|
134
|
+
},
|
|
135
|
+
set(val) {
|
|
136
|
+
if (!val) {
|
|
137
|
+
delete this.value.pool.autoscalingMinSize;
|
|
138
|
+
delete this.value.pool.autoscalingMaxSize;
|
|
139
|
+
} else {
|
|
140
|
+
this.value.pool.autoscalingMinSize = 1;
|
|
141
|
+
this.value.pool.autoscalingMaxSize = 2;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
116
144
|
}
|
|
117
145
|
},
|
|
118
146
|
|
|
@@ -139,7 +167,18 @@ export default {
|
|
|
139
167
|
this.$emit('validationChanged', newValue);
|
|
140
168
|
},
|
|
141
169
|
deep: true
|
|
142
|
-
}
|
|
170
|
+
},
|
|
171
|
+
|
|
172
|
+
'value.pool.etcdRole'(neu) {
|
|
173
|
+
if (neu) {
|
|
174
|
+
this.isAutoscalerEnabled = false;
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
'value.pool.controlPlaneRole'(neu) {
|
|
178
|
+
if (neu) {
|
|
179
|
+
this.isAutoscalerEnabled = false;
|
|
180
|
+
}
|
|
181
|
+
},
|
|
143
182
|
},
|
|
144
183
|
|
|
145
184
|
/**
|
|
@@ -262,6 +301,7 @@ export default {
|
|
|
262
301
|
</div>
|
|
263
302
|
<div class="col span-4">
|
|
264
303
|
<LabeledInput
|
|
304
|
+
v-if="!isAutoscalerFeatureEnabled || !isAutoscalerEnabled"
|
|
265
305
|
v-model:value.number="value.pool.quantity"
|
|
266
306
|
:mode="mode"
|
|
267
307
|
:label="t('cluster.machinePool.quantity.label')"
|
|
@@ -272,6 +312,15 @@ export default {
|
|
|
272
312
|
:rules="fvGetAndReportPathRules(MACHINE_POOL_VALIDATION.FIELDS.QUANTITY)"
|
|
273
313
|
data-testid="machine-pool-quantity-input"
|
|
274
314
|
/>
|
|
315
|
+
<LabeledInput
|
|
316
|
+
v-else
|
|
317
|
+
:value="t('cluster.machinePool.autoscaler.machineCountValueOverride')"
|
|
318
|
+
:mode="mode"
|
|
319
|
+
:label="t('cluster.machinePool.quantity.label')"
|
|
320
|
+
:disabled="true"
|
|
321
|
+
:required="true"
|
|
322
|
+
data-testid="machine-pool-quantity-input"
|
|
323
|
+
/>
|
|
275
324
|
</div>
|
|
276
325
|
<div class="col span-4 pt-5">
|
|
277
326
|
<h3>
|
|
@@ -305,6 +354,7 @@ export default {
|
|
|
305
354
|
:is="configComponent"
|
|
306
355
|
v-if="value.config && configComponent"
|
|
307
356
|
ref="configComponent"
|
|
357
|
+
v-model:has-ipv6="value.hasIpv6"
|
|
308
358
|
:cluster="cluster"
|
|
309
359
|
:uuid="uuid"
|
|
310
360
|
:mode="mode"
|
|
@@ -344,15 +394,18 @@ export default {
|
|
|
344
394
|
/>
|
|
345
395
|
|
|
346
396
|
<div class="spacer" />
|
|
397
|
+
<h3>
|
|
398
|
+
{{ t('cluster.machinePool.automation.label') }}
|
|
399
|
+
</h3>
|
|
347
400
|
<div class="row">
|
|
348
401
|
<div class="col span-4">
|
|
349
|
-
<
|
|
402
|
+
<h4>
|
|
350
403
|
{{ t('cluster.machinePool.autoReplace.label') }}
|
|
351
404
|
<i
|
|
352
405
|
v-clean-tooltip="t('cluster.machinePool.autoReplace.toolTip')"
|
|
353
406
|
class="icon icon-info icon-lg"
|
|
354
407
|
/>
|
|
355
|
-
</
|
|
408
|
+
</h4>
|
|
356
409
|
<UnitInput
|
|
357
410
|
v-model:value="unhealthyNodeTimeoutInteger"
|
|
358
411
|
:hide-arrows="true"
|
|
@@ -365,9 +418,9 @@ export default {
|
|
|
365
418
|
/>
|
|
366
419
|
</div>
|
|
367
420
|
<div class="col span-4">
|
|
368
|
-
<
|
|
421
|
+
<h4>
|
|
369
422
|
{{ t('cluster.machinePool.drain.header') }}
|
|
370
|
-
</
|
|
423
|
+
</h4>
|
|
371
424
|
<Checkbox
|
|
372
425
|
v-model:value="value.pool.drainBeforeDelete"
|
|
373
426
|
:mode="mode"
|
|
@@ -376,6 +429,55 @@ export default {
|
|
|
376
429
|
/>
|
|
377
430
|
</div>
|
|
378
431
|
</div>
|
|
432
|
+
<div v-if="isAutoscalerFeatureEnabled">
|
|
433
|
+
<div class="row mt-10">
|
|
434
|
+
<div class="col span-12">
|
|
435
|
+
<h4>
|
|
436
|
+
{{ t('cluster.machinePool.autoscaler.heading') }}
|
|
437
|
+
</h4>
|
|
438
|
+
<Banner
|
|
439
|
+
v-if="value.pool.etcdRole || value.pool.controlPlaneRole"
|
|
440
|
+
color="warning"
|
|
441
|
+
label-key="cluster.machinePool.autoscaler.etcdControlPlaneWarning"
|
|
442
|
+
/>
|
|
443
|
+
<Checkbox
|
|
444
|
+
v-model:value="isAutoscalerEnabled"
|
|
445
|
+
:mode="mode"
|
|
446
|
+
:label="t('cluster.machinePool.autoscaler.enable', undefined, true)"
|
|
447
|
+
:disabled="value.pool.etcdRole || value.pool.controlPlaneRole || busy"
|
|
448
|
+
/>
|
|
449
|
+
</div>
|
|
450
|
+
</div>
|
|
451
|
+
<div
|
|
452
|
+
v-if="isAutoscalerEnabled"
|
|
453
|
+
class="row"
|
|
454
|
+
>
|
|
455
|
+
<div class="col span-4">
|
|
456
|
+
<UnitInput
|
|
457
|
+
v-model:value="value.pool.autoscalingMinSize"
|
|
458
|
+
:label="t('cluster.machinePool.autoscaler.min')"
|
|
459
|
+
:hide-arrows="true"
|
|
460
|
+
:placeholder="t('containerResourceLimit.cpuPlaceholder')"
|
|
461
|
+
:mode="mode"
|
|
462
|
+
:base-unit="t('cluster.machinePool.autoscaler.baseUnit')"
|
|
463
|
+
:rules="fvGetAndReportPathRules(MACHINE_POOL_VALIDATION.FIELDS.AUTOSCALER_MIN)"
|
|
464
|
+
:disabled="value.pool.etcdRole || value.pool.controlPlaneRole || busy"
|
|
465
|
+
/>
|
|
466
|
+
</div>
|
|
467
|
+
<div class="col span-4">
|
|
468
|
+
<UnitInput
|
|
469
|
+
v-model:value="value.pool.autoscalingMaxSize"
|
|
470
|
+
:label="t('cluster.machinePool.autoscaler.max')"
|
|
471
|
+
:hide-arrows="true"
|
|
472
|
+
:placeholder="t('containerResourceLimit.cpuPlaceholder')"
|
|
473
|
+
:mode="mode"
|
|
474
|
+
:base-unit="t('cluster.machinePool.autoscaler.baseUnit')"
|
|
475
|
+
:rules="fvGetAndReportPathRules(MACHINE_POOL_VALIDATION.FIELDS.AUTOSCALER_MAX)"
|
|
476
|
+
:disabled="value.pool.etcdRole || value.pool.controlPlaneRole || busy"
|
|
477
|
+
/>
|
|
478
|
+
</div>
|
|
479
|
+
</div>
|
|
480
|
+
</div>
|
|
379
481
|
<div class="spacer" />
|
|
380
482
|
<KeyValue
|
|
381
483
|
v-model:value="value.pool.labels"
|