@rancher/shell 3.0.12-rc.1 → 3.0.12-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apis/impl/apis.ts +6 -0
- package/apis/index.ts +26 -0
- package/apis/intf/resources-api/cluster-api.ts +18 -0
- package/apis/intf/resources-api/mgmt-api.ts +15 -0
- package/apis/intf/resources-api/resource-base.ts +107 -0
- package/apis/intf/resources-api/resource-constants.ts +147 -0
- package/apis/intf/resources-api/resources-api.ts +143 -0
- package/apis/intf/resources.ts +49 -0
- package/apis/intf/{modal.ts → shell-api/modal.ts} +21 -26
- package/apis/intf/shell-api/proxy.ts +216 -0
- package/apis/intf/{slide-in.ts → shell-api/slide-in.ts} +4 -3
- package/apis/intf/{system.ts → shell-api/system.ts} +4 -1
- package/apis/intf/shell.ts +12 -6
- package/apis/resources/__tests__/resources-api-class.test.ts +550 -0
- package/apis/resources/index.ts +22 -0
- package/apis/resources/resources-api-class.ts +187 -0
- package/apis/shell/__tests__/proxy.test.ts +369 -0
- package/apis/shell/index.ts +8 -1
- package/apis/shell/modal.ts +4 -1
- package/apis/shell/notifications.ts +9 -6
- package/apis/shell/proxy.ts +256 -0
- package/apis/shell/slide-in.ts +4 -1
- package/apis/vue-shim.d.ts +2 -1
- package/assets/data/aws-regions.json +4 -0
- package/assets/fonts/lato/LatoLatin-Black.woff +0 -0
- package/assets/fonts/lato/LatoLatin-Black.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-BlackItalic.woff +0 -0
- package/assets/fonts/lato/LatoLatin-BlackItalic.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-Bold.woff +0 -0
- package/assets/fonts/lato/LatoLatin-Bold.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-BoldItalic.woff +0 -0
- package/assets/fonts/lato/LatoLatin-BoldItalic.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-Heavy.woff +0 -0
- package/assets/fonts/lato/LatoLatin-Heavy.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-HeavyItalic.woff +0 -0
- package/assets/fonts/lato/LatoLatin-HeavyItalic.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-Italic.woff +0 -0
- package/assets/fonts/lato/LatoLatin-Italic.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-Light.woff +0 -0
- package/assets/fonts/lato/LatoLatin-Light.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-LightItalic.woff +0 -0
- package/assets/fonts/lato/LatoLatin-LightItalic.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-Medium.woff +0 -0
- package/assets/fonts/lato/LatoLatin-Medium.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-MediumItalic.woff +0 -0
- package/assets/fonts/lato/LatoLatin-MediumItalic.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-Regular.woff +0 -0
- package/assets/fonts/lato/LatoLatin-Regular.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-Semibold.woff +0 -0
- package/assets/fonts/lato/LatoLatin-Semibold.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-SemiboldItalic.woff +0 -0
- package/assets/fonts/lato/LatoLatin-SemiboldItalic.woff2 +0 -0
- package/assets/images/providers/entraid-black.svg +4 -0
- package/assets/images/providers/entraid.svg +9 -0
- package/assets/images/vendor/entraid.svg +9 -0
- package/assets/styles/app.scss +0 -1
- package/assets/styles/base/_variables.scss +2 -0
- package/assets/styles/fonts/_fontstack.scss +132 -8
- package/assets/translations/en-us.yaml +41 -22
- package/assets/translations/zh-hans.yaml +4 -8
- package/chart/__tests__/S3.test.ts +10 -3
- package/chart/monitoring/index.vue +10 -1
- package/components/ActionDropdownShell.vue +2 -1
- package/components/CountBox.vue +20 -0
- package/components/CreateDriver.vue +0 -12
- package/components/CruResourceFooter.vue +9 -5
- package/components/DetailText.vue +12 -3
- package/components/ExplorerProjectsNamespaces.vue +1 -1
- package/components/InstallHelmCharts.vue +2 -2
- package/components/LandingPagePreference.vue +14 -5
- package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +15 -1
- package/components/Resource/Detail/Metadata/index.vue +6 -0
- package/components/Resource/Detail/ResourcePopover/index.vue +12 -1
- package/components/Resource/Detail/SpacedRow.vue +3 -1
- package/components/Resource/Detail/TitleBar/index.vue +10 -11
- package/components/ResourceList/Masthead.vue +12 -8
- package/components/SelectIconGrid.vue +5 -10
- package/components/SingleClusterInfo.vue +1 -0
- package/components/SortableTable/__tests__/sorting.test.ts +126 -0
- package/components/SortableTable/index.vue +6 -9
- package/components/SortableTable/selection.js +23 -5
- package/components/SortableTable/sorting.js +6 -3
- package/components/Wizard.vue +14 -13
- package/components/__tests__/CountBox.test.ts +72 -0
- package/components/__tests__/DetailText.test.ts +113 -0
- package/components/fleet/FleetBundles.vue +100 -12
- package/components/fleet/FleetClusterTargets/index.vue +54 -15
- package/components/fleet/__tests__/FleetClusterTargets.test.ts +149 -115
- package/components/fleet/__tests__/FleetClusters.test.ts +12 -12
- package/components/form/InputWithSelect.vue +18 -10
- package/components/form/KeyValue.vue +17 -1
- package/components/form/LabeledSelect.vue +101 -26
- package/components/form/NameNsDescription.vue +11 -0
- package/components/form/Security.vue +6 -2
- package/components/form/Select.vue +73 -56
- package/components/form/ServiceNameSelect.vue +13 -11
- package/components/form/WorkloadPorts.vue +2 -7
- package/components/form/__tests__/KeyValue.test.ts +66 -0
- package/components/form/__tests__/NodeScheduling.test.ts +9 -0
- package/components/form/__tests__/Security.test.ts +76 -0
- package/components/form/labeled-select-utils/useLabeledSelectPagination.ts +138 -0
- package/components/formatter/Autoscaler.vue +4 -4
- package/components/formatter/ClusterKubeVersion.vue +27 -0
- package/components/formatter/ClusterLink.vue +1 -7
- package/components/formatter/ClusterProvider.vue +6 -10
- package/components/formatter/FleetSummaryGraph.vue +0 -3
- package/components/formatter/MachineSummaryGraph.vue +1 -1
- package/components/formatter/PodsUsage.vue +2 -2
- package/components/formatter/__tests__/Autoscaler.test.ts +19 -22
- package/components/formatter/__tests__/FleetSummaryGraph.test.ts +216 -0
- package/components/formatter/__tests__/PodsUsage.test.ts +6 -10
- package/components/nav/Group.vue +7 -6
- package/components/nav/Header.vue +24 -3
- package/components/nav/NamespaceFilter.vue +2 -2
- package/components/nav/NotificationCenter/Notification.vue +4 -1
- package/components/nav/NotificationCenter/NotificationHeader.vue +20 -8
- package/components/nav/NotificationCenter/__tests__/NotificationHeader.test.ts +80 -0
- package/components/nav/TopLevelMenu.helper.ts +15 -3
- package/components/nav/TopLevelMenu.vue +16 -5
- package/components/nav/Type.vue +8 -7
- package/components/nav/WindowManager/index.vue +2 -1
- package/components/nav/WorkspaceSwitcher.vue +13 -0
- package/components/nav/__tests__/Group.test.ts +67 -0
- package/components/nav/__tests__/Header.test.ts +235 -0
- package/components/nav/__tests__/TopLevelMenu.test.ts +145 -21
- package/components/nav/__tests__/Type.test.ts +20 -3
- package/components/templates/default.vue +34 -4
- package/components/templates/home.vue +30 -25
- package/components/templates/plain.vue +31 -26
- package/components/templates/standalone.vue +17 -0
- package/composables/useFormValidation.ts +93 -0
- package/composables/useLabeledFormElement.ts +10 -2
- package/composables/useLabeledSelect.ts +60 -0
- package/composables/useUserRetentionValidation.ts +1 -49
- package/composables/useVeeValidateField.test.ts +159 -0
- package/composables/useVeeValidateField.ts +67 -0
- package/config/cookies.js +0 -1
- package/config/labels-annotations.js +1 -0
- package/config/pagination-table-headers.js +18 -1
- package/config/product/manager.js +82 -21
- package/config/query-params.js +1 -0
- package/config/router/routes.js +6 -8
- package/config/table-headers.js +20 -1
- package/config/types.js +2 -1
- package/core/__tests__/plugin-products.test.ts +1505 -30
- package/core/plugin-products-base.ts +137 -20
- package/core/plugin-products-helpers.ts +5 -4
- package/core/plugin-products.ts +4 -0
- package/core/plugin-types.ts +129 -4
- package/core/plugin.ts +15 -7
- package/core/productDebugger.js +9 -4
- package/core/types-provisioning.ts +43 -30
- package/core/types.ts +58 -19
- package/detail/__tests__/management.cattle.io.fleetworkspace.test.ts +128 -0
- package/detail/__tests__/pod.test.ts +41 -0
- package/detail/harvesterhci.io.management.cluster.vue +6 -2
- package/detail/management.cattle.io.fleetworkspace.vue +49 -0
- package/detail/pod.vue +1 -1
- package/detail/provisioning.cattle.io.cluster.vue +4 -10
- package/edit/__tests__/fleet.cattle.io.helmop.test.ts +9 -0
- package/edit/__tests__/kontainerDriver.test.ts +0 -13
- package/edit/__tests__/nodeDriver.test.ts +5 -11
- package/edit/__tests__/resources.cattle.io.restore.test.ts +9 -0
- package/edit/auditlog.cattle.io.auditpolicy/__tests__/__snapshots__/General.test.ts.snap +6 -0
- package/edit/auth/__tests__/azuread.test.ts +217 -34
- package/edit/auth/__tests__/oidc.test.ts +54 -0
- package/edit/auth/azuread.vue +123 -15
- package/edit/auth/oidc.vue +10 -2
- package/edit/kontainerDriver.vue +1 -2
- package/edit/networking.k8s.io.ingress/DefaultBackend.vue +13 -4
- package/edit/networking.k8s.io.ingress/RulePath.vue +8 -4
- package/edit/networking.k8s.io.ingress/index.vue +75 -20
- package/edit/nodeDriver.vue +0 -2
- package/edit/provisioning.cattle.io.cluster/AgentEnv.vue +1 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/AgentEnv.test.ts +25 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/MachinePool.test.ts +104 -0
- package/edit/provisioning.cattle.io.cluster/index.vue +81 -106
- package/edit/provisioning.cattle.io.cluster/rke2.vue +8 -4
- package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +11 -0
- package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +37 -4
- package/edit/provisioning.cattle.io.cluster/tabs/registries/__tests__/RegistryConfigs.test.ts +132 -7
- package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +2 -1
- package/edit/secret/__tests__/ssh.test.ts +5 -6
- package/edit/secret/basic.vue +31 -0
- package/edit/secret/index.vue +68 -17
- package/edit/secret/registry.vue +38 -0
- package/edit/secret/ssh.vue +29 -0
- package/edit/secret/tls.vue +30 -0
- package/edit/service.vue +4 -4
- package/edit/workload/Upgrading.vue +3 -3
- package/edit/workload/__tests__/Upgrading.test.ts +6 -9
- package/edit/workload/mixins/workload.js +2 -1
- package/initialize/App.vue +29 -2
- package/initialize/install-plugins.js +0 -2
- package/list/__tests__/management.cattle.io.feature.test.ts +105 -0
- package/list/catalog.cattle.io.app.vue +25 -5
- package/list/fleet.cattle.io.bundle.vue +7 -104
- package/list/fleet.cattle.io.clusterregistrationtoken.vue +20 -0
- package/list/management.cattle.io.feature.vue +1 -1
- package/list/management.cattle.io.fleetworkspace.vue +8 -0
- package/list/provisioning.cattle.io.cluster.vue +262 -180
- package/list/utils/management.cattle.io.cluster.utils.ts +128 -0
- package/machine-config/amazonec2.vue +1 -0
- package/mixins/__tests__/chart.test.ts +112 -0
- package/mixins/brand.js +2 -1
- package/mixins/chart.js +50 -15
- package/mixins/resource-fetch-api-pagination.js +41 -5
- package/models/__tests__/catalog.cattle.io.app.test.ts +15 -1
- package/models/__tests__/catalog.cattle.io.clusterrepo.test.ts +84 -0
- package/models/__tests__/chart.test.ts +99 -6
- package/models/__tests__/ext.cattle.io.kubeconfig.test.ts +67 -67
- package/models/__tests__/management.cattle.io.cluster.test.ts +1 -1
- package/models/__tests__/management.cattle.io.feature.test.ts +131 -0
- package/models/__tests__/management.cattle.io.node.ts +6 -5
- package/models/__tests__/management.cattle.io.nodepool.ts +5 -4
- package/models/__tests__/monitoring.coreos.com.alertmanagerconfig.test.ts +98 -0
- package/models/__tests__/provisioning.cattle.io.cluster.test.ts +32 -11
- package/models/base-cluster.x-k8s.io.js +26 -0
- package/models/catalog.cattle.io.app.js +21 -17
- package/models/catalog.cattle.io.clusterrepo.js +39 -11
- package/models/chart.js +33 -19
- package/models/cluster.js +1 -1
- package/models/cluster.x-k8s.io.machine.js +4 -22
- package/models/cluster.x-k8s.io.machinedeployment.js +2 -20
- package/models/cluster.x-k8s.io.machineset.js +2 -20
- package/models/compliance.cattle.io.clusterscan.js +130 -2
- package/models/ext.cattle.io.kubeconfig.ts +4 -7
- package/models/fleet-application.js +4 -2
- package/models/fleet.cattle.io.bundle.js +1 -1
- package/models/kontainerdriver.js +11 -0
- package/models/management.cattle.io.authconfig.js +5 -1
- package/models/management.cattle.io.cluster.js +402 -78
- package/models/management.cattle.io.feature.js +3 -3
- package/models/management.cattle.io.kontainerdriver.js +1 -26
- package/models/management.cattle.io.node.js +6 -4
- package/models/management.cattle.io.nodepool.js +1 -1
- package/models/monitoring.coreos.com.alertmanagerconfig.js +31 -17
- package/models/networking.k8s.io.ingress.js +12 -4
- package/models/nodedriver.js +7 -0
- package/models/provisioning.cattle.io.cluster.js +47 -330
- package/models/rke.cattle.io.etcdsnapshot.js +1 -2
- package/package.json +20 -37
- package/pages/__tests__/readme.test.ts +49 -0
- package/pages/auth/setup.vue +2 -3
- package/pages/c/_cluster/apps/charts/__tests__/chart.test.ts +265 -0
- package/pages/c/_cluster/apps/charts/__tests__/index.test.ts +55 -0
- package/pages/c/_cluster/apps/charts/__tests__/install.test.ts +53 -0
- package/pages/c/_cluster/apps/charts/chart.vue +275 -39
- package/pages/c/_cluster/apps/charts/index.vue +2 -2
- package/pages/c/_cluster/apps/charts/install.vue +18 -10
- package/pages/c/_cluster/auth/user.retention/index.vue +55 -22
- package/pages/c/_cluster/explorer/__tests__/index.test.ts +23 -25
- package/pages/c/_cluster/explorer/index.vue +5 -49
- package/pages/c/_cluster/istio/__tests__/istio.index.test.ts +194 -0
- package/pages/c/_cluster/istio/index.vue +21 -6
- package/pages/c/_cluster/manager/drivers/kontainerDriver/index.vue +5 -7
- package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +40 -2
- package/pages/c/_cluster/uiplugins/__tests__/PluginInfoPanel.test.ts +61 -0
- package/pages/c/_cluster/uiplugins/__tests__/index.test.ts +735 -13
- package/pages/c/_cluster/uiplugins/index.vue +226 -222
- package/pages/diagnostic.vue +13 -17
- package/pages/fail-whale.vue +18 -0
- package/pages/home.vue +77 -260
- package/pages/readme.vue +88 -0
- package/plugins/dashboard-store/__tests__/resource-class.test.ts +88 -0
- package/plugins/dashboard-store/actions.js +40 -18
- package/plugins/dashboard-store/resource-class.js +5 -2
- package/plugins/steve/__tests__/subscribe.spec.ts +6 -3
- package/plugins/steve/steve-pagination-utils.ts +11 -3
- package/plugins/steve/subscribe.js +35 -5
- package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +211 -1
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +37 -4
- package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +1 -1
- package/rancher-components/RcButton/RcButton.test.ts +37 -1
- package/rancher-components/RcButton/RcButton.vue +38 -8
- package/rancher-components/RcDropdown/RcDropdownTrigger.vue +10 -8
- package/scripts/test-plugins-build.sh +5 -2
- package/server/server-middleware.js +2 -2
- package/static/humans.txt +1 -0
- package/static/robots.txt +34 -0
- package/static/welcome-cow.svg +18 -0
- package/store/__tests__/catalog.test.ts +276 -12
- package/store/__tests__/type-map.test.ts +556 -1
- package/store/action-menu.js +8 -3
- package/store/auth.js +1 -4
- package/store/aws.js +27 -16
- package/store/catalog.js +87 -11
- package/store/digitalocean.js +20 -38
- package/store/index.js +2 -0
- package/store/linode.js +25 -40
- package/store/pnap.js +1 -0
- package/store/type-map.js +111 -29
- package/tsconfig.paths.json +8 -8
- package/types/kube/kube-api.ts +14 -1
- package/types/rancher/steve.api.ts +12 -12
- package/types/resources/settings.d.ts +2 -1
- package/types/shell/index.d.ts +128 -24
- package/types/store/dashboard-store.types.ts +108 -11
- package/types/store/pagination.types.ts +6 -3
- package/utils/__tests__/alertmanagerconfig.test.ts +117 -0
- package/utils/__tests__/async.test.ts +87 -0
- package/utils/__tests__/aws.test.ts +140 -0
- package/utils/__tests__/banners.test.ts +176 -0
- package/utils/__tests__/chart.test.ts +64 -1
- package/utils/__tests__/color.test.ts +226 -0
- package/utils/__tests__/duration.test.ts +140 -0
- package/utils/__tests__/fleet.test.ts +340 -0
- package/utils/__tests__/git.test.ts +270 -0
- package/utils/__tests__/inactivity.test.ts +316 -0
- package/utils/__tests__/ingress.test.ts +553 -0
- package/utils/__tests__/kube.test.ts +68 -0
- package/utils/__tests__/namespace-filter.test.ts +109 -0
- package/utils/__tests__/object.test.ts +77 -0
- package/utils/__tests__/pagination-utils.test.ts +361 -0
- package/utils/__tests__/parse-externalid.test.ts +137 -0
- package/utils/__tests__/perf-setting.utils.test.ts +98 -0
- package/utils/__tests__/poller-sequential.test.ts +177 -0
- package/utils/__tests__/poller.test.ts +170 -0
- package/utils/__tests__/promise.test.ts +346 -0
- package/utils/__tests__/settings.test.ts +140 -0
- package/utils/__tests__/sort-utils.test.ts +301 -0
- package/utils/__tests__/string-utils.test.ts +798 -0
- package/utils/__tests__/string.test.ts +23 -1
- package/utils/__tests__/style.test.ts +154 -0
- package/utils/__tests__/svg-filter.test.ts +184 -0
- package/utils/__tests__/time.test.ts +14 -1
- package/utils/__tests__/units.test.ts +417 -0
- package/utils/__tests__/url.test.ts +246 -0
- package/utils/__tests__/versions.test.ts +128 -0
- package/utils/__tests__/xccdf.test.ts +391 -0
- package/utils/chart.js +36 -0
- package/utils/fleet.ts +13 -3
- package/utils/gatekeeper/__tests__/util.test.ts +174 -0
- package/utils/gc/__tests__/gc-interval.test.ts +119 -0
- package/utils/gc/__tests__/gc-root-store.test.ts +225 -0
- package/utils/gc/__tests__/gc-route-changed.test.ts +96 -0
- package/utils/gc/__tests__/gc.test.ts +487 -0
- package/utils/ingress.ts +9 -1
- package/utils/object.js +33 -2
- package/utils/pagination-utils.ts +2 -1
- package/utils/string.js +25 -2
- package/utils/time.ts +5 -0
- package/utils/uiplugins.ts +5 -5
- package/utils/validators/__tests__/cluster-name.test.ts +110 -0
- package/utils/validators/__tests__/cron-schedule.test.ts +79 -0
- package/utils/validators/__tests__/index.test.ts +481 -0
- package/utils/validators/__tests__/kubernetes-name.test.ts +163 -0
- package/utils/validators/__tests__/misc-validators.test.ts +246 -0
- package/utils/validators/__tests__/pod-affinity.test.ts +382 -0
- package/utils/validators/__tests__/prometheusrule.test.ts +211 -0
- package/utils/validators/__tests__/role-template.test.ts +149 -0
- package/utils/validators/__tests__/service.test.ts +283 -0
- package/utils/validators/__tests__/setting.test.js +32 -0
- package/utils/validators/formRules/__tests__/index.test.ts +50 -0
- package/utils/validators/formRules/index.ts +5 -5
- package/utils/validators/machine-pool.ts +1 -1
- package/utils/validators/setting.js +18 -3
- package/utils/xccdf.ts +418 -0
- package/vue.config.js +0 -9
- package/assets/fonts/lato/lato-v17-latin-700.woff +0 -0
- package/assets/fonts/lato/lato-v17-latin-700.woff2 +0 -0
- package/assets/fonts/lato/lato-v17-latin-regular.woff +0 -0
- package/assets/fonts/lato/lato-v17-latin-regular.woff2 +0 -0
- package/assets/images/providers/azuread-black.svg +0 -22
- package/assets/images/providers/azuread.svg +0 -25
- package/assets/images/vendor/azuread.svg +0 -18
- package/assets/styles/fonts/_dots.scss +0 -18
- package/components/EmberPage.vue +0 -622
- package/components/EmberPageView.vue +0 -39
- package/components/form/labeled-select-utils/labeled-select-pagination.ts +0 -116
- package/mixins/labeled-form-element.ts +0 -225
- package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -28
- package/pages/c/_cluster/manager/pages/_page.vue +0 -22
- package/pages/c/_cluster/mcapps/pages/_page.vue +0 -22
- package/plugins/ember-cookie.js +0 -17
- package/utils/ember-page.js +0 -30
package/core/types.ts
CHANGED
|
@@ -4,7 +4,8 @@ import type { ExtensionManager } from '@shell/types/extension-manager';
|
|
|
4
4
|
import { PaginationSettingsStores } from '@shell/types/resources/settings';
|
|
5
5
|
import type {
|
|
6
6
|
ProductMetadata, ProductSinglePage,
|
|
7
|
-
StandardProductName, RouteRecordRawWithParams,
|
|
7
|
+
StandardProductName, RouteRecordRawWithParams, ProductChild,
|
|
8
|
+
ProductChildGroup,
|
|
8
9
|
ProductChildPage
|
|
9
10
|
} from './plugin-types';
|
|
10
11
|
|
|
@@ -552,7 +553,7 @@ export interface DSLReturnType {
|
|
|
552
553
|
* @param headers {@link HeaderOptions[]}
|
|
553
554
|
* @returns {@link void}
|
|
554
555
|
*/
|
|
555
|
-
headers: (type: string, headers
|
|
556
|
+
headers: (type: string, headers?: HeaderOptions[], paginationHeaders?: PaginationHeaderOptions[]) => void;
|
|
556
557
|
|
|
557
558
|
/**
|
|
558
559
|
* Create and register a new product
|
|
@@ -562,12 +563,30 @@ export interface DSLReturnType {
|
|
|
562
563
|
product: (options: ProductOptions) => void;
|
|
563
564
|
|
|
564
565
|
/**
|
|
565
|
-
|
|
566
|
-
*
|
|
567
|
-
*
|
|
566
|
+
/**
|
|
567
|
+
* Remap group display names in the side-menu navigation.
|
|
568
|
+
*
|
|
569
|
+
* Each entry matches a group's internal ID (via string or regex) and replaces its display label
|
|
570
|
+
* with a new name. This only changes how the group is labelled in the UI — it does not move
|
|
571
|
+
* resources between groups.
|
|
572
|
+
*
|
|
573
|
+
* @param match String, string for a regex or a regex object to match against group names
|
|
574
|
+
* @param replace Replacement string or function for the display name
|
|
575
|
+
* @param weight Priority for applying this mapping (higher numbers applied first, default 5)
|
|
576
|
+
* @param continueOnMatch If true, continue matching other rules after this one matches
|
|
577
|
+
* @returns {@link void}
|
|
578
|
+
*/
|
|
579
|
+
mapGroup: (match: string | RegExp, replace: string | Function, weight?: number, continueOnMatch?: boolean) => void;
|
|
580
|
+
|
|
581
|
+
/**
|
|
582
|
+
* Remap a type ID to a display name
|
|
583
|
+
* @param match String, string for a regex or a regex object to match against type IDs
|
|
584
|
+
* @param replace Replacement string or function for the display name
|
|
585
|
+
* @param weight Priority for applying this mapping (higher numbers applied first, default 5)
|
|
586
|
+
* @param continueOnMatch If true, continue matching other rules after this one matches
|
|
568
587
|
* @returns {@link void}
|
|
569
588
|
*/
|
|
570
|
-
|
|
589
|
+
mapType: (match: string | RegExp, replace: string | Function, weight?: number, continueOnMatch?: boolean) => void;
|
|
571
590
|
|
|
572
591
|
/**
|
|
573
592
|
* Create and configure a myriad of options for a type
|
|
@@ -595,18 +614,36 @@ export interface DSLReturnType {
|
|
|
595
614
|
weightType: (input: string, weight: number, forBasic: boolean) => void;
|
|
596
615
|
|
|
597
616
|
/**
|
|
598
|
-
*
|
|
617
|
+
* Never show the specified type in the navigation
|
|
618
|
+
* @param regexOrString String, string for a regex or a regex object to match against type names
|
|
619
|
+
* @returns {@link void}
|
|
620
|
+
*/
|
|
621
|
+
ignoreType: (regexOrString: string | RegExp) => void;
|
|
622
|
+
|
|
623
|
+
/**
|
|
624
|
+
* Never show the specified group or any types in it
|
|
625
|
+
* @param regexOrString String, string for a regex or a regex object to match against group names
|
|
626
|
+
* @param fn Conditional function that accepts getters and returns true if the group should be ignored
|
|
627
|
+
* @returns {@link void}
|
|
599
628
|
*/
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
629
|
+
ignoreGroup: (regexOrString: string | RegExp, fn?: (getters: any) => boolean) => void;
|
|
630
|
+
|
|
631
|
+
/**
|
|
632
|
+
* Move a resource type into a different navigation group
|
|
633
|
+
* @param match String or regex to match against resource type names
|
|
634
|
+
* @param group Target group name to move the matched types into
|
|
635
|
+
* @param weight Ordering weight for the mapping (default: 5)
|
|
636
|
+
* @returns {@link void}
|
|
637
|
+
*/
|
|
638
|
+
moveType: (match: string | RegExp, group: string, weight?: number) => void;
|
|
639
|
+
|
|
640
|
+
/**
|
|
641
|
+
* Control visibility of bulk actions (e.g. delete) in the list view toolbar for a specific resource type
|
|
642
|
+
* @param type The resource type to configure
|
|
643
|
+
* @param hide Whether to hide bulk actions. Set to `true` to hide them
|
|
644
|
+
* @returns {@link void}
|
|
645
|
+
*/
|
|
646
|
+
hideBulkActions: (type: string, hide: boolean) => void;
|
|
610
647
|
|
|
611
648
|
labelGroup: (group: string, label: string | undefined, labelKey?: string) => void;
|
|
612
649
|
|
|
@@ -663,8 +700,9 @@ export interface IExtension {
|
|
|
663
700
|
* @param name
|
|
664
701
|
* @param config
|
|
665
702
|
*/
|
|
666
|
-
addProduct(product: ProductMetadata, config: ProductChildGroup[]): void;
|
|
667
703
|
addProduct(product: ProductMetadata, config: ProductChildPage[]): void;
|
|
704
|
+
addProduct(product: ProductMetadata, config: ProductChildGroup[]): void;
|
|
705
|
+
addProduct(product: ProductMetadata, config: ProductChild[]): void;
|
|
668
706
|
|
|
669
707
|
/**
|
|
670
708
|
* Add a product to the sidebar, without children (no side menu, single page only)
|
|
@@ -693,8 +731,9 @@ export interface IExtension {
|
|
|
693
731
|
* @param product Product to be extended
|
|
694
732
|
* @param config Product extension configuration
|
|
695
733
|
*/
|
|
696
|
-
extendProduct(product: StandardProductName | string, config: ProductChildGroup[]): void;
|
|
697
734
|
extendProduct(product: StandardProductName | string, config: ProductChildPage[]): void;
|
|
735
|
+
extendProduct(product: StandardProductName | string, config: ProductChildGroup[]): void;
|
|
736
|
+
extendProduct(product: StandardProductName | string, config: ProductChild[]): void;
|
|
698
737
|
|
|
699
738
|
/**
|
|
700
739
|
* Add a locale to the i18n store
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { shallowMount } from '@vue/test-utils';
|
|
2
|
+
import DetailWorkspace from '@shell/detail/management.cattle.io.fleetworkspace.vue';
|
|
3
|
+
import { FLEET } from '@shell/config/types';
|
|
4
|
+
import { NAME as FLEET_NAME } from '@shell/config/product/fleet';
|
|
5
|
+
import { BLANK_CLUSTER } from '@shell/store/store-types.js';
|
|
6
|
+
|
|
7
|
+
describe('component: DetailWorkspace', () => {
|
|
8
|
+
const mockValue = {
|
|
9
|
+
id: 'fleet-default',
|
|
10
|
+
counts: {
|
|
11
|
+
gitRepos: 3,
|
|
12
|
+
helmOps: 2,
|
|
13
|
+
clusters: 5,
|
|
14
|
+
cluster: 5,
|
|
15
|
+
clusterGroup: 1,
|
|
16
|
+
clusterGroups: 1,
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const mockRouter = { push: jest.fn() };
|
|
21
|
+
|
|
22
|
+
const defaultStore = {
|
|
23
|
+
commit: jest.fn(),
|
|
24
|
+
dispatch: jest.fn(),
|
|
25
|
+
getters: {
|
|
26
|
+
'i18n/t': (key: string) => key,
|
|
27
|
+
'i18n/exists': () => true,
|
|
28
|
+
currentProduct: { name: FLEET_NAME },
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const createWrapper = (props = {}) => {
|
|
33
|
+
return shallowMount(DetailWorkspace, {
|
|
34
|
+
props: { value: mockValue, ...props },
|
|
35
|
+
global: {
|
|
36
|
+
mocks: {
|
|
37
|
+
$store: defaultStore,
|
|
38
|
+
$route: { params: {} },
|
|
39
|
+
$router: mockRouter,
|
|
40
|
+
},
|
|
41
|
+
stubs: {
|
|
42
|
+
CountBox: { template: '<div />', props: ['clickable', 'count', 'name', 'primaryColorVar'] },
|
|
43
|
+
ResourceTabs: { template: '<div />' },
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
beforeEach(() => {
|
|
50
|
+
jest.clearAllMocks();
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
describe('applicationRoute', () => {
|
|
54
|
+
it('should return the fleet application route', () => {
|
|
55
|
+
const wrapper = createWrapper();
|
|
56
|
+
|
|
57
|
+
expect(wrapper.vm.applicationRoute).toStrictEqual({
|
|
58
|
+
name: 'c-cluster-fleet-application',
|
|
59
|
+
params: { cluster: BLANK_CLUSTER },
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
describe('clustersRoute', () => {
|
|
65
|
+
it('should return the fleet clusters list route', () => {
|
|
66
|
+
const wrapper = createWrapper();
|
|
67
|
+
|
|
68
|
+
expect(wrapper.vm.clustersRoute).toStrictEqual({
|
|
69
|
+
name: 'c-cluster-product-resource',
|
|
70
|
+
params: {
|
|
71
|
+
cluster: BLANK_CLUSTER,
|
|
72
|
+
product: FLEET_NAME,
|
|
73
|
+
resource: FLEET.CLUSTER,
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
describe('clusterGroupsRoute', () => {
|
|
80
|
+
it('should return the fleet cluster groups list route', () => {
|
|
81
|
+
const wrapper = createWrapper();
|
|
82
|
+
|
|
83
|
+
expect(wrapper.vm.clusterGroupsRoute).toStrictEqual({
|
|
84
|
+
name: 'c-cluster-product-resource',
|
|
85
|
+
params: {
|
|
86
|
+
cluster: BLANK_CLUSTER,
|
|
87
|
+
product: FLEET_NAME,
|
|
88
|
+
resource: FLEET.CLUSTER_GROUP,
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
describe('setWorkspaceAndNavigate', () => {
|
|
95
|
+
it('should commit updateWorkspace with the workspace id', () => {
|
|
96
|
+
const wrapper = createWrapper();
|
|
97
|
+
const route = wrapper.vm.applicationRoute;
|
|
98
|
+
|
|
99
|
+
wrapper.vm.setWorkspaceAndNavigate(route);
|
|
100
|
+
|
|
101
|
+
expect(defaultStore.commit).toHaveBeenCalledWith('updateWorkspace', {
|
|
102
|
+
value: 'fleet-default',
|
|
103
|
+
getters: defaultStore.getters,
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
it('should dispatch prefs/set with the workspace id', () => {
|
|
108
|
+
const wrapper = createWrapper();
|
|
109
|
+
const route = wrapper.vm.applicationRoute;
|
|
110
|
+
|
|
111
|
+
wrapper.vm.setWorkspaceAndNavigate(route);
|
|
112
|
+
|
|
113
|
+
expect(defaultStore.dispatch).toHaveBeenCalledWith('prefs/set', {
|
|
114
|
+
key: expect.any(String),
|
|
115
|
+
value: 'fleet-default',
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
it('should navigate to the given route', () => {
|
|
120
|
+
const wrapper = createWrapper();
|
|
121
|
+
const route = wrapper.vm.clustersRoute;
|
|
122
|
+
|
|
123
|
+
wrapper.vm.setWorkspaceAndNavigate(route);
|
|
124
|
+
|
|
125
|
+
expect(mockRouter.push).toHaveBeenCalledWith(route);
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
});
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import podDetail from '@shell/detail/pod.vue';
|
|
2
|
+
|
|
3
|
+
const { containers } = podDetail.computed;
|
|
4
|
+
|
|
5
|
+
describe('view: pod', () => {
|
|
6
|
+
it('should not use 2x icon sizing in init container column', () => {
|
|
7
|
+
const initContainer = { name: 'init', image: 'init:latest' };
|
|
8
|
+
const appContainer = { name: 'app', image: 'app:latest' };
|
|
9
|
+
|
|
10
|
+
const rows = containers.call({
|
|
11
|
+
allContainers: [appContainer, initContainer],
|
|
12
|
+
allStatuses: [{
|
|
13
|
+
name: 'app',
|
|
14
|
+
ready: true,
|
|
15
|
+
state: {},
|
|
16
|
+
lastState: {}
|
|
17
|
+
}, {
|
|
18
|
+
name: 'init',
|
|
19
|
+
ready: false,
|
|
20
|
+
state: {},
|
|
21
|
+
lastState: {}
|
|
22
|
+
}],
|
|
23
|
+
dateTimeFormat: () => '',
|
|
24
|
+
t: () => '',
|
|
25
|
+
value: {
|
|
26
|
+
containerActions: [],
|
|
27
|
+
containerIsInit: (container: { name: string }) => container.name === 'init',
|
|
28
|
+
containerStateColor: () => 'text-success',
|
|
29
|
+
containerStateDisplay: () => 'running',
|
|
30
|
+
openLogs: jest.fn(),
|
|
31
|
+
openShell: jest.fn(),
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
const initRow = rows.find((row: { name: string }) => row.name === 'init');
|
|
36
|
+
const appRow = rows.find((row: { name: string }) => row.name === 'app');
|
|
37
|
+
|
|
38
|
+
expect(initRow.initIcon).toBe('icon-checkmark text-success ml-5');
|
|
39
|
+
expect(appRow.initIcon).toBe('icon-minus text-muted ml-5');
|
|
40
|
+
});
|
|
41
|
+
});
|
|
@@ -5,6 +5,12 @@ import CopyCode from '@shell/components/CopyCode';
|
|
|
5
5
|
import Tab from '@shell/components/Tabbed/Tab';
|
|
6
6
|
import { allHash } from '@shell/utils/promise';
|
|
7
7
|
|
|
8
|
+
// Couple of things wrong here
|
|
9
|
+
// 1. It should be in pkg/harvester-manager extension
|
|
10
|
+
// 2. It's not used when the harvester-ui extension is loaded
|
|
11
|
+
// - extension has it's own detail/harvesterhci.io.management.cluster.vue which supersedes this
|
|
12
|
+
// - unless harvester standalone uses it, it should not exist in the harvester-ui extension
|
|
13
|
+
|
|
8
14
|
export default {
|
|
9
15
|
emits: ['input'],
|
|
10
16
|
|
|
@@ -31,8 +37,6 @@ export default {
|
|
|
31
37
|
|
|
32
38
|
const res = await allHash(hash);
|
|
33
39
|
|
|
34
|
-
this.allNodes = res.allNodes || [];
|
|
35
|
-
this.allNodePools = res.allNodePools || [];
|
|
36
40
|
this.clusterToken = res.clusterToken;
|
|
37
41
|
},
|
|
38
42
|
|
|
@@ -4,6 +4,8 @@ import ResourceTabs from '@shell/components/form/ResourceTabs';
|
|
|
4
4
|
import { SCOPE_NAMESPACE, SCOPE_CLUSTER } from '@shell/components/RoleBindings.vue';
|
|
5
5
|
import { NAME as FLEET_NAME } from '@shell/config/product/fleet';
|
|
6
6
|
import { FLEET } from '@shell/config/types';
|
|
7
|
+
import { BLANK_CLUSTER } from '@shell/store/store-types.js';
|
|
8
|
+
import { WORKSPACE } from '@shell/store/prefs';
|
|
7
9
|
|
|
8
10
|
export default {
|
|
9
11
|
name: 'DetailWorkspace',
|
|
@@ -34,6 +36,35 @@ export default {
|
|
|
34
36
|
return this.t(`typeLabel."${ FLEET.HELM_OP }"`, { count: this.value.counts.helmOps });
|
|
35
37
|
},
|
|
36
38
|
|
|
39
|
+
applicationRoute() {
|
|
40
|
+
return {
|
|
41
|
+
name: 'c-cluster-fleet-application',
|
|
42
|
+
params: { cluster: BLANK_CLUSTER }
|
|
43
|
+
};
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
clustersRoute() {
|
|
47
|
+
return {
|
|
48
|
+
name: 'c-cluster-product-resource',
|
|
49
|
+
params: {
|
|
50
|
+
cluster: BLANK_CLUSTER,
|
|
51
|
+
product: FLEET_NAME,
|
|
52
|
+
resource: FLEET.CLUSTER,
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
clusterGroupsRoute() {
|
|
58
|
+
return {
|
|
59
|
+
name: 'c-cluster-product-resource',
|
|
60
|
+
params: {
|
|
61
|
+
cluster: BLANK_CLUSTER,
|
|
62
|
+
product: FLEET_NAME,
|
|
63
|
+
resource: FLEET.CLUSTER_GROUP,
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
},
|
|
67
|
+
|
|
37
68
|
SCOPE_NAMESPACE() {
|
|
38
69
|
return SCOPE_NAMESPACE;
|
|
39
70
|
},
|
|
@@ -46,6 +77,16 @@ export default {
|
|
|
46
77
|
return FLEET_NAME;
|
|
47
78
|
}
|
|
48
79
|
},
|
|
80
|
+
|
|
81
|
+
methods: {
|
|
82
|
+
setWorkspaceAndNavigate(route) {
|
|
83
|
+
const workspaceId = this.value.id;
|
|
84
|
+
|
|
85
|
+
this.$store.commit('updateWorkspace', { value: workspaceId, getters: this.$store.getters });
|
|
86
|
+
this.$store.dispatch('prefs/set', { key: WORKSPACE, value: workspaceId });
|
|
87
|
+
this.$router.push(route);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
49
90
|
};
|
|
50
91
|
</script>
|
|
51
92
|
|
|
@@ -58,6 +99,8 @@ export default {
|
|
|
58
99
|
:count="value.counts.gitRepos"
|
|
59
100
|
:name="gitRepoLabel"
|
|
60
101
|
:primary-color-var="'--sizzle-3'"
|
|
102
|
+
:clickable="true"
|
|
103
|
+
@click="setWorkspaceAndNavigate(applicationRoute)"
|
|
61
104
|
/>
|
|
62
105
|
</div>
|
|
63
106
|
<div class="col span-3">
|
|
@@ -65,6 +108,8 @@ export default {
|
|
|
65
108
|
:count="value.counts.helmOps"
|
|
66
109
|
:name="helmOpsLabel"
|
|
67
110
|
:primary-color-var="'--sizzle-3'"
|
|
111
|
+
:clickable="true"
|
|
112
|
+
@click="setWorkspaceAndNavigate(applicationRoute)"
|
|
68
113
|
/>
|
|
69
114
|
</div>
|
|
70
115
|
<div class="col span-3">
|
|
@@ -72,6 +117,8 @@ export default {
|
|
|
72
117
|
:count="value.counts.clusters"
|
|
73
118
|
:name="clustersLabel"
|
|
74
119
|
:primary-color-var="'--sizzle-1'"
|
|
120
|
+
:clickable="true"
|
|
121
|
+
@click="setWorkspaceAndNavigate(clustersRoute)"
|
|
75
122
|
/>
|
|
76
123
|
</div>
|
|
77
124
|
<div class="col span-3">
|
|
@@ -79,6 +126,8 @@ export default {
|
|
|
79
126
|
:count="value.counts.clusterGroups"
|
|
80
127
|
:name="clusterGroupsLabel"
|
|
81
128
|
:primary-color-var="'--sizzle-2'"
|
|
129
|
+
:clickable="true"
|
|
130
|
+
@click="setWorkspaceAndNavigate(clusterGroupsRoute)"
|
|
82
131
|
/>
|
|
83
132
|
</div>
|
|
84
133
|
</div>
|
package/detail/pod.vue
CHANGED
|
@@ -106,7 +106,7 @@ export default {
|
|
|
106
106
|
availableActions: this.value.containerActions,
|
|
107
107
|
stateObj: status, // Required if there's a description
|
|
108
108
|
stateDescription: descriptions.join(' | '), // Required to display the description
|
|
109
|
-
initIcon: this.value.containerIsInit(container) ? 'icon-checkmark
|
|
109
|
+
initIcon: this.value.containerIsInit(container) ? 'icon-checkmark text-success ml-5' : 'icon-minus text-muted ml-5',
|
|
110
110
|
|
|
111
111
|
// Call openShell here so that opening the shell
|
|
112
112
|
// at the container level still has 'this' in scope.
|
|
@@ -147,10 +147,6 @@ export default {
|
|
|
147
147
|
fetchOne.normanClusters = this.$store.dispatch('rancher/findAll', { type: NORMAN.CLUSTER });
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
-
if ( this.value.isRke1 && this.$store.getters['isRancher'] ) {
|
|
151
|
-
fetchOne.normanNodePools = this.$store.dispatch('rancher/findAll', { type: NORMAN.NODE_POOL });
|
|
152
|
-
}
|
|
153
|
-
|
|
154
150
|
const fetchOneRes = await allHash(fetchOne);
|
|
155
151
|
|
|
156
152
|
this.allMachines = fetchOneRes.machines || [];
|
|
@@ -203,10 +199,6 @@ export default {
|
|
|
203
199
|
if ( this.$store.getters['management/canList'](MANAGEMENT.RKE_TEMPLATE) ) {
|
|
204
200
|
this.$store.dispatch('management/findAll', { type: MANAGEMENT.RKE_TEMPLATE });
|
|
205
201
|
}
|
|
206
|
-
|
|
207
|
-
if ( this.$store.getters['management/canList'](MANAGEMENT.RKE_TEMPLATE_REVISION) ) {
|
|
208
|
-
this.$store.dispatch('management/findAll', { type: MANAGEMENT.RKE_TEMPLATE_REVISION });
|
|
209
|
-
}
|
|
210
202
|
},
|
|
211
203
|
|
|
212
204
|
created() {
|
|
@@ -284,9 +276,11 @@ export default {
|
|
|
284
276
|
extCustomParams: null,
|
|
285
277
|
extDetailTabs: {
|
|
286
278
|
machines: true, // in this component
|
|
279
|
+
nodes: true, // in this component
|
|
287
280
|
logs: true, // in this component
|
|
288
281
|
registration: true, // in this component
|
|
289
282
|
snapshots: true, // in this component
|
|
283
|
+
autoscaler: true, // in this component
|
|
290
284
|
related: true, // in ResourceTabs
|
|
291
285
|
events: true, // in ResourceTabs
|
|
292
286
|
conditions: true, // in ResourceTabs
|
|
@@ -451,7 +445,7 @@ export default {
|
|
|
451
445
|
},
|
|
452
446
|
|
|
453
447
|
showNodes() {
|
|
454
|
-
return !this.showMachines && this.haveNodes && !!this.nodes.length && this.extDetailTabs.
|
|
448
|
+
return !this.showMachines && this.haveNodes && !!this.nodes.length && this.extDetailTabs.nodes;
|
|
455
449
|
},
|
|
456
450
|
|
|
457
451
|
showSnapshots() {
|
|
@@ -628,7 +622,7 @@ export default {
|
|
|
628
622
|
},
|
|
629
623
|
|
|
630
624
|
showAutoScalerTab() {
|
|
631
|
-
return isAutoscalerFeatureFlagEnabled(this.$store) && this.value.hasAccessToAutoscalerConfigMap;
|
|
625
|
+
return isAutoscalerFeatureFlagEnabled(this.$store) && this.value.hasAccessToAutoscalerConfigMap && this.extDetailTabs.autoscaler;
|
|
632
626
|
}
|
|
633
627
|
},
|
|
634
628
|
|
|
@@ -4,6 +4,7 @@ import HelmOp from '@shell/models/fleet.cattle.io.helmop';
|
|
|
4
4
|
import HelmOpComponent from '@shell/edit/fleet.cattle.io.helmop.vue';
|
|
5
5
|
import FleetSecretSelector from '@shell/components/fleet/FleetSecretSelector.vue';
|
|
6
6
|
import FleetConfigMapSelector from '@shell/components/fleet/FleetConfigMapSelector.vue';
|
|
7
|
+
import { createStore } from 'vuex';
|
|
7
8
|
|
|
8
9
|
const mockStore = {
|
|
9
10
|
dispatch: jest.fn(),
|
|
@@ -85,6 +86,14 @@ const initHelmOp = (props: any, options = {}) => {
|
|
|
85
86
|
value,
|
|
86
87
|
...props
|
|
87
88
|
},
|
|
89
|
+
provide: {
|
|
90
|
+
store: createStore({
|
|
91
|
+
getters: {
|
|
92
|
+
currentStore: () => 'current_store',
|
|
93
|
+
'management/paginationEnabled': () => () => false
|
|
94
|
+
}
|
|
95
|
+
})
|
|
96
|
+
},
|
|
88
97
|
computed: mockComputed,
|
|
89
98
|
global: { mocks },
|
|
90
99
|
};
|
|
@@ -30,7 +30,6 @@ describe('view: kontainerdriver should', () => {
|
|
|
30
30
|
active: true,
|
|
31
31
|
checksum: '',
|
|
32
32
|
url: '',
|
|
33
|
-
uiUrl: '',
|
|
34
33
|
whitelistDomains: []
|
|
35
34
|
}
|
|
36
35
|
},
|
|
@@ -65,32 +64,22 @@ describe('view: kontainerdriver should', () => {
|
|
|
65
64
|
|
|
66
65
|
it('have "Create" button enabled and disabled depending on validation results', async() => {
|
|
67
66
|
const urlField = wrapper.find('[data-testid="driver-create-url-field"]');
|
|
68
|
-
const uiurlField = wrapper.find('[data-testid="driver-create-uiurl-field"]');
|
|
69
67
|
const checksumField = wrapper.find('[data-testid="driver-create-checksum-field"]');
|
|
70
68
|
const saveButton = wrapper.find('[data-testid="kontainer-driver-edit-save"]').element as HTMLInputElement;
|
|
71
69
|
|
|
72
70
|
const testCases = [
|
|
73
71
|
{
|
|
74
72
|
url: '1111',
|
|
75
|
-
uiurl: 'http://test.com',
|
|
76
73
|
checksum: 'aaaaaBBBBdddd',
|
|
77
74
|
result: true
|
|
78
75
|
},
|
|
79
76
|
{
|
|
80
77
|
url: 'http://test.com',
|
|
81
|
-
uiurl: '1111',
|
|
82
|
-
checksum: 'aaaaaBBBBdddd',
|
|
83
|
-
result: true
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
url: 'http://test.com',
|
|
87
|
-
uiurl: 'http://test.com',
|
|
88
78
|
checksum: '!!!',
|
|
89
79
|
result: true
|
|
90
80
|
},
|
|
91
81
|
{
|
|
92
82
|
url: 'http://test.com',
|
|
93
|
-
uiurl: 'http://test.com',
|
|
94
83
|
checksum: 'aaaaaBBBBdddd',
|
|
95
84
|
result: false
|
|
96
85
|
}
|
|
@@ -99,8 +88,6 @@ describe('view: kontainerdriver should', () => {
|
|
|
99
88
|
for (const testCase of testCases) {
|
|
100
89
|
urlField.setValue(testCase.url);
|
|
101
90
|
await nextTick();
|
|
102
|
-
uiurlField.setValue(testCase.uiurl);
|
|
103
|
-
await nextTick();
|
|
104
91
|
checksumField.setValue(testCase.checksum);
|
|
105
92
|
await nextTick();
|
|
106
93
|
|
|
@@ -31,7 +31,6 @@ describe('view: nodedriver should', () => {
|
|
|
31
31
|
active: true,
|
|
32
32
|
checksum: '',
|
|
33
33
|
url: '',
|
|
34
|
-
uiUrl: '',
|
|
35
34
|
whitelistDomains: []
|
|
36
35
|
}
|
|
37
36
|
},
|
|
@@ -65,21 +64,16 @@ describe('view: nodedriver should', () => {
|
|
|
65
64
|
});
|
|
66
65
|
|
|
67
66
|
it.each`
|
|
68
|
-
url |
|
|
69
|
-
${ '1111' } | ${ '
|
|
70
|
-
${ 'http://test.com' } | ${ '
|
|
71
|
-
${ 'http://test.com' } | ${ '
|
|
72
|
-
|
|
73
|
-
`('have "Create" button enabled and disabled depending on validation results', async({
|
|
74
|
-
url, uiurl, checksum, expected
|
|
75
|
-
}) => {
|
|
67
|
+
url | checksum | expected
|
|
68
|
+
${ '1111' } | ${ 'aaaaaBBBBdddd' } | ${ true }
|
|
69
|
+
${ 'http://test.com' } | ${ '!!!' } | ${ true }
|
|
70
|
+
${ 'http://test.com' } | ${ 'aaaaaBBBBdddd' } | ${ false }
|
|
71
|
+
`('have "Create" button enabled and disabled depending on validation results', async({ url, checksum, expected }) => {
|
|
76
72
|
const urlField = wrapper.find('[data-testid="driver-create-url-field"]');
|
|
77
|
-
const uiurlField = wrapper.find('[data-testid="driver-create-uiurl-field"]');
|
|
78
73
|
const checksumField = wrapper.find('[data-testid="driver-create-checksum-field"]');
|
|
79
74
|
const saveButton = wrapper.find('[data-testid="node-driver-edit-save"]').element as HTMLInputElement;
|
|
80
75
|
|
|
81
76
|
urlField.setValue(url);
|
|
82
|
-
uiurlField.setValue(uiurl);
|
|
83
77
|
checksumField.setValue(checksum);
|
|
84
78
|
|
|
85
79
|
await nextTick();
|
|
@@ -2,6 +2,7 @@ import { nextTick } from 'vue';
|
|
|
2
2
|
import { mount } from '@vue/test-utils';
|
|
3
3
|
import RestoreComponent from '@shell/edit/resources.cattle.io.restore.vue';
|
|
4
4
|
import { _CREATE } from '@shell/config/query-params';
|
|
5
|
+
import { createStore } from 'vuex';
|
|
5
6
|
|
|
6
7
|
describe('view: restore storage source switching', () => {
|
|
7
8
|
let wrapper: any;
|
|
@@ -30,6 +31,14 @@ describe('view: restore storage source switching', () => {
|
|
|
30
31
|
};
|
|
31
32
|
|
|
32
33
|
return mount(RestoreComponent, {
|
|
34
|
+
provide: {
|
|
35
|
+
store: createStore({
|
|
36
|
+
getters: {
|
|
37
|
+
currentStore: () => 'current_store',
|
|
38
|
+
'cluster/paginationEnabled': () => () => false
|
|
39
|
+
}
|
|
40
|
+
})
|
|
41
|
+
},
|
|
33
42
|
global: {
|
|
34
43
|
mocks: {
|
|
35
44
|
$store: mockStore,
|
|
@@ -65,7 +65,9 @@ exports[`component: General rendering & initial state should render with default
|
|
|
65
65
|
clearable="false"
|
|
66
66
|
closeonselect="true"
|
|
67
67
|
disabled="false"
|
|
68
|
+
filterable="true"
|
|
68
69
|
hovertooltip="true"
|
|
70
|
+
instore="cluster"
|
|
69
71
|
label="auditPolicy.general.verbosity.level.label"
|
|
70
72
|
loading="false"
|
|
71
73
|
localizedlabel="false"
|
|
@@ -73,8 +75,12 @@ exports[`component: General rendering & initial state should render with default
|
|
|
73
75
|
nooptionslabelkey="labelSelect.noOptions.empty"
|
|
74
76
|
optionlabel="label"
|
|
75
77
|
options="[object Object],[object Object],[object Object],[object Object]"
|
|
78
|
+
placeholder=""
|
|
76
79
|
reduce="[Function]"
|
|
77
80
|
required="false"
|
|
81
|
+
requiredirty="true"
|
|
82
|
+
rules=""
|
|
83
|
+
searchable="false"
|
|
78
84
|
selectable="[Function]"
|
|
79
85
|
value="0"
|
|
80
86
|
/>
|