@rancher/shell 3.0.7 → 3.0.8-rc.10
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/images/vendor/githubapp.svg +13 -0
- package/assets/styles/base/_typography.scss +2 -1
- 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 +16 -8
- package/assets/styles/themes/_suse.scss +116 -24
- package/assets/translations/en-us.yaml +185 -21
- package/assets/translations/zh-hans.yaml +0 -4
- 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/Inactivity.vue +222 -106
- package/components/InstallHelmCharts.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 +5 -2
- package/components/ResourceList/Masthead.vue +1 -1
- package/components/SortableTable/index.vue +18 -2
- 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/fleet/FleetConfigMapSelector.vue +117 -0
- package/components/fleet/FleetSecretSelector.vue +127 -0
- package/components/fleet/__tests__/FleetConfigMapSelector.test.ts +125 -0
- package/components/fleet/__tests__/FleetSecretSelector.test.ts +82 -0
- package/components/form/FileImageSelector.vue +13 -4
- package/components/form/FileSelector.vue +11 -2
- package/components/form/ResourceLabeledSelect.vue +1 -0
- package/components/form/__tests__/ResourceLabeledSelect.test.ts +90 -0
- 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 +12 -3
- package/components/nav/Header.vue +37 -16
- 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/{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/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/auth.js +1 -0
- package/config/product/explorer.js +3 -1
- package/config/product/manager.js +20 -9
- package/config/query-params.js +1 -0
- package/config/router/routes.js +10 -2
- package/config/settings.ts +10 -2
- package/config/store.js +4 -2
- package/config/table-headers.js +8 -0
- package/config/types.js +11 -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 +23 -6
- package/core/plugin-helpers.ts +2 -0
- package/core/types-provisioning.ts +4 -1
- package/detail/pod.vue +1 -0
- package/detail/provisioning.cattle.io.cluster.vue +13 -1
- package/dialog/AddonConfigConfirmationDialog.vue +45 -1
- package/dialog/DeveloperLoadExtensionDialog.vue +12 -3
- package/dialog/RollbackWorkloadDialog.vue +2 -5
- package/directives/ui-context.ts +103 -0
- package/edit/__tests__/fleet.cattle.io.helmop.test.ts +52 -11
- package/edit/auth/AuthProviderWarningBanners.vue +14 -1
- package/edit/auth/__tests__/oidc.test.ts +26 -0
- package/edit/auth/github-app-steps.vue +97 -0
- package/edit/auth/github-steps.vue +75 -0
- package/edit/auth/github.vue +99 -65
- 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 +51 -2
- 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/PolicyRuleTarget.vue +15 -5
- 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 +11 -9
- package/edit/provisioning.cattle.io.cluster/index.vue +25 -15
- package/edit/provisioning.cattle.io.cluster/rke2.vue +98 -17
- package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +28 -2
- 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/projectsecret.vue +1 -1
- package/list/provisioning.cattle.io.cluster.vue +15 -2
- package/machine-config/amazonec2.vue +42 -135
- package/machine-config/azure.vue +1 -1
- 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 +8 -2
- package/mixins/create-edit-view/index.js +5 -0
- package/models/__tests__/chart.test.ts +49 -12
- package/models/__tests__/compliance.cattle.io.clusterscanprofile.spec.js +30 -0
- package/models/__tests__/provisioning.cattle.io.cluster.test.ts +112 -5
- package/models/catalog.cattle.io.app.js +1 -1
- package/models/chart.js +28 -14
- 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/compliance.cattle.io.clusterscanprofile.js +1 -1
- package/models/management.cattle.io.authconfig.js +1 -0
- 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 +6 -5
- package/pages/auth/login.vue +43 -4
- package/pages/auth/verify.vue +1 -1
- package/pages/c/_cluster/apps/charts/AppChartCardSubHeader.vue +3 -2
- package/pages/c/_cluster/apps/charts/__tests__/chart.test.ts +135 -0
- package/pages/c/_cluster/apps/charts/chart.vue +35 -17
- 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/EventsTable.vue +89 -3
- package/pages/c/_cluster/explorer/index.vue +8 -6
- package/pages/c/_cluster/explorer/tools/index.vue +3 -3
- package/pages/c/_cluster/manager/hostedprovider/index.vue +220 -0
- package/pages/c/_cluster/settings/brand.vue +1 -1
- package/pages/c/_cluster/settings/performance.vue +12 -25
- 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 +327 -16
- package/pkg/dynamic-importer.lib.js +4 -0
- package/plugins/axios.js +2 -1
- package/plugins/dashboard-client-init.js +3 -0
- package/plugins/dashboard-store/actions.js +1 -1
- package/plugins/dashboard-store/getters.js +18 -1
- package/plugins/dashboard-store/resource-class.js +21 -6
- package/plugins/dynamic-content.js +13 -0
- package/plugins/i18n.js +8 -0
- package/plugins/steve/__tests__/steve-pagination-utils.test.ts +333 -0
- package/plugins/steve/steve-pagination-utils.ts +41 -22
- 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/extension/publish +1 -1
- package/scripts/typegen.sh +1 -0
- package/store/action-menu.js +8 -0
- package/store/auth.js +11 -6
- package/store/aws.js +8 -6
- package/store/catalog.js +6 -0
- package/store/features.js +2 -0
- package/store/index.js +45 -20
- package/store/notifications.ts +51 -4
- package/store/plugins.js +7 -3
- package/store/prefs.js +12 -6
- package/store/type-map.js +3 -3
- package/store/ui-context.ts +86 -0
- package/store/wm.ts +244 -0
- package/types/kube/kube-api.ts +2 -1
- package/types/notifications/index.ts +27 -3
- package/types/rancher/index.d.ts +1 -0
- package/types/resources/settings.d.ts +29 -7
- package/types/shell/index.d.ts +138 -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__/cluster.test.ts +379 -1
- 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/cluster.js +157 -3
- package/utils/color.js +1 -1
- package/utils/dynamic-content/__tests__/announcement.test.ts +498 -0
- package/utils/dynamic-content/__tests__/config.test.ts +187 -0
- package/utils/dynamic-content/__tests__/index.test.ts +390 -0
- package/utils/dynamic-content/__tests__/info.test.ts +275 -0
- package/utils/dynamic-content/__tests__/new-release.test.ts +216 -0
- package/utils/dynamic-content/__tests__/support-notice.test.ts +262 -0
- package/utils/dynamic-content/__tests__/util.test.ts +235 -0
- package/utils/dynamic-content/announcement.ts +142 -0
- package/utils/dynamic-content/config.ts +55 -0
- package/utils/dynamic-content/example.json +40 -0
- package/utils/dynamic-content/index.ts +277 -0
- package/utils/dynamic-content/info.ts +261 -0
- package/utils/dynamic-content/new-release.ts +126 -0
- package/utils/dynamic-content/notification-handler.ts +48 -0
- package/utils/dynamic-content/support-notice.ts +169 -0
- package/utils/dynamic-content/types.d.ts +153 -0
- package/utils/dynamic-content/util.ts +122 -0
- package/utils/dynamic-importer.js +2 -2
- package/utils/favicon.js +4 -4
- package/utils/inactivity.ts +104 -0
- package/utils/object.js +20 -2
- package/utils/pagination-utils.ts +19 -4
- package/utils/pagination-wrapper.ts +12 -8
- package/utils/provider.ts +14 -0
- package/utils/release-notes.ts +1 -1
- package/utils/scroll.js +7 -0
- package/utils/selector-typed.ts +6 -2
- package/utils/settings.ts +15 -0
- package/utils/validators/machine-pool.ts +13 -3
- package/utils/version.js +15 -0
- 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
|
@@ -475,16 +475,17 @@ describe('component: rke2', () => {
|
|
|
475
475
|
},
|
|
476
476
|
provider: 'custom'
|
|
477
477
|
},
|
|
478
|
-
|
|
479
|
-
|
|
478
|
+
computed: {
|
|
479
|
+
...rke2.computed,
|
|
480
|
+
agentArgs: () => ({
|
|
480
481
|
'cloud-provider-name': {
|
|
481
482
|
options: [
|
|
482
483
|
'azure',
|
|
483
484
|
'amazon'
|
|
484
485
|
]
|
|
485
486
|
}
|
|
486
|
-
}
|
|
487
|
-
}
|
|
487
|
+
})
|
|
488
|
+
},
|
|
488
489
|
global: {
|
|
489
490
|
mocks: {
|
|
490
491
|
...defaultMocks,
|
|
@@ -519,9 +520,10 @@ describe('component: rke2', () => {
|
|
|
519
520
|
},
|
|
520
521
|
provider: 'custom'
|
|
521
522
|
},
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
523
|
+
computed: {
|
|
524
|
+
...rke2.computed,
|
|
525
|
+
canAzureMigrateOnEdit: () => true,
|
|
526
|
+
agentArgs: () => ({
|
|
525
527
|
'cloud-provider-name': {
|
|
526
528
|
options: [
|
|
527
529
|
'azure',
|
|
@@ -529,8 +531,8 @@ describe('component: rke2', () => {
|
|
|
529
531
|
'external'
|
|
530
532
|
]
|
|
531
533
|
}
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
+
})
|
|
535
|
+
},
|
|
534
536
|
global: {
|
|
535
537
|
mocks: {
|
|
536
538
|
...defaultMocks,
|
|
@@ -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.$plugin, obj.driverName, '
|
|
335
|
+
addType(this.$plugin, obj.driverName, 'hosted', false);
|
|
325
336
|
} else {
|
|
326
|
-
addType(this.$plugin, obj.driverName, '
|
|
337
|
+
addType(this.$plugin, obj.driverName, 'hosted', false, (isImport ? obj.emberImportPath : obj.emberCreatePath));
|
|
327
338
|
}
|
|
328
339
|
});
|
|
329
340
|
if (!isImport) {
|
|
@@ -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);
|
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
} from '@shell/utils/object';
|
|
29
29
|
import { allHash } from '@shell/utils/promise';
|
|
30
30
|
import {
|
|
31
|
-
getAllOptionsAfterCurrentVersion, filterOutDeprecatedPatchVersions, isHarvesterSatisfiesVersion, labelForAddon, initSchedulingCustomization
|
|
31
|
+
getAllOptionsAfterCurrentVersion, filterOutDeprecatedPatchVersions, isHarvesterSatisfiesVersion, labelForAddon, initSchedulingCustomization, addonConfigPreserve
|
|
32
32
|
} from '@shell/utils/cluster';
|
|
33
33
|
|
|
34
34
|
import { BadgeState } from '@components/BadgeState';
|
|
@@ -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';
|
|
@@ -162,6 +162,10 @@ export default {
|
|
|
162
162
|
this.schedulingCustomizationOriginallyEnabled = sc.schedulingCustomizationOriginallyEnabled;
|
|
163
163
|
this.errors = this.errors.concat(sc.errors);
|
|
164
164
|
|
|
165
|
+
if (this.isEdit) {
|
|
166
|
+
this.originalKubeVersion = this.versionOptions.find((v) => v.value === this.liveValue.spec.kubernetesVersion);
|
|
167
|
+
}
|
|
168
|
+
|
|
165
169
|
Object.entries(this.chartValues).forEach(([name, value]) => {
|
|
166
170
|
const key = this.chartVersionKey(name);
|
|
167
171
|
|
|
@@ -215,6 +219,10 @@ export default {
|
|
|
215
219
|
this.value.spec.rkeConfig.machineGlobalConfig = {};
|
|
216
220
|
}
|
|
217
221
|
|
|
222
|
+
if (!this.value.spec.rkeConfig.networking) {
|
|
223
|
+
this.value.spec.rkeConfig.networking = {};
|
|
224
|
+
}
|
|
225
|
+
|
|
218
226
|
if (!this.value.spec.rkeConfig.machineSelectorConfig?.length) {
|
|
219
227
|
this.value.spec.rkeConfig.machineSelectorConfig = [{ config: {} }];
|
|
220
228
|
}
|
|
@@ -264,6 +272,7 @@ export default {
|
|
|
264
272
|
machinePoolValidation: {}, // map of validation states for each machine pool
|
|
265
273
|
machinePoolErrors: {},
|
|
266
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
|
|
267
276
|
allNamespaces: [],
|
|
268
277
|
extensionTabs: getApplicableExtensionEnhancements(this, ExtensionPoint.TAB, TabLocation.CLUSTER_CREATE_RKE2, this.$route, this),
|
|
269
278
|
clusterAgentDeploymentCustomization: null,
|
|
@@ -278,6 +287,9 @@ export default {
|
|
|
278
287
|
REGISTRIES_TAB_NAME,
|
|
279
288
|
labelForAddon,
|
|
280
289
|
etcdConfigValid: true,
|
|
290
|
+
addonConfigDiffs: {},
|
|
291
|
+
originalKubeVersion: null,
|
|
292
|
+
isEmpty,
|
|
281
293
|
};
|
|
282
294
|
},
|
|
283
295
|
|
|
@@ -836,6 +848,10 @@ export default {
|
|
|
836
848
|
}
|
|
837
849
|
},
|
|
838
850
|
|
|
851
|
+
hasSomeIpv6Pools() {
|
|
852
|
+
return !!(this.machinePools || []).find((p) => p.hasIpv6);
|
|
853
|
+
},
|
|
854
|
+
|
|
839
855
|
validationPassed() {
|
|
840
856
|
const validRequiredPools = this.hasMachinePools ? this.hasRequiredNodes() : true;
|
|
841
857
|
|
|
@@ -846,8 +862,9 @@ export default {
|
|
|
846
862
|
|
|
847
863
|
const hasAddonConfigErrors = Object.values(this.addonConfigValidation).filter((v) => v === false).length > 0;
|
|
848
864
|
|
|
849
|
-
return validRequiredPools && base && !hasAddonConfigErrors;
|
|
865
|
+
return validRequiredPools && base && !hasAddonConfigErrors && !this.stackPreferenceError;
|
|
850
866
|
},
|
|
867
|
+
|
|
851
868
|
currentCluster() {
|
|
852
869
|
if (this.mode === _EDIT) {
|
|
853
870
|
return { ...this.value };
|
|
@@ -855,6 +872,7 @@ export default {
|
|
|
855
872
|
return this.$store.getters['customisation/getPreviewCluster'];
|
|
856
873
|
}
|
|
857
874
|
},
|
|
875
|
+
|
|
858
876
|
localValue: {
|
|
859
877
|
get() {
|
|
860
878
|
return this.value;
|
|
@@ -863,6 +881,7 @@ export default {
|
|
|
863
881
|
this.$emit('update:value', newValue);
|
|
864
882
|
}
|
|
865
883
|
},
|
|
884
|
+
|
|
866
885
|
hideFooter() {
|
|
867
886
|
return this.needCredential && !this.credentialId;
|
|
868
887
|
},
|
|
@@ -872,6 +891,7 @@ export default {
|
|
|
872
891
|
this.fvFormIsValid &&
|
|
873
892
|
this.etcdConfigValid;
|
|
874
893
|
},
|
|
894
|
+
|
|
875
895
|
},
|
|
876
896
|
|
|
877
897
|
watch: {
|
|
@@ -921,8 +941,22 @@ export default {
|
|
|
921
941
|
}
|
|
922
942
|
},
|
|
923
943
|
|
|
924
|
-
selectedVersion() {
|
|
925
|
-
this.
|
|
944
|
+
async selectedVersion(neu) {
|
|
945
|
+
if (this.isEdit) {
|
|
946
|
+
const {
|
|
947
|
+
addonConfigDiffs, addonNames, userChartValues, $store
|
|
948
|
+
} = this;
|
|
949
|
+
|
|
950
|
+
await addonConfigPreserve(
|
|
951
|
+
{
|
|
952
|
+
addonConfigDiffs, addonNames, userChartValues, $store
|
|
953
|
+
},
|
|
954
|
+
this.originalKubeVersion?.charts,
|
|
955
|
+
neu?.charts
|
|
956
|
+
);
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
this.versionInfo = {}; // Invalidate cache such that version info relevant to selected kube version is updated
|
|
926
960
|
|
|
927
961
|
// Allow time for addonNames to update... then fetch any missing addons
|
|
928
962
|
this.$nextTick(() => this.initAddons());
|
|
@@ -954,6 +988,18 @@ export default {
|
|
|
954
988
|
this.agentConfig['cloud-provider-name'] = undefined;
|
|
955
989
|
}
|
|
956
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
|
+
},
|
|
957
1003
|
},
|
|
958
1004
|
|
|
959
1005
|
created() {
|
|
@@ -1282,13 +1328,14 @@ export default {
|
|
|
1282
1328
|
const name = `pool${ ++this.lastIdx }`;
|
|
1283
1329
|
|
|
1284
1330
|
const pool = {
|
|
1285
|
-
id:
|
|
1331
|
+
id: name,
|
|
1286
1332
|
config,
|
|
1287
|
-
remove:
|
|
1288
|
-
create:
|
|
1289
|
-
update:
|
|
1290
|
-
uid:
|
|
1291
|
-
|
|
1333
|
+
remove: false,
|
|
1334
|
+
create: true,
|
|
1335
|
+
update: false,
|
|
1336
|
+
uid: name,
|
|
1337
|
+
hasIpv6: false,
|
|
1338
|
+
pool: {
|
|
1292
1339
|
name,
|
|
1293
1340
|
etcdRole: numCurrentPools === 0,
|
|
1294
1341
|
controlPlaneRole: numCurrentPools === 0,
|
|
@@ -1511,10 +1558,15 @@ export default {
|
|
|
1511
1558
|
});
|
|
1512
1559
|
},
|
|
1513
1560
|
|
|
1514
|
-
showAddonConfirmation() {
|
|
1515
|
-
return new Promise((resolve
|
|
1561
|
+
showAddonConfirmation(addonNames, previousKubeVersion, newKubeVersion) {
|
|
1562
|
+
return new Promise((resolve) => {
|
|
1516
1563
|
this.$store.dispatch('cluster/promptModal', {
|
|
1517
|
-
component:
|
|
1564
|
+
component: 'AddonConfigConfirmationDialog',
|
|
1565
|
+
componentProps: {
|
|
1566
|
+
addonNames,
|
|
1567
|
+
previousKubeVersion,
|
|
1568
|
+
newKubeVersion
|
|
1569
|
+
},
|
|
1518
1570
|
resources: [(value) => resolve(value)]
|
|
1519
1571
|
});
|
|
1520
1572
|
});
|
|
@@ -1555,10 +1607,28 @@ export default {
|
|
|
1555
1607
|
const isEditVersion = this.isEdit && this.liveValue?.spec?.kubernetesVersion !== this.value?.spec?.kubernetesVersion;
|
|
1556
1608
|
|
|
1557
1609
|
if (isEditVersion) {
|
|
1558
|
-
const
|
|
1610
|
+
const hasDiffs = Object.values(this.addonConfigDiffs).some((d) => !isEmpty(d));
|
|
1559
1611
|
|
|
1560
|
-
if (
|
|
1561
|
-
|
|
1612
|
+
if (hasDiffs) {
|
|
1613
|
+
const addonNamesWithDiffs = [];
|
|
1614
|
+
|
|
1615
|
+
for (const name in this.addonConfigDiffs) {
|
|
1616
|
+
const diff = this.addonConfigDiffs[name];
|
|
1617
|
+
|
|
1618
|
+
if (!isEmpty(diff)) {
|
|
1619
|
+
addonNamesWithDiffs.push(name);
|
|
1620
|
+
}
|
|
1621
|
+
}
|
|
1622
|
+
|
|
1623
|
+
const shouldContinue = await this.showAddonConfirmation(
|
|
1624
|
+
addonNamesWithDiffs,
|
|
1625
|
+
this.liveValue.spec.kubernetesVersion,
|
|
1626
|
+
this.value.spec.kubernetesVersion
|
|
1627
|
+
);
|
|
1628
|
+
|
|
1629
|
+
if (!shouldContinue) {
|
|
1630
|
+
return btnCb('cancelled');
|
|
1631
|
+
}
|
|
1562
1632
|
}
|
|
1563
1633
|
}
|
|
1564
1634
|
|
|
@@ -2187,6 +2257,7 @@ export default {
|
|
|
2187
2257
|
handleTabChange(data) {
|
|
2188
2258
|
this.activeTab = data;
|
|
2189
2259
|
},
|
|
2260
|
+
|
|
2190
2261
|
}
|
|
2191
2262
|
};
|
|
2192
2263
|
</script>
|
|
@@ -2369,6 +2440,7 @@ export default {
|
|
|
2369
2440
|
:side-tabs="true"
|
|
2370
2441
|
class="min-height"
|
|
2371
2442
|
:use-hash="useTabbedHash"
|
|
2443
|
+
:default-tab="defaultTab"
|
|
2372
2444
|
@changed="handleTabChange"
|
|
2373
2445
|
>
|
|
2374
2446
|
<Tab
|
|
@@ -2401,6 +2473,7 @@ export default {
|
|
|
2401
2473
|
:cloud-provider-options="cloudProviderOptions"
|
|
2402
2474
|
:is-azure-provider-unsupported="isAzureProviderUnsupported"
|
|
2403
2475
|
:can-azure-migrate-on-edit="canAzureMigrateOnEdit"
|
|
2476
|
+
:has-some-ipv6-pools="hasSomeIpv6Pools"
|
|
2404
2477
|
@update:value="$emit('input', $event)"
|
|
2405
2478
|
@cilium-values-changed="handleCiliumValuesChanged"
|
|
2406
2479
|
@enabled-system-services-changed="handleEnabledSystemServicesChanged"
|
|
@@ -2448,12 +2521,15 @@ export default {
|
|
|
2448
2521
|
v-if="haveArgInfo"
|
|
2449
2522
|
name="networking"
|
|
2450
2523
|
label-key="cluster.tabs.networking"
|
|
2524
|
+
:error="stackPreferenceError"
|
|
2451
2525
|
>
|
|
2452
2526
|
<Networking
|
|
2453
2527
|
v-model:value="localValue"
|
|
2454
2528
|
:mode="mode"
|
|
2455
2529
|
:selected-version="selectedVersion"
|
|
2456
2530
|
:truncate-limit="truncateLimit"
|
|
2531
|
+
:machine-pools="machinePools"
|
|
2532
|
+
:has-some-ipv6-pools="hasSomeIpv6Pools"
|
|
2457
2533
|
@truncate-hostname-changed="truncateHostname"
|
|
2458
2534
|
@cluster-cidr-changed="(val)=>localValue.spec.rkeConfig.machineGlobalConfig['cluster-cidr'] = val"
|
|
2459
2535
|
@service-cidr-changed="(val)=>localValue.spec.rkeConfig.machineGlobalConfig['service-cidr'] = val"
|
|
@@ -2464,6 +2540,8 @@ export default {
|
|
|
2464
2540
|
@local-cluster-auth-endpoint-changed="enableLocalClusterAuthEndpoint"
|
|
2465
2541
|
@ca-certs-changed="(val)=>localValue.spec.localClusterAuthEndpoint.caCerts = val"
|
|
2466
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"
|
|
2467
2545
|
/>
|
|
2468
2546
|
</Tab>
|
|
2469
2547
|
|
|
@@ -2521,6 +2599,9 @@ export default {
|
|
|
2521
2599
|
:addons-rev="addonsRev"
|
|
2522
2600
|
:user-chart-values-temp="userChartValuesTemp"
|
|
2523
2601
|
:init-yaml-editor="initYamlEditor"
|
|
2602
|
+
:has-diff="!isEmpty(addonConfigDiffs[v.name])"
|
|
2603
|
+
:previous-kube-version="liveValue?.spec?.kubernetesVersion"
|
|
2604
|
+
:new-kube-version="value.spec.kubernetesVersion"
|
|
2524
2605
|
@update:value="$emit('input', $event)"
|
|
2525
2606
|
@update-questions="syncChartValues"
|
|
2526
2607
|
@update-values="updateValues"
|
|
@@ -48,6 +48,27 @@ export default {
|
|
|
48
48
|
initYamlEditor: {
|
|
49
49
|
type: Function,
|
|
50
50
|
required: true,
|
|
51
|
+
},
|
|
52
|
+
/**
|
|
53
|
+
* Indicates if a configuration conflict was detected for this addon.
|
|
54
|
+
*/
|
|
55
|
+
hasDiff: {
|
|
56
|
+
type: Boolean,
|
|
57
|
+
default: false
|
|
58
|
+
},
|
|
59
|
+
/**
|
|
60
|
+
* The Kubernetes version the user is upgrading from.
|
|
61
|
+
*/
|
|
62
|
+
previousKubeVersion: {
|
|
63
|
+
type: String,
|
|
64
|
+
default: ''
|
|
65
|
+
},
|
|
66
|
+
/**
|
|
67
|
+
* The Kubernetes version the user is upgrading to.
|
|
68
|
+
*/
|
|
69
|
+
newKubeVersion: {
|
|
70
|
+
type: String,
|
|
71
|
+
default: ''
|
|
51
72
|
}
|
|
52
73
|
|
|
53
74
|
},
|
|
@@ -73,10 +94,15 @@ export default {
|
|
|
73
94
|
<template>
|
|
74
95
|
<div>
|
|
75
96
|
<Banner
|
|
76
|
-
v-if="isEdit"
|
|
97
|
+
v-if="isEdit && hasDiff"
|
|
77
98
|
color="warning"
|
|
78
99
|
>
|
|
79
|
-
|
|
100
|
+
<span
|
|
101
|
+
v-clean-html="t('cluster.addOns.dependencyBanner', {
|
|
102
|
+
previousKubeVersion,
|
|
103
|
+
newKubeVersion
|
|
104
|
+
}, true)"
|
|
105
|
+
/>
|
|
80
106
|
</Banner>
|
|
81
107
|
<div
|
|
82
108
|
v-if="versionInfo && addonVersion"
|
|
@@ -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"
|