dashboard-shell-shell 1.0.121 → 1.0.1000000081
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/.DS_Store +0 -0
- package/assets/brand/harvester/favicon.png +0 -0
- package/assets/brand/suse/favicon.png +0 -0
- package/assets/icons/iconfont.css +19 -3
- package/assets/icons/iconfont.js +1 -1
- package/assets/icons/iconfont.json +28 -0
- package/assets/icons/iconfont.ttf +0 -0
- package/assets/icons/iconfont.woff +0 -0
- package/assets/icons/iconfont.woff2 +0 -0
- package/assets/images/pl/half-logo.svg +2 -23
- package/assets/styles/base/_functions.scss +0 -0
- package/assets/styles/base/_mixins.scss +0 -0
- package/assets/styles/base/_variables.scss +1 -1
- package/assets/styles/global/_labeled-input.scss +0 -1
- package/assets/styles/global/_layout.scss +1 -1
- package/assets/styles/global/_select.scss +4 -2
- package/assets/styles/global/_table.scss +5 -0
- package/assets/styles/vendor/vue-select.scss +2 -1
- package/assets/translations/en-us.yaml +1 -1
- package/assets/translations/zh-hans.yaml +25 -15
- package/chart/monitoring/index.vue +3 -1
- package/chart/monitoring/prometheus/index.vue +13 -10
- package/cloud-credential/aws.vue +2 -0
- package/components/ActionDropdown.vue +1 -1
- package/components/ActionDropdownShell.vue +71 -0
- package/components/ActionMenu.vue +2 -2
- package/components/ActionMenuShell.vue +3 -0
- package/components/AppModal.vue +84 -8
- package/components/AssignTo.vue +25 -11
- package/components/AsyncButton.vue +24 -7
- package/components/BannerGraphic.vue +1 -0
- package/components/ButtonDropdown.vue +26 -4
- package/components/ButtonGroup.vue +4 -0
- package/components/ButtonMultiAction.vue +1 -0
- package/components/CodeMirror.vue +19 -6
- package/components/CommunityLinks.vue +3 -3
- package/components/ConsumptionGauge.vue +24 -5
- package/components/CopyToClipboardText.vue +2 -1
- package/components/CruResource.vue +13 -7
- package/components/CruResourceFooter.vue +2 -2
- package/components/DashboardOptions.vue +29 -17
- package/components/DetailText.vue +5 -0
- package/components/DisableAuthProviderModal.vue +1 -0
- package/components/DotState.vue +84 -0
- package/components/ExplorerMembers.vue +1 -1
- package/components/ExplorerProjectsNamespaces.vue +89 -16
- package/components/FixedBanner.vue +19 -12
- package/components/GlobalRoleBindings.vue +5 -1
- package/components/GrafanaDashboard.vue +4 -4
- package/components/GrowlManager.vue +4 -1
- package/components/HardwareResourceGauge.vue +39 -3
- package/components/InfoBox.vue +3 -3
- package/components/InputOrDisplay.vue +28 -2
- package/components/LabelValue.vue +20 -1
- package/components/LandingPagePreference.vue +5 -3
- package/components/LocaleSelector.vue +39 -93
- package/components/ModalManager.vue +55 -0
- package/components/ModalWithCard.vue +13 -3
- package/components/MoveModal.vue +1 -0
- package/components/PodSecurityAdmission.vue +1 -1
- package/components/PromptChangePassword.vue +1 -1
- package/components/PromptModal.vue +16 -3
- package/components/PromptRemove.vue +29 -9
- package/components/PromptRestore.vue +1 -0
- package/components/ResourceCancelModal.vue +1 -0
- package/components/ResourceDetail/Masthead.vue +52 -17
- package/components/ResourceDetail/__tests__/Masthead.test.ts +5 -1
- package/components/ResourceDetail/index.vue +54 -16
- package/components/ResourceList/Masthead.vue +9 -4
- package/components/ResourceList/index.vue +4 -3
- package/components/ResourceTable.vue +1 -0
- package/components/SideNav.vue +20 -15
- package/components/SlideInPanelManager.vue +126 -0
- package/components/SortableTable/THead.vue +10 -4
- package/components/SortableTable/actions.js +1 -1
- package/components/SortableTable/index.vue +540 -554
- package/components/SortableTable/selection.js +2 -13
- package/components/StatusBadge.vue +77 -0
- package/components/Tabbed/Tab.vue +3 -3
- package/components/Tabbed/index.vue +47 -29
- package/components/Wizard.vue +2 -2
- package/components/YamlEditor.vue +1 -1
- package/components/__tests__/AsyncButton.test.ts +2 -2
- package/components/__tests__/FixedBanner.test.ts +3 -3
- package/components/__tests__/ModalManager.spec.ts +176 -0
- package/components/__tests__/SlideInPanelManager.spec.ts +166 -0
- package/components/auth/Principal.vue +10 -3
- package/components/auth/RoleDetailEdit.vue +1 -1
- package/components/auth/__tests__/RoleDetailEdit.test.ts +3 -2
- package/components/form/ArrayList.vue +123 -85
- package/components/form/ArrayListGrouped.vue +10 -2
- package/components/form/ArrayListSelect.vue +1 -1
- package/components/form/Command.vue +6 -15
- package/components/form/EnvVars.vue +16 -8
- package/components/form/Footer.vue +10 -7
- package/components/form/HealthCheck.vue +3 -3
- package/components/form/HookOption.vue +11 -16
- package/components/form/InputWithSelect.vue +6 -5
- package/components/form/KeyValue.vue +39 -10
- package/components/form/LabeledSelect.vue +73 -77
- package/components/form/Labels.vue +6 -3
- package/components/form/LifecycleHooks.vue +3 -3
- package/components/form/MatchExpressions.vue +42 -17
- package/components/form/NameNsDescription.vue +163 -116
- package/components/form/Networking.vue +20 -12
- package/components/form/NodeAffinity.vue +31 -23
- package/components/form/NodeScheduling.vue +13 -3
- package/components/form/Password.vue +11 -5
- package/components/form/PodAffinity.vue +47 -48
- package/components/form/Probe.vue +68 -66
- package/components/form/ResourceQuota/Namespace.vue +4 -4
- package/components/form/ResourceQuota/NamespaceRow.vue +5 -7
- package/components/form/ResourceQuota/Project.vue +9 -5
- package/components/form/ResourceQuota/ProjectRow.vue +4 -6
- package/components/form/ResourceSelector.vue +7 -9
- package/components/form/SSHKnownHosts/KnownHostsEditDialog.vue +6 -3
- package/components/form/SSHKnownHosts/__tests__/KnownHostsEditDialog.test.ts +12 -1
- package/components/form/SSHKnownHosts/index.vue +16 -2
- package/components/form/Security.vue +54 -56
- package/components/form/Select.vue +44 -7
- package/components/form/ShellInput.vue +5 -1
- package/components/form/SimpleSecretSelector.vue +29 -9
- package/components/form/Tolerations.vue +5 -1
- package/components/form/UnitInput.vue +10 -5
- package/components/form/ValueFromResource.vue +134 -121
- package/components/form/WorkloadPorts.vue +18 -18
- package/components/form/__tests__/ArrayList.test.ts +5 -2
- package/components/form/__tests__/MatchExpressions.test.ts +12 -12
- package/components/form/__tests__/NameNsDescription.test.ts +115 -14
- package/components/form/__tests__/Probe.test.ts +12 -8
- package/components/form/__tests__/SSHKnownHosts.test.ts +11 -0
- package/components/form/__tests__/Select.test.ts +37 -0
- package/components/form/__tests__/UnitInput.test.ts +4 -5
- package/components/formatter/BadgeStateFormatter.vue +8 -5
- package/components/formatter/InternalExternalIP.vue +2 -0
- package/components/formatter/LiveDate.vue +3 -3
- package/components/formatter/SecretData.vue +20 -7
- package/components/nav/Favorite.vue +5 -1
- package/components/nav/Group.vue +18 -4
- package/components/nav/Header.vue +39 -13
- package/components/nav/Jump.vue +7 -0
- package/components/nav/NamespaceFilter.vue +21 -11
- package/components/nav/Pinned.vue +1 -1
- package/components/nav/TopLevelMenu.vue +5 -17
- package/components/nav/Type.vue +30 -33
- package/components/nav/__tests__/TopLevelMenu.test.ts +0 -40
- package/components/rancherResourceDetail/Masthead.vue +769 -0
- package/components/rancherResourceDetail/__tests__/Masthead.test.ts +65 -0
- package/components/rancherResourceDetail/index.vue +591 -0
- package/components/rancherResourceList/Masthead-btn.vue +225 -0
- package/components/rancherResourceList/Masthead.vue +375 -0
- package/components/rancherResourceList/ResourceLoadingIndicator.vue +140 -0
- package/components/rancherResourceList/index.vue +307 -0
- package/components/rancherResourceList/resource-list.config.js +7 -0
- package/components/rancherResourceTable.vue +783 -0
- package/components/rancherSortableTable/THead.vue +561 -0
- package/components/rancherSortableTable/actions.js +153 -0
- package/components/rancherSortableTable/advanced-filtering.js +272 -0
- package/components/rancherSortableTable/debug.js +117 -0
- package/components/rancherSortableTable/filtering.js +290 -0
- package/components/rancherSortableTable/grouping.js +48 -0
- package/components/rancherSortableTable/index.vue +2712 -0
- package/components/rancherSortableTable/paging.js +155 -0
- package/components/rancherSortableTable/selection.js +629 -0
- package/components/rancherSortableTable/sortable-config.ts +4 -0
- package/components/rancherSortableTable/sorting.js +129 -0
- package/components/templates/blank.vue +4 -1
- package/components/templates/default.vue +8 -0
- package/components/templates/home.vue +10 -1
- package/components/templates/plain.vue +10 -1
- package/composables/focusTrap.ts +11 -3
- package/composables/useRuntimeFlag.ts +29 -0
- package/config/private-label.js +15 -10
- package/config/router/routes.js +21 -13
- package/config/store.js +4 -0
- package/config/table-headers.js +3 -2
- package/config/uiplugins.js +5 -1
- package/core/plugin-routes.ts +5 -115
- package/core/plugins.js +1 -1
- package/core/types.ts +23 -2
- package/detail/__tests__/autoscaling.horizontalpodautoscaler.test.ts +84 -23
- package/detail/autoscaling.horizontalpodautoscaler/index.vue +13 -3
- package/detail/provisioning.cattle.io.cluster.vue +72 -6
- package/dialog/AddCustomBadgeDialog.vue +1 -0
- package/dialog/DeactivateDriverDialog.vue +5 -4
- package/dialog/ForceMachineRemoveDialog.vue +6 -3
- package/dialog/GitRepoForceUpdateDialog.vue +1 -1
- package/dialog/ScalePoolDownDialog.vue +2 -2
- package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +16 -3
- package/edit/auth/__tests__/oidc.test.ts +162 -88
- package/edit/auth/azuread.vue +2 -1
- package/edit/auth/github.vue +1 -1
- package/edit/auth/googleoauth.vue +5 -1
- package/edit/auth/ldap/__tests__/config.test.ts +0 -14
- package/edit/auth/ldap/config.vue +0 -24
- package/edit/auth/ldap/index.vue +1 -1
- package/edit/auth/oidc.vue +39 -6
- package/edit/auth/saml.vue +1 -1
- package/edit/autoscaling.horizontalpodautoscaler/metric-identifier.vue +5 -2
- package/edit/cloudcredential.vue +24 -9
- package/edit/fleet.cattle.io.clustergroup.vue +5 -3
- package/edit/fleet.cattle.io.gitrepo.vue +2 -0
- package/edit/logging-flow/Match.vue +1 -1
- package/edit/logging.banzaicloud.io.output/__tests__/logging.banzaicloud.io.output.test.ts +40 -9
- package/edit/management.cattle.io.user.vue +28 -3
- package/edit/monitoring.coreos.com.alertmanagerconfig/auth.vue +19 -19
- package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +31 -31
- package/edit/monitoring.coreos.com.alertmanagerconfig/routeConfig.vue +36 -12
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/email.vue +6 -6
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +10 -10
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +4 -4
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +4 -4
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/webhook.vue +1 -1
- package/edit/monitoring.coreos.com.receiver/auth.vue +29 -29
- package/edit/monitoring.coreos.com.receiver/types/email.vue +6 -6
- package/edit/monitoring.coreos.com.receiver/types/opsgenie.vue +10 -10
- package/edit/monitoring.coreos.com.receiver/types/pagerduty.vue +5 -5
- package/edit/monitoring.coreos.com.receiver/types/slack.vue +4 -4
- package/edit/namespace.vue +1 -2
- package/edit/networking.k8s.io.ingress/IngressClass.vue +7 -3
- package/edit/networking.k8s.io.ingress/RulePath.vue +1 -1
- package/edit/networking.k8s.io.ingress/__tests__/IngressClass.test.ts +58 -0
- package/edit/persistentvolume/__tests__/persistentvolume.test.ts +14 -2
- package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +4 -1
- package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +26 -9
- package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +8 -10
- package/edit/provisioning.cattle.io.cluster/rke2.vue +31 -40
- package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +5 -2
- package/edit/provisioning.cattle.io.cluster/tabs/AgentConfiguration.vue +6 -1
- package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +33 -2
- package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +3 -3
- package/edit/service.vue +0 -3
- package/edit/token.vue +32 -11
- package/edit/workload/Job.vue +6 -6
- package/edit/workload/__tests__/Job.test.ts +0 -1
- package/edit/workload/index.vue +1 -0
- package/edit/workload/mixins/workload.js +3 -3
- package/initialize/install-plugins.js +2 -1
- package/list/harvesterhci.io.management.cluster.vue +4 -1
- package/list/management.cattle.io.feature.vue +1 -0
- package/list/namespace.vue +3 -1
- package/list/provisioning.cattle.io.cluster.vue +20 -12
- package/list/workload.vue +7 -6
- package/machine-config/__tests__/vmwarevsphere.test.ts +48 -3
- package/machine-config/azure.vue +16 -4
- package/machine-config/vmwarevsphere.vue +16 -0
- package/mixins/resource-fetch.js +2 -1
- package/models/__tests__/logging.banzaicloud.io.flow.test.ts +88 -0
- package/models/__tests__/namespace.test.ts +25 -1
- package/models/cloudcredential.js +5 -0
- package/models/kontainerdriver.js +6 -3
- package/models/logging.banzaicloud.io.flow.js +2 -1
- package/models/management.cattle.io.node.js +3 -3
- package/models/management.cattle.io.setting.js +2 -1
- package/models/namespace.js +4 -5
- package/models/nodedriver.js +6 -3
- package/models/storage.k8s.io.storageclass.js +2 -2
- package/models/workload.js +4 -1
- package/package.json +1 -1
- package/pages/about.vue +16 -8
- package/pages/account/index.vue +80 -24
- package/pages/account/pri.vue +229 -0
- package/pages/auth/login.vue +195 -44
- package/pages/auth/logout.vue +4 -1
- package/pages/auth/setup.vue +144 -19
- package/pages/auth/verify.vue +13 -8
- package/pages/auth copy/login.vue +595 -0
- package/pages/auth copy/logout.vue +47 -0
- package/pages/auth copy/setup.vue +523 -0
- package/pages/auth copy/verify.vue +203 -0
- package/pages/c/_cluster/_product/namespaces.vue +5 -5
- package/pages/c/_cluster/apps/charts/chart.vue +1 -1
- package/pages/c/_cluster/apps/charts/install.vue +26 -26
- package/pages/c/_cluster/auth/config/index.vue +10 -12
- package/pages/c/_cluster/explorer/EventsTable.vue +38 -33
- package/pages/c/_cluster/explorer/index.vue +17 -15
- package/pages/c/_cluster/istio/index.vue +2 -2
- package/pages/c/_cluster/longhorn/index.vue +1 -1
- package/pages/c/_cluster/monitoring/index.vue +1 -1
- package/pages/c/_cluster/monitoring/monitor/_namespace/_id.vue +4 -2
- package/pages/c/_cluster/monitoring/monitor/create.vue +4 -2
- package/pages/c/_cluster/monitoring/monitor/index.vue +2 -2
- package/pages/c/_cluster/monitoring/route-receiver/_id.vue +4 -2
- package/pages/c/_cluster/monitoring/route-receiver/create.vue +5 -2
- package/pages/c/_cluster/neuvector/index.vue +1 -1
- package/pages/c/_cluster/settings/brand.vue +3 -3
- package/pages/c/_cluster/uiplugins/CatalogList/index.vue +8 -10
- package/pages/diagnostic.vue +59 -11
- package/pages/fail-whale.vue +14 -8
- package/pages/home.vue +24 -18
- package/pages/prefs.vue +9 -7
- package/pages/support/index.vue +4 -1
- package/pkg/tsconfig.json +9 -9
- package/pkg/vue.config.js +1 -1
- package/plugins/dashboard-store/normalize.js +3 -1
- package/plugins/dashboard-store/resource-class.js +31 -29
- package/plugins/internal-api/index.ts +37 -0
- package/plugins/internal-api/shared/base-api.ts +13 -0
- package/plugins/internal-api/shell/shell.api.ts +108 -0
- package/promptRemove/management.cattle.io.fleetworkspace.vue +1 -1
- package/promptRemove/management.cattle.io.globalrole.vue +1 -1
- package/promptRemove/management.cattle.io.project.vue +2 -2
- package/promptRemove/management.cattle.io.roletemplate.vue +1 -1
- package/promptRemove/pod.vue +1 -1
- package/public/index.html +2 -1
- package/rancher-components/BadgeState/BadgeState.vue +5 -1
- package/rancher-components/Banner/Banner.vue +8 -2
- package/rancher-components/Card/Card.vue +3 -6
- package/rancher-components/Form/Checkbox/Checkbox.vue +4 -0
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +5 -2
- package/rancher-components/Form/Radio/RadioButton.vue +3 -3
- package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +1 -5
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
- package/rancher-components/RcDropdown/RcDropdownItem.vue +1 -2
- package/rancher-components/RcDropdown/RcDropdownMenu.vue +7 -3
- package/rancher-components/RcDropdown/types.ts +1 -0
- package/scripts/clean +0 -0
- package/scripts/extension/bundle +20 -0
- package/scripts/extension/helm/charts/ui-plugin-server/templates/_helpers.tpl +2 -2
- package/scripts/extension/helm/charts/ui-plugin-server/templates/cr.yaml +2 -1
- package/scripts/extension/helm/charts/ui-plugin-server/values.yaml +2 -0
- package/scripts/extension/helm/scripts/package +0 -0
- package/scripts/extension/helm/scripts/patch +0 -0
- package/scripts/extension/helm/scripts/version +0 -0
- package/scripts/extension/helmpatch +44 -31
- package/scripts/extension/parse-tag-name +0 -0
- package/scripts/extension/publish +12 -12
- package/scripts/publish-shell.sh +18 -23
- package/scripts/serve-pkgs +0 -0
- package/scripts/sync-shell-deps +0 -0
- package/scripts/test-plugins-build.sh +4 -6
- package/scripts/typegen.sh +28 -46
- package/server/har-file.js +25 -3
- package/static/favicon.ico +0 -0
- package/static/favicon.png +0 -0
- package/static/loading-indicator.html +2 -2
- package/store/aws.js +9 -2
- package/store/features.js +2 -1
- package/store/i18n.js +3 -3
- package/store/modal.ts +71 -0
- package/store/slideInPanel.ts +47 -0
- package/store/type-map.js +2 -1
- package/types/cloud-shell/index.d.ts +11014 -0
- package/types/global-vue.d.ts +5 -0
- package/types/internal-api/shell/growl.d.ts +25 -0
- package/types/internal-api/shell/modal.d.ts +77 -0
- package/types/internal-api/shell/slideIn.d.ts +15 -0
- package/types/shell/index.d.ts +118 -128
- package/types/vue-shim.d.ts +4 -1
- package/utils/__tests__/object.test.ts +38 -4
- package/utils/__tests__/string.test.ts +2 -2
- package/utils/auth.js +1 -0
- package/utils/banners.js +0 -45
- package/utils/cluster.js +35 -0
- package/utils/color.js +9 -8
- package/utils/error.js +61 -3
- package/utils/errorTranslate.json +450 -30
- package/utils/object.js +46 -6
- package/utils/router.js +22 -1
- package/utils/select.js +26 -3
- package/utils/string.js +9 -8
- package/utils/title.ts +1 -1
- package/utils/validators/machine-pool.ts +20 -0
- package/vue.config.js +7 -2
- package/components/formatter/ExtensionCache.vue +0 -74
- package/components/formatter/Port.vue +0 -24
- package/components/formatter/SecretType.vue +0 -41
- package/types/resources/fleet.d.ts +0 -57
- package/types/resources/pod-security-admission.ts +0 -36
- package/types/resources/settings.d.ts +0 -93
- package/types/resources/userPreferences.d.ts +0 -13
- package/types/vue-shim.d +0 -20
package/core/types.ts
CHANGED
|
@@ -373,6 +373,11 @@ export interface ConfigureTypeOptions {
|
|
|
373
373
|
*/
|
|
374
374
|
customRoute?: Object;
|
|
375
375
|
|
|
376
|
+
/**
|
|
377
|
+
* Custom options vary pre resource type
|
|
378
|
+
*/
|
|
379
|
+
custom?: any;
|
|
380
|
+
|
|
376
381
|
/**
|
|
377
382
|
* Leaving these here for completeness but I don't think these should be advertised as useable to plugin creators.
|
|
378
383
|
*/
|
|
@@ -471,6 +476,24 @@ export interface DSLReturnType {
|
|
|
471
476
|
*/
|
|
472
477
|
virtualType: (options: ConfigureVirtualTypeOptions) => void;
|
|
473
478
|
|
|
479
|
+
/**
|
|
480
|
+
* Side menu ordering for grouping of pages
|
|
481
|
+
* @param input Name of the group
|
|
482
|
+
* @param weight Ordering to be applied for the specified group
|
|
483
|
+
* @param forBasic Apply to basic type instead of regular type tree
|
|
484
|
+
* @returns {@link void}
|
|
485
|
+
*/
|
|
486
|
+
weightGroup: (input: string, weight: number, forBasic: boolean) => void;
|
|
487
|
+
|
|
488
|
+
/**
|
|
489
|
+
* Side menu ordering for simple pages
|
|
490
|
+
* @param input Name of the page/resource
|
|
491
|
+
* @param weight Ordering to be applied for the specified page/resource
|
|
492
|
+
* @param forBasic Apply to basic type instead of regular type tree
|
|
493
|
+
* @returns {@link void}
|
|
494
|
+
*/
|
|
495
|
+
weightType: (input: string, weight: number, forBasic: boolean) => void;
|
|
496
|
+
|
|
474
497
|
/**
|
|
475
498
|
* Leaving these here for completeness but I don't think these should be advertised as useable to plugin creators.
|
|
476
499
|
*/
|
|
@@ -484,8 +507,6 @@ export interface DSLReturnType {
|
|
|
484
507
|
// moveType: (match, group)
|
|
485
508
|
// setGroupDefaultType: (input, defaultType)
|
|
486
509
|
// spoofedType: (obj)
|
|
487
|
-
// weightGroup: (input, weight, forBasic)
|
|
488
|
-
// weightType: (input, weight, forBasic)
|
|
489
510
|
}
|
|
490
511
|
|
|
491
512
|
/**
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { mount } from '@vue/test-utils';
|
|
2
|
+
import camelCase from 'lodash/camelCase';
|
|
2
3
|
import HorizontalPodAutoScaler from '@shell/detail/autoscaling.horizontalpodautoscaler/index.vue';
|
|
3
4
|
|
|
4
5
|
describe('view: autoscaling.horizontalpodautoscaler', () => {
|
|
@@ -43,7 +44,7 @@ describe('view: autoscaling.horizontalpodautoscaler', () => {
|
|
|
43
44
|
|
|
44
45
|
};
|
|
45
46
|
|
|
46
|
-
const
|
|
47
|
+
const valueWithResourceMetrics = {
|
|
47
48
|
status: {
|
|
48
49
|
currentMetrics: [
|
|
49
50
|
{
|
|
@@ -100,36 +101,96 @@ describe('view: autoscaling.horizontalpodautoscaler', () => {
|
|
|
100
101
|
}
|
|
101
102
|
}
|
|
102
103
|
};
|
|
104
|
+
const valueWithOtherMetrics = {
|
|
105
|
+
status: {
|
|
106
|
+
currentMetrics: [
|
|
103
107
|
|
|
104
|
-
|
|
105
|
-
|
|
108
|
+
{
|
|
109
|
+
external: {
|
|
110
|
+
metric: { name: 's1-prometheus' },
|
|
111
|
+
current: { averageValue: 50 }
|
|
112
|
+
},
|
|
113
|
+
type: 'External'
|
|
106
114
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
115
|
+
}
|
|
116
|
+
],
|
|
117
|
+
},
|
|
118
|
+
spec: {
|
|
119
|
+
metrics: [
|
|
120
|
+
{
|
|
121
|
+
external: {
|
|
122
|
+
metric: { name: 's1-prometheus' },
|
|
123
|
+
target: { averageValue: 50, type: 'AverageValue' }
|
|
124
|
+
},
|
|
125
|
+
type: 'External'
|
|
126
|
+
}
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
;
|
|
111
131
|
|
|
112
|
-
describe
|
|
113
|
-
const
|
|
132
|
+
describe('with resource metrics:', () => {
|
|
133
|
+
const metricsValue = Object.values(valueWithResourceMetrics.spec.metrics);
|
|
134
|
+
const currentMetrics = Object.values(valueWithResourceMetrics.status.currentMetrics);
|
|
114
135
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
const metricValue = metricsValue.find((f) => f.resource.name === name)?.resource;
|
|
136
|
+
const wrapper = mount(HorizontalPodAutoScaler, {
|
|
137
|
+
props: { value: valueWithResourceMetrics },
|
|
138
|
+
global: { mocks, stubs },
|
|
139
|
+
});
|
|
120
140
|
|
|
121
|
-
|
|
122
|
-
const
|
|
123
|
-
const averageValue = wrapper.get(`[data-testid="current-metrics-Average Value-${ name }"]`);
|
|
124
|
-
const currentResource = currentMetrics.find((f) => f.resource.name === name)?.resource.current;
|
|
141
|
+
describe.each(valueWithResourceMetrics.spec.metrics)('should display metrics for each resource:', (metric) => {
|
|
142
|
+
const name = metric.resource.name;
|
|
125
143
|
|
|
144
|
+
it(`${ name }:`, () => {
|
|
126
145
|
// Resource metrics
|
|
127
|
-
|
|
128
|
-
|
|
146
|
+
const resourceValue = wrapper.get(`[data-testid="resource-metrics-value-${ name }"]`);
|
|
147
|
+
const resourceName = wrapper.get(`[data-testid="resource-metrics-name-${ name }"]`);
|
|
148
|
+
const metricValue = metricsValue.find((f) => f.resource.name === name)?.resource;
|
|
149
|
+
|
|
150
|
+
// Current Metrics
|
|
151
|
+
const averageUtilization = wrapper.get(`[data-testid="current-metrics-Average Utilization-${ name }"]`);
|
|
152
|
+
const averageValue = wrapper.get(`[data-testid="current-metrics-Average Value-${ name }"]`);
|
|
153
|
+
const currentResource = currentMetrics.find((f) => f.resource.name === name)?.resource.current;
|
|
154
|
+
|
|
155
|
+
// Resource metrics
|
|
156
|
+
expect(resourceValue.element.textContent).toBe(`${ metricValue?.target?.averageUtilization }`);
|
|
157
|
+
expect(resourceName.element.textContent).toBe(`${ metricValue?.name }`);
|
|
158
|
+
|
|
159
|
+
// Current Metrics
|
|
160
|
+
expect(averageUtilization.element.textContent).toBe(`${ currentResource?.averageUtilization }`);
|
|
161
|
+
expect(averageValue.element.textContent).toBe(`${ currentResource?.averageValue }`);
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
describe('with other metrics:', () => {
|
|
167
|
+
const currentMetrics = Object.values(valueWithOtherMetrics.status.currentMetrics);
|
|
168
|
+
|
|
169
|
+
const wrapper = mount(HorizontalPodAutoScaler, {
|
|
170
|
+
props: { value: valueWithOtherMetrics },
|
|
171
|
+
global: { mocks, stubs },
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
describe.each(valueWithOtherMetrics.spec.metrics)('should display metrics for each resource:', (metric) => {
|
|
175
|
+
const metricType = camelCase(metric.type);
|
|
176
|
+
const name = metric[metricType as keyof typeof metric].metric.name;
|
|
177
|
+
|
|
178
|
+
it(`${ name }:`, () => {
|
|
179
|
+
// Resource metrics
|
|
180
|
+
const resourceValue = wrapper.get(`[data-testid="resource-metrics-value-${ name }"]`);
|
|
181
|
+
const metricValue = metric[metricType as keyof typeof metric];
|
|
182
|
+
|
|
183
|
+
// Current Metrics
|
|
184
|
+
const averageValue = wrapper.get(`[data-testid="current-metrics-Average Value-${ name }"]`);
|
|
185
|
+
const currentMatch = currentMetrics.find((f) => f[metricType as keyof typeof metric]?.metric.name === name);
|
|
186
|
+
const currentValue = currentMatch[metricType as keyof typeof metric]?.current;
|
|
187
|
+
|
|
188
|
+
// Resource metrics
|
|
189
|
+
expect(resourceValue.element.textContent).toBe(`${ metricValue?.target?.averageValue }`);
|
|
129
190
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
191
|
+
// Current Metrics
|
|
192
|
+
expect(averageValue.element.textContent).toBe(`${ currentValue?.averageValue }`);
|
|
193
|
+
});
|
|
133
194
|
});
|
|
134
195
|
});
|
|
135
196
|
});
|
|
@@ -43,11 +43,21 @@ export default {
|
|
|
43
43
|
} = this.value;
|
|
44
44
|
|
|
45
45
|
return metrics.map((metric) => {
|
|
46
|
+
const currentMetricsKVs = [];
|
|
47
|
+
let currentMatch;
|
|
48
|
+
const metricType = camelCase(metric.type);
|
|
46
49
|
const metricValue = get(metric, camelCase(metric.type));
|
|
47
50
|
const targetType = metricValue?.target?.type;
|
|
48
|
-
|
|
51
|
+
|
|
52
|
+
// The format is different between 'Resource' metrics and others.
|
|
53
|
+
// See for examples: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#appendix-horizontal-pod-autoscaler-status-conditions
|
|
54
|
+
if (metricType !== 'resource') {
|
|
55
|
+
currentMatch = findBy(currentMetrics, `${ metricType }.metric.name`, metricValue.metric.name);
|
|
56
|
+
} else {
|
|
57
|
+
currentMatch = findBy(currentMetrics, 'resource.name', metric.resource.name);
|
|
58
|
+
}
|
|
59
|
+
|
|
49
60
|
const current = currentMatch ? get(currentMatch, `${ camelCase(metric.type) }.current`) : null;
|
|
50
|
-
const currentMetricsKVs = [];
|
|
51
61
|
|
|
52
62
|
if (current) {
|
|
53
63
|
keys(current).forEach((k) => {
|
|
@@ -67,7 +77,7 @@ export default {
|
|
|
67
77
|
objectApiVersion: metricValue?.describedObject?.apiVersion ?? null,
|
|
68
78
|
objectKind: metricValue?.describedObject?.kind ?? null,
|
|
69
79
|
objectName: metricValue?.describedObject?.name ?? null,
|
|
70
|
-
resourceName: metricValue?.name
|
|
80
|
+
resourceName: metricValue?.name || metricValue?.metric?.name || null,
|
|
71
81
|
currentMetrics: currentMetricsKVs,
|
|
72
82
|
},
|
|
73
83
|
};
|
|
@@ -215,6 +215,41 @@ export default {
|
|
|
215
215
|
},
|
|
216
216
|
|
|
217
217
|
data() {
|
|
218
|
+
const noneGroupOption = {
|
|
219
|
+
tooltipKey: 'resourceTable.groupBy.none',
|
|
220
|
+
icon: 'icon-list-flat',
|
|
221
|
+
value: 'none',
|
|
222
|
+
};
|
|
223
|
+
const poolColumn = {
|
|
224
|
+
name: 'pool',
|
|
225
|
+
labelKey: 'cluster.machinePool.name.label',
|
|
226
|
+
value: 'spec.nodePoolName',
|
|
227
|
+
getValue: (row) => row.spec.nodePoolName,
|
|
228
|
+
sort: ['spec.nodePoolName'],
|
|
229
|
+
};
|
|
230
|
+
const poolGroupOption = {
|
|
231
|
+
tooltipKey: 'resourceTable.groupBy.pool',
|
|
232
|
+
icon: 'icon-cluster',
|
|
233
|
+
hideColumn: poolColumn.name,
|
|
234
|
+
value: 'spec.nodePoolName',
|
|
235
|
+
field: 'spec.nodePoolName'
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
const machineColumn = {
|
|
239
|
+
name: 'pool',
|
|
240
|
+
labelKey: 'cluster.machinePool.name.label',
|
|
241
|
+
value: 'pool.nameDisplay',
|
|
242
|
+
getValue: (row) => row.pool.nameDisplay,
|
|
243
|
+
sort: ['pool.nameDisplay'],
|
|
244
|
+
};
|
|
245
|
+
const machineGroupOption = {
|
|
246
|
+
tooltipKey: 'resourceTable.groupBy.pool',
|
|
247
|
+
icon: 'icon-cluster',
|
|
248
|
+
hideColumn: machineColumn.name,
|
|
249
|
+
value: 'poolId',
|
|
250
|
+
field: 'poolId'
|
|
251
|
+
};
|
|
252
|
+
|
|
218
253
|
return {
|
|
219
254
|
|
|
220
255
|
allMachines: [],
|
|
@@ -250,7 +285,25 @@ export default {
|
|
|
250
285
|
conditions: true, // in ResourceTabs
|
|
251
286
|
},
|
|
252
287
|
|
|
253
|
-
showWindowsWarning: false
|
|
288
|
+
showWindowsWarning: false,
|
|
289
|
+
|
|
290
|
+
machineColumn,
|
|
291
|
+
poolColumn,
|
|
292
|
+
|
|
293
|
+
noneGroupOption,
|
|
294
|
+
|
|
295
|
+
machineGroupOption,
|
|
296
|
+
machineGroupOptions: [
|
|
297
|
+
noneGroupOption,
|
|
298
|
+
machineGroupOption
|
|
299
|
+
],
|
|
300
|
+
|
|
301
|
+
poolGroupOption,
|
|
302
|
+
poolGroupOptions: [
|
|
303
|
+
noneGroupOption,
|
|
304
|
+
poolGroupOption,
|
|
305
|
+
]
|
|
306
|
+
|
|
254
307
|
};
|
|
255
308
|
},
|
|
256
309
|
|
|
@@ -416,7 +469,7 @@ export default {
|
|
|
416
469
|
},
|
|
417
470
|
|
|
418
471
|
machineHeaders() {
|
|
419
|
-
|
|
472
|
+
const headers = [
|
|
420
473
|
STATE,
|
|
421
474
|
NAME_COL,
|
|
422
475
|
{
|
|
@@ -433,10 +486,16 @@ export default {
|
|
|
433
486
|
ROLES,
|
|
434
487
|
AGE,
|
|
435
488
|
];
|
|
489
|
+
|
|
490
|
+
if (!this.value.isCustom) {
|
|
491
|
+
headers.splice(3, 0, this.machineColumn);
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
return headers;
|
|
436
495
|
},
|
|
437
496
|
|
|
438
497
|
mgmtNodeSchemaHeaders() {
|
|
439
|
-
|
|
498
|
+
const headers = [
|
|
440
499
|
STATE, NAME_COL,
|
|
441
500
|
{
|
|
442
501
|
name: 'node-name',
|
|
@@ -452,6 +511,12 @@ export default {
|
|
|
452
511
|
ROLES,
|
|
453
512
|
AGE
|
|
454
513
|
];
|
|
514
|
+
|
|
515
|
+
if (!this.value.isCustom) {
|
|
516
|
+
headers.splice(3, 0, this.poolColumn);
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
return headers;
|
|
455
520
|
},
|
|
456
521
|
|
|
457
522
|
rke1Snapshots() {
|
|
@@ -772,11 +837,11 @@ export default {
|
|
|
772
837
|
:schema="machineSchema"
|
|
773
838
|
:headers="machineHeaders"
|
|
774
839
|
default-sort-by="name"
|
|
775
|
-
:group-by="value.isCustom ? null : 'poolId'"
|
|
776
840
|
group-ref="pool"
|
|
841
|
+
:group-default="machineGroupOption.value"
|
|
777
842
|
:group-sort="['pool.nameDisplay']"
|
|
843
|
+
:group-options="value.isCustom ? [noneGroupOption] : machineGroupOptions"
|
|
778
844
|
:sort-generation-fn="machineSortGenerationFn"
|
|
779
|
-
:hide-grouping-controls="true"
|
|
780
845
|
>
|
|
781
846
|
<template #main-row:isFake="{fullColspan}">
|
|
782
847
|
<tr class="main-row">
|
|
@@ -859,9 +924,10 @@ export default {
|
|
|
859
924
|
:schema="mgmtNodeSchema"
|
|
860
925
|
:headers="mgmtNodeSchemaHeaders"
|
|
861
926
|
:rows="nodes"
|
|
862
|
-
:group-by="value.isCustom ? null : 'spec.nodePoolName'"
|
|
863
927
|
group-ref="pool"
|
|
928
|
+
:group-default="poolGroupOption.value"
|
|
864
929
|
:group-sort="['pool.nameDisplay']"
|
|
930
|
+
:group-options="value.isCustom ? [noneGroupOption] : poolGroupOptions"
|
|
865
931
|
:sort-generation-fn="nodeSortGenerationFn"
|
|
866
932
|
:hide-grouping-controls="true"
|
|
867
933
|
>
|
|
@@ -31,12 +31,12 @@ export default {
|
|
|
31
31
|
},
|
|
32
32
|
computed: {
|
|
33
33
|
formattedText() {
|
|
34
|
-
const
|
|
35
|
-
const count =
|
|
36
|
-
const remaining =
|
|
34
|
+
const driverNames = this.drivers.map((obj) => obj.nameDisplay);
|
|
35
|
+
const count = driverNames.length;
|
|
36
|
+
const remaining = driverNames.length > 5 ? driverNames.length - 5 : 0;
|
|
37
37
|
|
|
38
38
|
const plusMore = this.t('drivers.deactivate.andOthers', { count: remaining });
|
|
39
|
-
const names = resourceNames(
|
|
39
|
+
const names = resourceNames(driverNames, plusMore, this.t, false);
|
|
40
40
|
const warningDrivers = this.t('drivers.deactivate.warningDrivers', { names, count });
|
|
41
41
|
|
|
42
42
|
return this.t('drivers.deactivate.warning', { warningDrivers, count });
|
|
@@ -91,6 +91,7 @@ export default {
|
|
|
91
91
|
:key="i"
|
|
92
92
|
color="error"
|
|
93
93
|
:label="err"
|
|
94
|
+
data-testid="deactivate-driver-error-banner"
|
|
94
95
|
/>
|
|
95
96
|
</div>
|
|
96
97
|
</template>
|
|
@@ -88,16 +88,19 @@ export default {
|
|
|
88
88
|
{{ t('promptForceRemove.confirmName') }}
|
|
89
89
|
</div>
|
|
90
90
|
<div class="mb-10">
|
|
91
|
-
<CopyToClipboardText
|
|
91
|
+
<CopyToClipboardText
|
|
92
|
+
:aria-label="t('promptForceRemove.ariaLabel')"
|
|
93
|
+
:text="nameToMatch"
|
|
94
|
+
/>
|
|
92
95
|
</div>
|
|
93
96
|
<input
|
|
94
97
|
id="confirm"
|
|
95
98
|
v-model="confirmName"
|
|
96
99
|
type="text"
|
|
97
100
|
>
|
|
98
|
-
<div class="text-info mt-20">
|
|
101
|
+
<!-- <div class="text-info mt-20">
|
|
99
102
|
{{ protip }}
|
|
100
|
-
</div>
|
|
103
|
+
</div> -->
|
|
101
104
|
<Banner
|
|
102
105
|
v-for="(error, i) in errors"
|
|
103
106
|
:key="i"
|
|
@@ -2,14 +2,23 @@ import { mount } from '@vue/test-utils';
|
|
|
2
2
|
import FormValidation from '@shell/mixins/form-validation';
|
|
3
3
|
import Monitoring from '@shell/edit/monitoring.coreos.com.prometheusrule/index.vue';
|
|
4
4
|
import { _EDIT } from '@shell/config/query-params';
|
|
5
|
+
import { createStore } from 'vuex';
|
|
5
6
|
|
|
6
7
|
describe('edit: management.cattle.io.setting should', () => {
|
|
7
8
|
const MOCKED_ERRORS = ['error1', 'error2', 'error3', 'error4', 'error5'];
|
|
8
9
|
const ERROR_BANNER_SELECTOR = '[data-testid="banner-close"]';
|
|
10
|
+
const store = createStore({
|
|
11
|
+
getters: {
|
|
12
|
+
namespaces: () => () => ({}),
|
|
13
|
+
currentStore: () => () => 'current_store',
|
|
14
|
+
'current_store/schemaFor': () => jest.fn()
|
|
15
|
+
}
|
|
16
|
+
});
|
|
9
17
|
const requiredSetup = () => ({
|
|
10
18
|
// Remove all these mocks after migration to Vue 2.7/3 due mixin logic
|
|
11
19
|
global: {
|
|
12
|
-
|
|
20
|
+
provide: { store },
|
|
21
|
+
mocks: {
|
|
13
22
|
$store: {
|
|
14
23
|
dispatch: jest.fn(),
|
|
15
24
|
getters: {
|
|
@@ -35,8 +44,12 @@ describe('edit: management.cattle.io.setting should', () => {
|
|
|
35
44
|
canYaml: false,
|
|
36
45
|
mode: _EDIT,
|
|
37
46
|
resource: {},
|
|
38
|
-
value: {
|
|
39
|
-
|
|
47
|
+
value: {
|
|
48
|
+
setAnnotation: jest.fn(),
|
|
49
|
+
value: 'anything',
|
|
50
|
+
metadata: {},
|
|
51
|
+
},
|
|
52
|
+
name: ''
|
|
40
53
|
},
|
|
41
54
|
...requiredSetup()
|
|
42
55
|
});
|