@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
|
@@ -1,27 +1,119 @@
|
|
|
1
1
|
.suse {
|
|
2
|
-
$
|
|
3
|
-
$
|
|
4
|
-
$
|
|
5
|
-
|
|
6
|
-
--primary : #{$primary};
|
|
7
|
-
--primary-text : #fff;
|
|
8
|
-
--primary-hover-bg : #{darken($primary, 10%)};
|
|
9
|
-
--primary-hover-text : #{saturate($lightest, 20%)};
|
|
10
|
-
--primary-active-bg : #{darken($primary, 25%)};
|
|
11
|
-
--primary-active-text : #{contrast-color(darken($primary, 25%))};
|
|
12
|
-
--primary-border : #{$primary};
|
|
13
|
-
--primary-banner-bg : #{rgba($primary, 0.15)};
|
|
14
|
-
--primary-light-bg : #{rgba($primary, 0.05)};
|
|
15
|
-
--primary-keyboard-focus : hsl(from var(--primary) h s calc(l - 10));
|
|
16
|
-
|
|
17
|
-
--info : #{$info};
|
|
18
|
-
--info-text : #{contrast-color($info)};
|
|
19
|
-
--info-hover-bg : #{darken($info, 10%)};
|
|
20
|
-
--info-hover-text : #{saturate($lightest, 20%)};
|
|
21
|
-
--info-active-bg : #{darken($info, 25%)};
|
|
22
|
-
--info-active-text : #{contrast-color(darken($info, 25%))};
|
|
23
|
-
--info-border : #{$info};
|
|
24
|
-
--info-banner-bg : #{rgba($info, 0.15)};
|
|
25
|
-
--info-light-bg : #{rgba($info, 0.05)};
|
|
2
|
+
$green-jungle : #30BA78;
|
|
3
|
+
$light-green-jungle: #4DD192;
|
|
4
|
+
$lighter-green-jungle: #72EEB3;
|
|
26
5
|
|
|
6
|
+
$jungle-120: #008657;
|
|
7
|
+
|
|
8
|
+
--title-font-family : 'SUSE', 'Lato', sans-serif;
|
|
9
|
+
|
|
10
|
+
&.theme-light {
|
|
11
|
+
--primary: #{$jungle-120};
|
|
12
|
+
--primary-text: #FFFFFF;
|
|
13
|
+
--primary-hover: #006B46;
|
|
14
|
+
--primary-hover-bg: #006B46;
|
|
15
|
+
--primary-border: #{$green-120};
|
|
16
|
+
|
|
17
|
+
--link: #4871C7;
|
|
18
|
+
--active-nav: #{$green-140};
|
|
19
|
+
|
|
20
|
+
--non-primary-text: #{$green-120};
|
|
21
|
+
--non-primary-hover: #{$green-20};
|
|
22
|
+
|
|
23
|
+
--secondary: var(--body-bg);
|
|
24
|
+
--secondary-border: var(--primary);
|
|
25
|
+
--on-secondary: var(--non-primary-text);
|
|
26
|
+
--secondary-hover: var(--non-primary-hover);
|
|
27
|
+
|
|
28
|
+
--tertiary: transparent;
|
|
29
|
+
--on-tertiary: var(--non-primary-text);
|
|
30
|
+
--on-tertiary-hover: var(--non-primary-text);
|
|
31
|
+
--on-tertiary-header: var(--non-primary-text);
|
|
32
|
+
--on-tertiary-header-hover: var(--non-primary-text);
|
|
33
|
+
--tertiary-hover: var(--non-primary-hover);
|
|
34
|
+
--tertiary-hover-app-bar: var(--non-primary-text);
|
|
35
|
+
|
|
36
|
+
$super-light-green: #F4F6F5;
|
|
37
|
+
--active: #{$green-140};
|
|
38
|
+
--on-active: #{$grey-0};
|
|
39
|
+
--active-hover: #{lighten($green-140, 5%)};
|
|
40
|
+
--category-active: #{$super-light-green};
|
|
41
|
+
--category-active-hover: #e8eeeb;
|
|
42
|
+
|
|
43
|
+
--checkbox-tick : var(--on-active);
|
|
44
|
+
--checkbox-border : var(--body-border);
|
|
45
|
+
--checkbox-tick-disabled : #{darken($disabled, 40%)};
|
|
46
|
+
--checkbox-disabled-bg : #{$disabled};
|
|
47
|
+
--checkbox-ticked-bg : var(--active);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
&.theme-dark {
|
|
51
|
+
--link: #9BBFFD;
|
|
52
|
+
--active-nav: #{$green-40};
|
|
53
|
+
|
|
54
|
+
--primary: #{$light-green-jungle};
|
|
55
|
+
--primary-text: #{$grey-90};
|
|
56
|
+
--primary-hover: #{$lighter-green-jungle};
|
|
57
|
+
--primary-hover-bg: #{$lighter-green-jungle};
|
|
58
|
+
--primary-border: #{$lighter-green-jungle};
|
|
59
|
+
|
|
60
|
+
--non-primary-text: #{$lighter-green-jungle};
|
|
61
|
+
--non-primary-hover: #1E372B;
|
|
62
|
+
|
|
63
|
+
--secondary: var(--body-bg);
|
|
64
|
+
--secondary-border: var(--non-primary-text);
|
|
65
|
+
--on-secondary: var(--non-primary-text);
|
|
66
|
+
--secondary-hover: var(--non-primary-hover);
|
|
67
|
+
|
|
68
|
+
--tertiary: transparent;
|
|
69
|
+
--on-tertiary: var(--non-primary-text);
|
|
70
|
+
--on-tertiary-hover: var(--non-primary-text);
|
|
71
|
+
--on-tertiary-header: var(--non-primary-text);
|
|
72
|
+
--on-tertiary-header-hover: var(--non-primary-text);
|
|
73
|
+
--tertiary-hover: var(--non-primary-hover);
|
|
74
|
+
--tertiary-hover-app-bar: var(--non-primary-text);
|
|
75
|
+
|
|
76
|
+
$category-active:#303633;
|
|
77
|
+
--active: #{$green-40};
|
|
78
|
+
--on-active: #{$grey-90};
|
|
79
|
+
--active-hover: #{$green-60};
|
|
80
|
+
--category-active: #{$category-active};
|
|
81
|
+
--category-active-hover: #{lighten($category-active, 10%)};
|
|
82
|
+
|
|
83
|
+
--toggle-off-bg: #{$grey-70};
|
|
84
|
+
--sortable-table-selected-bg: #3f4350;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// SUSE Theme uses a smaller banner graphic
|
|
88
|
+
--banner-graphic-height: 160px;
|
|
89
|
+
|
|
90
|
+
// SUSE Theme positions from right, so ship stays visible as browser width shrinks
|
|
91
|
+
.suse-banner-graphic {
|
|
92
|
+
> img {
|
|
93
|
+
object-position: right;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// SUSE Theme aligns graphic to left so that the container ship stays visible
|
|
98
|
+
.suse-login-banner-graphic {
|
|
99
|
+
object-position: left;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Styling for logo image on the login screen
|
|
103
|
+
.suse-logo-login {
|
|
104
|
+
$suse-logo-width: 280px;
|
|
105
|
+
|
|
106
|
+
width: $suse-logo-width;
|
|
107
|
+
max-width: $suse-logo-width;
|
|
108
|
+
align-self: center;
|
|
109
|
+
margin-bottom: 30px;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Ensure that with a small window size, the banner centers, so that the text does not overlay
|
|
114
|
+
// directly on the heavier part of the graphic
|
|
115
|
+
@media (max-width: 860px) {
|
|
116
|
+
.suse .suse-banner-graphic > img {
|
|
117
|
+
object-position: center;
|
|
118
|
+
}
|
|
27
119
|
}
|
|
@@ -125,6 +125,7 @@ generic:
|
|
|
125
125
|
enable: Enable
|
|
126
126
|
disable: Disable
|
|
127
127
|
experimental: Experimental
|
|
128
|
+
primeOnly: Prime Only
|
|
128
129
|
|
|
129
130
|
deprecated: Deprecated
|
|
130
131
|
upgradeable: Upgradeable
|
|
@@ -158,6 +159,8 @@ generic:
|
|
|
158
159
|
genericRow: row {index}
|
|
159
160
|
showLess: Show less
|
|
160
161
|
showMore: Show more
|
|
162
|
+
externalIps: External IPs
|
|
163
|
+
internalIps: Internal IPs
|
|
161
164
|
opensInNewTab: Opens in a new tab
|
|
162
165
|
|
|
163
166
|
tabs:
|
|
@@ -233,7 +236,7 @@ nav:
|
|
|
233
236
|
workload: Workloads
|
|
234
237
|
monitoring: Monitoring
|
|
235
238
|
advanced: Advanced
|
|
236
|
-
|
|
239
|
+
providers: Providers
|
|
237
240
|
RKE1Configuration: RKE1 Configuration
|
|
238
241
|
admission: Admission
|
|
239
242
|
apps: Apps
|
|
@@ -370,9 +373,7 @@ layouts:
|
|
|
370
373
|
unauthenticated: unauthenticated layout
|
|
371
374
|
logout: logout layout
|
|
372
375
|
verify: verify layout
|
|
373
|
-
|
|
374
|
-
windowmanager:
|
|
375
|
-
closeTab: Close tab {tabId}
|
|
376
|
+
|
|
376
377
|
about:
|
|
377
378
|
title: About
|
|
378
379
|
versions:
|
|
@@ -1125,6 +1126,7 @@ catalog:
|
|
|
1125
1126
|
home: Homepage
|
|
1126
1127
|
repository: Repository Page
|
|
1127
1128
|
maintainers: Maintainers
|
|
1129
|
+
maintainerContactTooltip: Contact {maintainer}
|
|
1128
1130
|
related: Related
|
|
1129
1131
|
chartUrls: Chart
|
|
1130
1132
|
keywords: Keywords
|
|
@@ -1578,6 +1580,7 @@ cluster:
|
|
|
1578
1580
|
nodeLabel:
|
|
1579
1581
|
title: Node Labels
|
|
1580
1582
|
label: Add Label
|
|
1583
|
+
ipv6: "It looks like this cluster uses IPv6 networking: <code>Node Private IP</code> should be set to the cluster's IPV6 address."
|
|
1581
1584
|
registrationCommand:
|
|
1582
1585
|
label: Registration Command
|
|
1583
1586
|
linuxDetail: Run this command on each of the existing Linux machines you want to register.
|
|
@@ -2079,6 +2082,21 @@ cluster:
|
|
|
2079
2082
|
httpEndpoint: Allow access to EC2 metadata
|
|
2080
2083
|
httpTokens: Use tokens for metadata
|
|
2081
2084
|
tagTitle: EC2 Tags
|
|
2085
|
+
enableIpv6:
|
|
2086
|
+
label: Enable IPv6
|
|
2087
|
+
description: "Checking this automatically sets your <a aria-label='scroll to the networking section in cluster configuration' href=\"#networking\">Network Stack Preference Order</a> to <b>DUAL</b> stack, enabling both IPv4 and IPv6. For an IPv6-only cluster, you can manually change that setting to <b>IPv6</b>."
|
|
2088
|
+
ipv6AddressCount:
|
|
2089
|
+
label: IPv6 Address Count
|
|
2090
|
+
tooltip: Specifies the number of IPv6 addresses to assign to the network interface
|
|
2091
|
+
error: IPv6 Address Count must be greater than 0 when using an IPv6 vpc or subnet.
|
|
2092
|
+
enablePrimaryIpv6:
|
|
2093
|
+
label: Enable Static Primary Ipv6
|
|
2094
|
+
description: This allows IPv6 communication for components and workloads.
|
|
2095
|
+
ipv6AddressOnly:
|
|
2096
|
+
label: Use IPv6 Only
|
|
2097
|
+
httpProtocolIpv6:
|
|
2098
|
+
label: Use IPv6 for instance metadata service
|
|
2099
|
+
ipv6ValidationWarning: When one pool uses an IPv6 or dual-stack subnet/vpc, all pools must use an IPv6 or dual-stack subnet/vpc.
|
|
2082
2100
|
pnap:
|
|
2083
2101
|
serverLocation:
|
|
2084
2102
|
label: Location
|
|
@@ -2251,6 +2269,18 @@ cluster:
|
|
|
2251
2269
|
rkeTemplate: RKE Template
|
|
2252
2270
|
|
|
2253
2271
|
machinePool:
|
|
2272
|
+
automation:
|
|
2273
|
+
label: Automation
|
|
2274
|
+
autoscaler:
|
|
2275
|
+
heading: Autoscaler
|
|
2276
|
+
enable: Enable autoscaler and override "Machine Count" value
|
|
2277
|
+
machineCountValueOverride: Controlled by autoscaler
|
|
2278
|
+
baseUnit: Machines
|
|
2279
|
+
min: Min
|
|
2280
|
+
max: Max
|
|
2281
|
+
validation:
|
|
2282
|
+
isAutoscalerMaxGreaterThanMin: The max machines count must be equal or exceed the min machine count.
|
|
2283
|
+
etcdControlPlaneWarning: We don't recommend using Autoscaler with machine pools that have the etcd or Control Plane roles. You can modify the yaml if you want to override the current value.
|
|
2254
2284
|
name:
|
|
2255
2285
|
label: Pool Name
|
|
2256
2286
|
placeholder: A random one will be generated by default
|
|
@@ -2315,6 +2345,7 @@ cluster:
|
|
|
2315
2345
|
placeholder: Search for a member to provide cluster access
|
|
2316
2346
|
searchPlaceholder: Start typing to search
|
|
2317
2347
|
noResults: No results found
|
|
2348
|
+
minCharacters: Type at least {count} characters to search
|
|
2318
2349
|
privateRegistry:
|
|
2319
2350
|
header: Registry for Rancher System Container Images
|
|
2320
2351
|
label: Enable cluster scoped container registry for Rancher system container images
|
|
@@ -2390,8 +2421,8 @@ cluster:
|
|
|
2390
2421
|
providerGroup:
|
|
2391
2422
|
create-custom1: Use existing nodes and create a cluster using RKE
|
|
2392
2423
|
create-custom2: Use existing nodes and create a cluster using RKE2/K3s
|
|
2393
|
-
create-
|
|
2394
|
-
register-
|
|
2424
|
+
create-hosted: Create a cluster in a hosted Kubernetes provider
|
|
2425
|
+
register-hosted: Register an existing cluster in a hosted Kubernetes provider
|
|
2395
2426
|
create-rke1: Provision new nodes and create a cluster using RKE
|
|
2396
2427
|
create-rke2: Provision new nodes and create a cluster using RKE2/K3s
|
|
2397
2428
|
create-template: Use a Catalog Template to create a cluster
|
|
@@ -2525,6 +2556,14 @@ cluster:
|
|
|
2525
2556
|
label: Accept any certificate (insecure)
|
|
2526
2557
|
endpointCA:
|
|
2527
2558
|
label: Endpoint CA Cert
|
|
2559
|
+
stackPreference:
|
|
2560
|
+
label: Stack Preference
|
|
2561
|
+
description: "Stack preference determines the networking stack used by the cluster. The selected value configures the address used for health and readiness probes of calico, etcd, kube-apiserver, kube-scheduler, kube-controller-manager, and kubelet. It also defines the server URL in the <code>authentication-token-webhook-config-file</code> for the Authorized Cluster Endpoint and the advertise-client-urls for etcd during snapshot restore. When set to <code>dual</code>, the cluster uses <code>localhost</code>; when set to <code>ipv6</code>, it uses <code>[::1]</code>; and when set to <code>ipv4</code>, it uses <code>127.0.0.1</code>."
|
|
2562
|
+
options:
|
|
2563
|
+
ipv4: IPv4
|
|
2564
|
+
ipv6: IPv6
|
|
2565
|
+
dual: Dual-Stack
|
|
2566
|
+
errorNeedsIpv6: Stack preference must be set to dual-stack or ipv6 if using ipv6 networking in nodepools.
|
|
2528
2567
|
k3s:
|
|
2529
2568
|
systemService:
|
|
2530
2569
|
coredns: 'CoreDNS'
|
|
@@ -2681,6 +2720,11 @@ cruResource:
|
|
|
2681
2720
|
previewYaml: Edit as YAML
|
|
2682
2721
|
showYaml: View as YAML
|
|
2683
2722
|
|
|
2723
|
+
providers:
|
|
2724
|
+
hosted:
|
|
2725
|
+
title: Hosted Providers
|
|
2726
|
+
prime: Prime only
|
|
2727
|
+
warning: Disabling providers will make any clusters that use them uneditable
|
|
2684
2728
|
drivers:
|
|
2685
2729
|
kontainer:
|
|
2686
2730
|
title: Cluster Drivers
|
|
@@ -2764,6 +2808,10 @@ drainNode:
|
|
|
2764
2808
|
custom: "Give up after:"
|
|
2765
2809
|
|
|
2766
2810
|
dynamicContent:
|
|
2811
|
+
action:
|
|
2812
|
+
close: Hide and Mark Announcement as read
|
|
2813
|
+
openPrimary: Open announcement's primary action
|
|
2814
|
+
openSecondary: Open announcement's secondary action
|
|
2767
2815
|
newRelease:
|
|
2768
2816
|
title: A new Rancher release is available!
|
|
2769
2817
|
message: Rancher {version} has been released!
|
|
@@ -3621,6 +3669,7 @@ internalExternalIP:
|
|
|
3621
3669
|
none: None
|
|
3622
3670
|
copyInternalIp: Copy internal IP address to clipboard
|
|
3623
3671
|
copyExternalIp: Copy external IP address to clipboard
|
|
3672
|
+
clickToShowMoreIps: "Click to show {count} more {count, plural, one {IP} other {IPs}}"
|
|
3624
3673
|
|
|
3625
3674
|
istio:
|
|
3626
3675
|
links:
|
|
@@ -4627,6 +4676,7 @@ namespaceFilter:
|
|
|
4627
4676
|
button:
|
|
4628
4677
|
clear: Remove applied namespace filters
|
|
4629
4678
|
clearFilter: Clear namespace options filter
|
|
4679
|
+
removeNamespace: 'Remove {name} from filter'
|
|
4630
4680
|
|
|
4631
4681
|
namespaceList:
|
|
4632
4682
|
selectLabel: Namespace
|
|
@@ -5201,6 +5251,7 @@ inactivity:
|
|
|
5201
5251
|
# Rancher Extensions
|
|
5202
5252
|
plugins:
|
|
5203
5253
|
altIcon: Icon for {extension} extension card
|
|
5254
|
+
incompatiblePrimeOnly: "The latest version of this extension ({ version }) needs Rancher Prime in order to be installed."
|
|
5204
5255
|
incompatibleRancherVersion: "The latest version of this extension ({ version }) is not compatible with the current Rancher version ({ required })."
|
|
5205
5256
|
incompatibleKubeVersion: "The latest version of this extension ({ version }) is not compatible with the current Kube version ({ required })."
|
|
5206
5257
|
incompatibleUiExtensionsApiVersionMissing: 'The latest version of this extension ({ version }) is missing the mandatory annotation catalog.cattle.io/ui-extensions-version from Rancher 2.10 and onwards.'
|
|
@@ -5210,6 +5261,8 @@ plugins:
|
|
|
5210
5261
|
closePluginPanel: Close plugin description panel
|
|
5211
5262
|
viewVersionDetails: View extension {name} version {version} details/Readme
|
|
5212
5263
|
labels:
|
|
5264
|
+
isDeveloper: Developer Load
|
|
5265
|
+
primeOnly: Prime only
|
|
5213
5266
|
builtin: Built-In
|
|
5214
5267
|
experimental: Experimental
|
|
5215
5268
|
third-party: Third-Party
|
|
@@ -5226,10 +5279,13 @@ plugins:
|
|
|
5226
5279
|
third-party: This Extension is provided by a Third-Party
|
|
5227
5280
|
built-in: This Extension is built-in
|
|
5228
5281
|
image: This Extension Image has been loaded manually
|
|
5282
|
+
tooltips:
|
|
5283
|
+
installing: Installing...
|
|
5229
5284
|
error:
|
|
5230
5285
|
title: Error loading extension
|
|
5231
5286
|
message: Could not load extension code
|
|
5232
5287
|
generic: Extension error
|
|
5288
|
+
primeOnly: Unable to load Rancher Prime Extension in Rancher Community
|
|
5233
5289
|
apiAnnotationMissing: 'Unable to load Extension. The version installed is not compatible with the current Extensions API Version (Extension is missing the annotation catalog.cattle.io/ui-extensions-version which implies incompatibility with Rancher 2.10 and onwards)'
|
|
5234
5290
|
api: Unable to load Extension. The version installed is not compatible with the current Extensions API version
|
|
5235
5291
|
host: Unable to load Extension. The version installed is not compatible with this application host
|
|
@@ -5254,6 +5310,7 @@ plugins:
|
|
|
5254
5310
|
detail: Detail
|
|
5255
5311
|
versions: Versions
|
|
5256
5312
|
versionError: Could not load version information
|
|
5313
|
+
requiresRancherPrime: "Requires Rancher Prime"
|
|
5257
5314
|
requiresRancherVersion: "Requires Rancher {required}"
|
|
5258
5315
|
requiresKubeVersion: "Requires Kube version {required}"
|
|
5259
5316
|
requiresExtensionApiVersionMissing: 'Missing the annotation catalog.cattle.io/ui-extensions-version which implies incompatibility with Rancher 2.10 and onwards'
|
|
@@ -5273,7 +5330,7 @@ plugins:
|
|
|
5273
5330
|
warnNoAuth: This version of the extension will be loaded before authentication and will have access to the login process.
|
|
5274
5331
|
manageCatalog:
|
|
5275
5332
|
label: Manage Extension Catalogs
|
|
5276
|
-
title:
|
|
5333
|
+
title: Extensions
|
|
5277
5334
|
subtitle: Catalogs
|
|
5278
5335
|
imageLoad:
|
|
5279
5336
|
load: Import Extension Catalog
|
|
@@ -6589,6 +6646,7 @@ storageClass:
|
|
|
6589
6646
|
|
|
6590
6647
|
tableHeaders:
|
|
6591
6648
|
assuredConcurrencyShares: Assured Concurrency Shares
|
|
6649
|
+
autoscaler: Autoscaler
|
|
6592
6650
|
accessKey: Access Key
|
|
6593
6651
|
addressType: Address Type
|
|
6594
6652
|
accessModes: Access Modes
|
|
@@ -7078,7 +7136,15 @@ wizard:
|
|
|
7078
7136
|
install: Install
|
|
7079
7137
|
upgrade: Upgrade
|
|
7080
7138
|
downgrade: Downgrade
|
|
7139
|
+
|
|
7140
|
+
sideWindow:
|
|
7141
|
+
secondary:
|
|
7142
|
+
resize: Resize secondary window
|
|
7143
|
+
|
|
7081
7144
|
wm:
|
|
7145
|
+
resize: Resize Window - use arrow keys {arrow1} and {arrow2} to resize with keyboard
|
|
7146
|
+
tabIcon: Window tab icon
|
|
7147
|
+
closeTab: Close tab - {tabId}
|
|
7082
7148
|
connection:
|
|
7083
7149
|
connected: Connected
|
|
7084
7150
|
connecting: Connecting…
|
|
@@ -7115,9 +7181,6 @@ wm:
|
|
|
7115
7181
|
timestamps: Show Timestamps
|
|
7116
7182
|
wrap: Wrap Lines
|
|
7117
7183
|
containerShell:
|
|
7118
|
-
resizeShellWindow: Resize Shell window - use arrow keys {arrow1} and {arrow2} to resize with keyboard
|
|
7119
|
-
tabIcon: Shell tab icon
|
|
7120
|
-
closeShellTab: Close Shell tab - {tab}
|
|
7121
7184
|
escapeText: Press Shift+Escape to blur from terminal
|
|
7122
7185
|
clear: Clear
|
|
7123
7186
|
containerName: "Container: {label}"
|
|
@@ -9148,3 +9211,24 @@ component:
|
|
|
9148
9211
|
marchToMayHourly: "Every hour, only in March, April, and May"
|
|
9149
9212
|
every4Hours9to17: "At 0 minutes past the hour, every 4 hours, between 09:00 AM and 05:00 PM"
|
|
9150
9213
|
|
|
9214
|
+
autoscaler:
|
|
9215
|
+
card:
|
|
9216
|
+
title: Autoscaler
|
|
9217
|
+
pause: Pause
|
|
9218
|
+
resume: Resume
|
|
9219
|
+
loadingError: There was a problem loading details
|
|
9220
|
+
loadingAlt: Details Loading
|
|
9221
|
+
details:
|
|
9222
|
+
status: Status
|
|
9223
|
+
health: Health
|
|
9224
|
+
scaleDown: Scale Down
|
|
9225
|
+
scaleUp: Scale Up
|
|
9226
|
+
nodes: Nodes
|
|
9227
|
+
ready: Ready
|
|
9228
|
+
notStarted: Not Started
|
|
9229
|
+
inTotal: In Total
|
|
9230
|
+
provisioning: Provisioning
|
|
9231
|
+
paused: Paused
|
|
9232
|
+
unavailable: Unavailable
|
|
9233
|
+
tab:
|
|
9234
|
+
title: Autoscaler
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed, ComputedRef } from 'vue';
|
|
3
|
+
import { useFetch } from '@shell/components/Resource/Detail/FetchLoader/composables';
|
|
4
|
+
import { useInterval } from '@shell/composables/useInterval';
|
|
5
|
+
import { useI18n } from '@shell/composables/useI18n';
|
|
6
|
+
import { useStore } from 'vuex';
|
|
7
|
+
|
|
8
|
+
export interface Props {
|
|
9
|
+
value: any;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface Detail {
|
|
13
|
+
label: string;
|
|
14
|
+
value?: string | { component: any; props: any };
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const props = defineProps<Props>();
|
|
18
|
+
|
|
19
|
+
const store = useStore();
|
|
20
|
+
const i18n = useI18n(store);
|
|
21
|
+
|
|
22
|
+
const fetch = useFetch(async() => {
|
|
23
|
+
return await props.value.loadAutoscalerDetails();
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
// The backend only updates the configmap every 10 seconds and we don't cache the configmap in the stores
|
|
27
|
+
useInterval(() => fetch.value.refresh(), 10000);
|
|
28
|
+
|
|
29
|
+
const details: ComputedRef<Detail[]> = computed(() => fetch.value.data);
|
|
30
|
+
</script>
|
|
31
|
+
|
|
32
|
+
<template>
|
|
33
|
+
<div class="autoscaler-card">
|
|
34
|
+
<div
|
|
35
|
+
v-if="fetch.loading && !fetch.refreshing"
|
|
36
|
+
class="loading"
|
|
37
|
+
>
|
|
38
|
+
<i
|
|
39
|
+
class="icon icon-lg icon-spinner icon-spin"
|
|
40
|
+
:alt="i18n.t('autoscaler.card.loadingAlt')"
|
|
41
|
+
/>
|
|
42
|
+
</div>
|
|
43
|
+
|
|
44
|
+
<div
|
|
45
|
+
v-else-if="fetch.data"
|
|
46
|
+
class="details"
|
|
47
|
+
>
|
|
48
|
+
<div
|
|
49
|
+
v-for="(detail) in details"
|
|
50
|
+
:key="detail.label"
|
|
51
|
+
class="detail"
|
|
52
|
+
>
|
|
53
|
+
<label
|
|
54
|
+
v-if="detail.value"
|
|
55
|
+
class="label text-deemphasized"
|
|
56
|
+
>
|
|
57
|
+
{{ detail.label }}
|
|
58
|
+
</label>
|
|
59
|
+
<h5 v-else-if="detail.label">
|
|
60
|
+
{{ detail.label }}
|
|
61
|
+
</h5>
|
|
62
|
+
<div
|
|
63
|
+
v-if="detail.value"
|
|
64
|
+
class="value"
|
|
65
|
+
>
|
|
66
|
+
<component
|
|
67
|
+
:is="detail.value.component"
|
|
68
|
+
v-if="typeof detail.value === 'object'"
|
|
69
|
+
v-bind="detail.value.props"
|
|
70
|
+
/>
|
|
71
|
+
<span v-else>{{ detail.value }}</span>
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
<div
|
|
76
|
+
v-else
|
|
77
|
+
class="text-warning"
|
|
78
|
+
>
|
|
79
|
+
{{ i18n.t('autoscaler.card.loadingError') }}
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
</template>
|
|
83
|
+
|
|
84
|
+
<style lang="scss" scoped>
|
|
85
|
+
.autoscaler-card {
|
|
86
|
+
width: 240px;
|
|
87
|
+
|
|
88
|
+
.loading {
|
|
89
|
+
display: flex;
|
|
90
|
+
justify-content: center;
|
|
91
|
+
}
|
|
92
|
+
.detail {
|
|
93
|
+
display: flex;
|
|
94
|
+
white-space: nowrap;
|
|
95
|
+
width: 244px;
|
|
96
|
+
|
|
97
|
+
&:not(:last-of-type) {
|
|
98
|
+
margin-bottom: 8px;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
label, .value {
|
|
102
|
+
width: 50%;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
h5 {
|
|
107
|
+
margin-bottom: 0;
|
|
108
|
+
margin-top: 12px;
|
|
109
|
+
font-size: 14px;
|
|
110
|
+
font-weight: 600;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
</style>
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { useFetch } from '@shell/components/Resource/Detail/FetchLoader/composables';
|
|
3
|
+
import Tab from '@shell/components/Tabbed/Tab.vue';
|
|
4
|
+
import { useI18n } from '@shell/composables/useI18n';
|
|
5
|
+
import { computed, onMounted, ref } from 'vue';
|
|
6
|
+
import { useStore } from 'vuex';
|
|
7
|
+
import SortableTable from '@shell/components/SortableTable/index.vue';
|
|
8
|
+
import { useInterval } from '@shell/composables/useInterval';
|
|
9
|
+
|
|
10
|
+
export interface Props {
|
|
11
|
+
value: any;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface Detail {
|
|
15
|
+
label: string;
|
|
16
|
+
values: (string | { component: any; props: any })[];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const props = withDefaults(defineProps<Props>(), { value: true });
|
|
20
|
+
|
|
21
|
+
const store = useStore();
|
|
22
|
+
const i18n = useI18n(store);
|
|
23
|
+
|
|
24
|
+
const table = ref<any>(null);
|
|
25
|
+
|
|
26
|
+
const eventHeaders = [
|
|
27
|
+
{
|
|
28
|
+
name: 'type',
|
|
29
|
+
label: i18n.t('tableHeaders.type'),
|
|
30
|
+
value: '_type',
|
|
31
|
+
sort: '_type',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'reason',
|
|
35
|
+
label: i18n.t('tableHeaders.reason'),
|
|
36
|
+
value: 'reason',
|
|
37
|
+
sort: 'reason',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: 'date',
|
|
41
|
+
label: i18n.t('tableHeaders.updated'),
|
|
42
|
+
value: 'firstTimestamp',
|
|
43
|
+
sort: 'date:desc',
|
|
44
|
+
formatter: 'LiveDate',
|
|
45
|
+
formatterOpts: { addSuffix: true },
|
|
46
|
+
width: 125
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'message',
|
|
50
|
+
label: i18n.t('tableHeaders.message'),
|
|
51
|
+
value: 'message',
|
|
52
|
+
sort: 'message',
|
|
53
|
+
},
|
|
54
|
+
];
|
|
55
|
+
|
|
56
|
+
const fetch = useFetch(async() => {
|
|
57
|
+
return await props.value.loadAutoscalerEvents();
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
// From the FAQ there appears to be a 20 second target between detecting scaling needs to happen to scaling beginning
|
|
61
|
+
// so I don't see a reason to poll quicker than 20 seconds.
|
|
62
|
+
// https://github.com/kubernetes/autoscaler/blob/9befb31fd94d73ae0b888bd9536ae085cd9304e1/cluster-autoscaler/FAQ.md#what-are-the-service-level-objectives-for-cluster-autoscaler
|
|
63
|
+
useInterval(() => {
|
|
64
|
+
fetch.value.refresh();
|
|
65
|
+
}, 20000);
|
|
66
|
+
|
|
67
|
+
const rows = computed(() => {
|
|
68
|
+
return fetch.value.data || [];
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
onMounted(() => {
|
|
72
|
+
table.value?.changeSort('date', true);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
</script>
|
|
76
|
+
|
|
77
|
+
<template>
|
|
78
|
+
<Tab
|
|
79
|
+
name="autoscaler"
|
|
80
|
+
:label="i18n.t('autoscaler.tab.title')"
|
|
81
|
+
>
|
|
82
|
+
<SortableTable
|
|
83
|
+
ref="table"
|
|
84
|
+
:headers="eventHeaders"
|
|
85
|
+
:namespaced="false"
|
|
86
|
+
:row-actions="false"
|
|
87
|
+
default-sort-by="date"
|
|
88
|
+
:rows="rows"
|
|
89
|
+
/>
|
|
90
|
+
</Tab>
|
|
91
|
+
</template>
|
|
92
|
+
|
|
93
|
+
<style lang="scss" scoped>
|
|
94
|
+
</style>
|
package/components/BackLink.vue
CHANGED
|
@@ -34,8 +34,16 @@ export default {
|
|
|
34
34
|
display: flex;
|
|
35
35
|
font-size: 16px;
|
|
36
36
|
margin: 10px 0 20px 0;
|
|
37
|
+
padding: 0 4px 2px 0;
|
|
37
38
|
outline: 0;
|
|
38
39
|
width: fit-content;
|
|
40
|
+
border-bottom: 2px solid transparent;
|
|
41
|
+
|
|
42
|
+
&:hover {
|
|
43
|
+
text-decoration: none;
|
|
44
|
+
border-bottom: 2px solid;
|
|
45
|
+
border-bottom-color: inherit;
|
|
46
|
+
}
|
|
39
47
|
|
|
40
48
|
&:focus-visible {
|
|
41
49
|
@include focus-outline;
|