@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
|
@@ -1,22 +1,17 @@
|
|
|
1
1
|
import {
|
|
2
|
-
CAPI, MANAGEMENT, NAMESPACE, NORMAN, SNAPSHOT,
|
|
2
|
+
CAPI, MANAGEMENT, NAMESPACE, NORMAN, SNAPSHOT, LOCAL_CLUSTER,
|
|
3
3
|
CONFIG_MAP, AUTOSCALER_CONFIG_MAP_ID,
|
|
4
4
|
EVENT
|
|
5
5
|
} from '@shell/config/types';
|
|
6
6
|
import SteveModel from '@shell/plugins/steve/steve-class';
|
|
7
7
|
import { findBy } from '@shell/utils/array';
|
|
8
8
|
import { get, set } from '@shell/utils/object';
|
|
9
|
-
import { sortBy } from '@shell/utils/sort';
|
|
10
|
-
import { ucFirst } from '@shell/utils/string';
|
|
11
9
|
import { compare } from '@shell/utils/version';
|
|
12
|
-
import {
|
|
13
|
-
import { CAPI as CAPI_ANNOTATIONS, NODE_ARCHITECTURE } from '@shell/config/labels-annotations';
|
|
14
|
-
import { KEV1 } from '@shell/models/management.cattle.io.kontainerdriver';
|
|
10
|
+
import { CAPI as CAPI_ANNOTATIONS } from '@shell/config/labels-annotations';
|
|
15
11
|
import jsyaml from 'js-yaml';
|
|
16
12
|
import { defineAsyncComponent, markRaw } from 'vue';
|
|
17
13
|
import stevePaginationUtils from '@shell/plugins/steve/steve-pagination-utils';
|
|
18
14
|
import { PaginationFilterField, PaginationParamFilter } from '@shell/types/store/pagination.types';
|
|
19
|
-
import { isHostedProvider } from '@shell/utils/provider';
|
|
20
15
|
|
|
21
16
|
const RKE1_ALLOWED_ACTIONS = [
|
|
22
17
|
'promptRemove',
|
|
@@ -97,7 +92,7 @@ export default class ProvCluster extends SteveModel {
|
|
|
97
92
|
}
|
|
98
93
|
|
|
99
94
|
get canExplore() {
|
|
100
|
-
return this.mgmt?.
|
|
95
|
+
return this.mgmt?.canExplore;
|
|
101
96
|
}
|
|
102
97
|
|
|
103
98
|
get canEdit() {
|
|
@@ -222,25 +217,11 @@ export default class ProvCluster extends SteveModel {
|
|
|
222
217
|
}
|
|
223
218
|
|
|
224
219
|
get normanCluster() {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
if ( !name ) {
|
|
228
|
-
return null;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
const out = this.$rootGetters['rancher/byId'](NORMAN.CLUSTER, name);
|
|
232
|
-
|
|
233
|
-
return out;
|
|
220
|
+
return this.mgmt?.normanCluster;
|
|
234
221
|
}
|
|
235
222
|
|
|
236
223
|
async findNormanCluster() {
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
if ( !name ) {
|
|
240
|
-
return null;
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
return await this.$dispatch('rancher/find', { type: NORMAN.CLUSTER, id: name }, { root: true });
|
|
224
|
+
return this.mgmt?.findNormanCluster();
|
|
244
225
|
}
|
|
245
226
|
|
|
246
227
|
explore() {
|
|
@@ -253,15 +234,7 @@ export default class ProvCluster extends SteveModel {
|
|
|
253
234
|
}
|
|
254
235
|
|
|
255
236
|
async goToHarvesterCluster() {
|
|
256
|
-
|
|
257
|
-
...this,
|
|
258
|
-
type: HCI.CLUSTER
|
|
259
|
-
});
|
|
260
|
-
|
|
261
|
-
try {
|
|
262
|
-
await harvesterCluster.goToCluster();
|
|
263
|
-
} catch {
|
|
264
|
-
}
|
|
237
|
+
return this.mgmt?.goToHarvesterCluster();
|
|
265
238
|
}
|
|
266
239
|
|
|
267
240
|
get canDelete() {
|
|
@@ -277,15 +250,7 @@ export default class ProvCluster extends SteveModel {
|
|
|
277
250
|
}
|
|
278
251
|
|
|
279
252
|
get isHostedKubernetesProvider() {
|
|
280
|
-
|
|
281
|
-
dispatch: this.$dispatch,
|
|
282
|
-
getters: this.$getters,
|
|
283
|
-
axios: this.$axios,
|
|
284
|
-
$extension: this.$extension,
|
|
285
|
-
t: (...args) => this.t.apply(this, args),
|
|
286
|
-
};
|
|
287
|
-
|
|
288
|
-
return isHostedProvider(context, this.provisioner);
|
|
253
|
+
return this.mgmt?.isHostedKubernetesProvider;
|
|
289
254
|
}
|
|
290
255
|
|
|
291
256
|
get providerConfig() {
|
|
@@ -300,18 +265,7 @@ export default class ProvCluster extends SteveModel {
|
|
|
300
265
|
}
|
|
301
266
|
|
|
302
267
|
get isPrivateHostedProvider() {
|
|
303
|
-
|
|
304
|
-
switch (this.provisioner.toLowerCase()) {
|
|
305
|
-
case 'gke':
|
|
306
|
-
return this.mgmt.spec?.gkeConfig?.privateClusterConfig?.enablePrivateEndpoint;
|
|
307
|
-
case 'eks':
|
|
308
|
-
return this.mgmt.spec?.eksConfig?.privateAccess;
|
|
309
|
-
case 'aks':
|
|
310
|
-
return this.mgmt.spec?.aksConfig?.privateCluster;
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
return false;
|
|
268
|
+
return this.mgmt?.isPrivateHostedProvider || false;
|
|
315
269
|
}
|
|
316
270
|
|
|
317
271
|
get isLocal() {
|
|
@@ -320,7 +274,7 @@ export default class ProvCluster extends SteveModel {
|
|
|
320
274
|
|
|
321
275
|
// Is the cluster a legacy (unsupported) KEV1 cluster?
|
|
322
276
|
get isKev1() {
|
|
323
|
-
return
|
|
277
|
+
return this.mgmt?.isKev1;
|
|
324
278
|
}
|
|
325
279
|
|
|
326
280
|
get isImported() {
|
|
@@ -328,39 +282,11 @@ export default class ProvCluster extends SteveModel {
|
|
|
328
282
|
return false;
|
|
329
283
|
}
|
|
330
284
|
|
|
331
|
-
|
|
332
|
-
// Provisioned rke2 and k3s have status.driver === imported
|
|
333
|
-
const provider = this.mgmt?.status?.provider;
|
|
334
|
-
const driver = this.mgmt?.status?.driver;
|
|
335
|
-
|
|
336
|
-
// The main case
|
|
337
|
-
if (provider === 'k3s' || provider === 'rke2') {
|
|
338
|
-
return driver === provider;
|
|
339
|
-
}
|
|
340
|
-
// The 'waiting' case
|
|
341
|
-
if (!provider && (driver === 'k3s' || driver === 'rke2')) {
|
|
342
|
-
return true;
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
// imported KEv2
|
|
346
|
-
// we can't rely on this.provisioner to determine imported-ness for these clusters, as it will return 'aks' 'eks' 'gke' for both provisioned and imported clusters
|
|
347
|
-
if (this.isHostedKubernetesProvider && !!this.providerConfig.imported) {
|
|
348
|
-
return true;
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
return this.provisioner === 'imported';
|
|
285
|
+
return this.mgmt?.isImported;
|
|
352
286
|
}
|
|
353
287
|
|
|
354
288
|
get isCustom() {
|
|
355
|
-
|
|
356
|
-
return !(this.spec?.rkeConfig?.machinePools?.length);
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
if ( this.isRke1 ) {
|
|
360
|
-
return !this.pools?.length;
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
return false;
|
|
289
|
+
return this.mgmt?.isCustom;
|
|
364
290
|
}
|
|
365
291
|
|
|
366
292
|
get confirmRemove() {
|
|
@@ -368,24 +294,24 @@ export default class ProvCluster extends SteveModel {
|
|
|
368
294
|
}
|
|
369
295
|
|
|
370
296
|
get isImportedK3s() {
|
|
371
|
-
return this.
|
|
297
|
+
return this.mgmt?.isImportedK3s;
|
|
372
298
|
}
|
|
373
299
|
|
|
374
300
|
get isImportedRke2() {
|
|
375
|
-
return this.
|
|
301
|
+
return this.mgmt?.isImportedRke2;
|
|
376
302
|
}
|
|
377
303
|
|
|
378
304
|
get isK3s() {
|
|
379
|
-
return this.mgmt?.
|
|
305
|
+
return this.mgmt?.isK3s;
|
|
380
306
|
}
|
|
381
307
|
|
|
382
308
|
get isRke2() {
|
|
309
|
+
// This isn't mapped to mgmt isRke2 to ensure the create flow --> edit yaml (where no mgmt cluster exists) works correctly
|
|
383
310
|
return !!this.spec?.rkeConfig;
|
|
384
311
|
}
|
|
385
312
|
|
|
386
313
|
get isRke1() {
|
|
387
|
-
|
|
388
|
-
return !!this.mgmt?.spec?.rancherKubernetesEngineConfig || this.mgmt?.labels['provider.cattle.io'] === 'rke';
|
|
314
|
+
return false;
|
|
389
315
|
}
|
|
390
316
|
|
|
391
317
|
get isHarvester() {
|
|
@@ -394,23 +320,19 @@ export default class ProvCluster extends SteveModel {
|
|
|
394
320
|
|
|
395
321
|
// identify v2 provisioning clusters created using upstream capi infrastructure providers instead of rancher/machine
|
|
396
322
|
get isCapiHybrid() {
|
|
397
|
-
|
|
398
|
-
return false;
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
const machineReferences = (this.spec?.rkeConfig?.machinePools || []).map((pool) => pool.machineConfigRef);
|
|
402
|
-
|
|
403
|
-
const capiMachines = machineReferences.find((r) => r?.apiVersion?.includes('cluster.x-k8s.io'));
|
|
404
|
-
|
|
405
|
-
return !!capiMachines;
|
|
323
|
+
return this.mgmt?.isCapiHybrid;
|
|
406
324
|
}
|
|
407
325
|
|
|
408
326
|
get mgmtClusterId() {
|
|
327
|
+
if (this.status?.clusterName) {
|
|
328
|
+
return this.status.clusterName;
|
|
329
|
+
}
|
|
330
|
+
|
|
409
331
|
// when a cluster is created `this` instance isn't immediately updated with `status.clusterName`
|
|
410
332
|
// Workaround - Get fresh copy from the store
|
|
411
333
|
const pCluster = this.$rootGetters['management/byId'](CAPI.RANCHER_CLUSTER, this.id);
|
|
412
334
|
|
|
413
|
-
return
|
|
335
|
+
return pCluster?.status?.clusterName;
|
|
414
336
|
}
|
|
415
337
|
|
|
416
338
|
get mgmt() {
|
|
@@ -424,7 +346,7 @@ export default class ProvCluster extends SteveModel {
|
|
|
424
346
|
// nodeGroups can be undefined for an EKS cluster that has just been created and has not
|
|
425
347
|
// had any node groups added to it
|
|
426
348
|
get eksNodeGroups() {
|
|
427
|
-
return this.mgmt?.
|
|
349
|
+
return this.mgmt?.eksNodeGroups || [];
|
|
428
350
|
}
|
|
429
351
|
|
|
430
352
|
waitForProvisioner(timeout, interval) {
|
|
@@ -435,157 +357,47 @@ export default class ProvCluster extends SteveModel {
|
|
|
435
357
|
|
|
436
358
|
waitForMgmt(timeout = 60000, interval) {
|
|
437
359
|
return this.waitForTestFn(() => {
|
|
438
|
-
|
|
439
|
-
// Workaround - Get fresh copy from the store
|
|
440
|
-
const pCluster = this.$rootGetters['management/byId'](CAPI.RANCHER_CLUSTER, this.id);
|
|
441
|
-
const name = this.status?.clusterName || pCluster?.status?.clusterName;
|
|
360
|
+
const mgmtId = this.mgmtClusterId;
|
|
442
361
|
|
|
443
362
|
try {
|
|
444
|
-
if (
|
|
363
|
+
if (mgmtId) {
|
|
445
364
|
// Just in case we're not generically watching all mgmt clusters and...
|
|
446
365
|
// thus won't receive new mgmt cluster over socket...
|
|
447
366
|
// fire and forget a request to fetch it (this won't make multiple requests if one is already running)
|
|
448
|
-
this.$dispatch('find', { type: MANAGEMENT.CLUSTER, id:
|
|
367
|
+
this.$dispatch('find', { type: MANAGEMENT.CLUSTER, id: mgmtId });
|
|
449
368
|
}
|
|
450
369
|
} catch {}
|
|
451
370
|
|
|
452
|
-
return
|
|
453
|
-
}, this.$rootGetters['i18n/t']('cluster.managementTimeout'), timeout, interval);
|
|
371
|
+
return mgmtId && !!this.$rootGetters['management/byId'](MANAGEMENT.CLUSTER, mgmtId);
|
|
372
|
+
}, this.$rootGetters['i18n/t']('cluster.managementTimeout', { type: MANAGEMENT.CLUSTER, name: this.mgmtClusterId }), timeout, interval);
|
|
454
373
|
}
|
|
455
374
|
|
|
456
375
|
get provisioner() {
|
|
457
|
-
|
|
458
|
-
const allKeys = Object.keys(this.spec);
|
|
459
|
-
const configKey = allKeys.find( (k) => k.endsWith('Config'));
|
|
460
|
-
|
|
461
|
-
if ( configKey === 'rkeConfig') {
|
|
462
|
-
return 'rke2';
|
|
463
|
-
} else if ( configKey ) {
|
|
464
|
-
return configKey.replace(/config$/i, '');
|
|
465
|
-
}
|
|
466
|
-
} else if ( this.mgmt ) {
|
|
467
|
-
return this.mgmt.provisioner;
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
return null;
|
|
376
|
+
return this.mgmt?.provisioner;
|
|
471
377
|
}
|
|
472
378
|
|
|
473
379
|
get provisionerDisplay() {
|
|
474
|
-
|
|
475
|
-
if (this.customProvisionerHelper?.provisionerDisplay) {
|
|
476
|
-
return this.customProvisionerHelper?.provisionerDisplay(this);
|
|
477
|
-
}
|
|
478
|
-
|
|
479
|
-
let provisioner = (this.provisioner || '').toLowerCase();
|
|
480
|
-
|
|
481
|
-
// RKE provisioner can actually do K3s too...
|
|
482
|
-
if ( provisioner === 'rke2' && this.spec?.kubernetesVersion?.includes('k3s') ) {
|
|
483
|
-
provisioner = 'k3s';
|
|
484
|
-
} else if ( this.isImportedK3s ) {
|
|
485
|
-
provisioner = 'k3s';
|
|
486
|
-
} else if ( this.isImportedRke2 ) {
|
|
487
|
-
provisioner = 'rke2';
|
|
488
|
-
} else if ((this.isImported || this.isLocal) && this.isRke1) {
|
|
489
|
-
provisioner = 'rke';
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
return this.$rootGetters['i18n/withFallback'](`cluster.provider."${ provisioner }"`, null, ucFirst(provisioner));
|
|
380
|
+
return this.mgmt?.provisionerDisplay;
|
|
493
381
|
}
|
|
494
382
|
|
|
495
383
|
get providerLogo() {
|
|
496
384
|
return this.mgmt?.providerLogo;
|
|
497
385
|
}
|
|
498
386
|
|
|
499
|
-
get nodesArchitecture() {
|
|
500
|
-
const obj = {};
|
|
501
|
-
|
|
502
|
-
this.nodes?.forEach((node) => {
|
|
503
|
-
if (!node.metadata?.state?.transitioning) {
|
|
504
|
-
const architecture = node.status?.nodeLabels?.[NODE_ARCHITECTURE];
|
|
505
|
-
|
|
506
|
-
const key = architecture || this.t('cluster.architecture.label.unknown');
|
|
507
|
-
|
|
508
|
-
obj[key] = (obj[key] || 0) + 1;
|
|
509
|
-
}
|
|
510
|
-
});
|
|
511
|
-
|
|
512
|
-
return obj;
|
|
513
|
-
}
|
|
514
|
-
|
|
515
387
|
get architecture() {
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
switch (keys.length) {
|
|
519
|
-
case 0:
|
|
520
|
-
return { label: this.t('generic.provisioning') };
|
|
521
|
-
case 1:
|
|
522
|
-
return { label: keys[0] };
|
|
523
|
-
default:
|
|
524
|
-
return {
|
|
525
|
-
label: this.t('cluster.architecture.label.mixed'),
|
|
526
|
-
tooltip: keys.reduce((acc, k) => `${ acc }${ k }: ${ this.nodesArchitecture[k] }<br>`, '')
|
|
527
|
-
};
|
|
528
|
-
}
|
|
388
|
+
return this.mgmt?.architecture;
|
|
529
389
|
}
|
|
530
390
|
|
|
531
391
|
get kubernetesVersion() {
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
if ( this.isRke2 ) {
|
|
535
|
-
const fromStatus = this.status?.version?.gitVersion;
|
|
536
|
-
const fromSpec = this.spec?.kubernetesVersion;
|
|
537
|
-
|
|
538
|
-
return fromStatus || fromSpec || unknown;
|
|
539
|
-
} else if ( this.mgmt ) {
|
|
540
|
-
return this.mgmt.kubernetesVersion || unknown;
|
|
541
|
-
} else {
|
|
542
|
-
return unknown;
|
|
543
|
-
}
|
|
392
|
+
return this.mgmt?.kubernetesVersion;
|
|
544
393
|
}
|
|
545
394
|
|
|
546
395
|
get machineProvider() {
|
|
547
|
-
|
|
548
|
-
const fromAnnotation = this.annotations?.[CAPI_ANNOTATIONS.UI_CUSTOM_PROVIDER];
|
|
549
|
-
|
|
550
|
-
if (fromAnnotation) {
|
|
551
|
-
return fromAnnotation;
|
|
552
|
-
}
|
|
553
|
-
|
|
554
|
-
if (this.isHarvester) {
|
|
555
|
-
return HARVESTER;
|
|
556
|
-
} else if ( this.isImported || this.isCapiHybrid ) {
|
|
557
|
-
return null;
|
|
558
|
-
} else if ( this.isRke2 ) {
|
|
559
|
-
const kind = this.spec?.rkeConfig?.machinePools?.[0]?.machineConfigRef?.kind?.toLowerCase();
|
|
560
|
-
|
|
561
|
-
if ( kind ) {
|
|
562
|
-
return kind.replace(/config$/i, '').toLowerCase();
|
|
563
|
-
}
|
|
564
|
-
|
|
565
|
-
return null;
|
|
566
|
-
} else if ( this.mgmt?.machineProvider ) {
|
|
567
|
-
return this.mgmt.machineProvider.toLowerCase();
|
|
568
|
-
}
|
|
569
|
-
|
|
570
|
-
return null;
|
|
396
|
+
return this.mgmt?.machineProvider?.toLowerCase();
|
|
571
397
|
}
|
|
572
398
|
|
|
573
399
|
get machineProviderDisplay() {
|
|
574
|
-
|
|
575
|
-
return this.customProvisionerHelper?.machineProviderDisplay(this);
|
|
576
|
-
}
|
|
577
|
-
|
|
578
|
-
if ( this.isImported ) {
|
|
579
|
-
return null;
|
|
580
|
-
}
|
|
581
|
-
|
|
582
|
-
const provider = (this.machineProvider || '').toLowerCase();
|
|
583
|
-
|
|
584
|
-
if ( provider ) {
|
|
585
|
-
return this.$rootGetters['i18n/withFallback'](`cluster.provider."${ provider }"`, null, provider);
|
|
586
|
-
} else {
|
|
587
|
-
return this.$rootGetters['i18n/t']('generic.unknown');
|
|
588
|
-
}
|
|
400
|
+
return this.mgmt?.machineProviderDisplay;
|
|
589
401
|
}
|
|
590
402
|
|
|
591
403
|
get machinePoolDefaults() {
|
|
@@ -613,120 +425,47 @@ export default class ProvCluster extends SteveModel {
|
|
|
613
425
|
}
|
|
614
426
|
|
|
615
427
|
get nodes() {
|
|
616
|
-
return this
|
|
428
|
+
return this.mgmt?.nodes || [];
|
|
617
429
|
}
|
|
618
430
|
|
|
619
431
|
get machines() {
|
|
620
|
-
return this
|
|
621
|
-
if ( machine.metadata?.namespace !== this.metadata.namespace ) {
|
|
622
|
-
return false;
|
|
623
|
-
}
|
|
624
|
-
|
|
625
|
-
return machine.spec?.clusterName === this.metadata.name;
|
|
626
|
-
});
|
|
432
|
+
return this.mgmt?.machines || [];
|
|
627
433
|
}
|
|
628
434
|
|
|
629
435
|
get displayName() {
|
|
630
|
-
|
|
631
|
-
return this.mgmt.spec.displayName;
|
|
632
|
-
}
|
|
633
|
-
|
|
634
|
-
return null;
|
|
436
|
+
return this.mgmt?.nameDisplay || null;
|
|
635
437
|
}
|
|
636
438
|
|
|
637
439
|
get pools() {
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
if (!!deployments.length) {
|
|
641
|
-
return deployments;
|
|
642
|
-
}
|
|
643
|
-
|
|
644
|
-
return this.$rootGetters['management/all'](MANAGEMENT.NODE_POOL).filter((pool) => pool.spec.clusterName === this.status?.clusterName);
|
|
440
|
+
return this.mgmt?.pools || [];
|
|
645
441
|
}
|
|
646
442
|
|
|
647
443
|
get desired() {
|
|
648
|
-
return this.
|
|
444
|
+
return this.mgmt?.desired || 0;
|
|
649
445
|
}
|
|
650
446
|
|
|
651
447
|
get pending() {
|
|
652
|
-
return this.
|
|
448
|
+
return this.mgmt?.pending || 0;
|
|
653
449
|
}
|
|
654
450
|
|
|
655
451
|
get outdated() {
|
|
656
|
-
return this.
|
|
452
|
+
return this.mgmt?.outdated || 0;
|
|
657
453
|
}
|
|
658
454
|
|
|
659
455
|
get ready() {
|
|
660
|
-
return this.
|
|
456
|
+
return this.mgmt?.ready || 0;
|
|
661
457
|
}
|
|
662
458
|
|
|
663
459
|
get unavailable() {
|
|
664
|
-
return this.
|
|
460
|
+
return this.mgmt?.unavailable || 0;
|
|
665
461
|
}
|
|
666
462
|
|
|
667
463
|
get unavailableMachines() {
|
|
668
|
-
|
|
669
|
-
if (this.isRke1) {
|
|
670
|
-
const names = this.nodes.filter((node) => {
|
|
671
|
-
return node.status.conditions.find((c) => c.error && c.type === 'Ready');
|
|
672
|
-
}).map((node) => {
|
|
673
|
-
const name = node.status.nodeName || node.metadata.name;
|
|
674
|
-
|
|
675
|
-
return this.t('cluster.availabilityWarnings.node', { name });
|
|
676
|
-
});
|
|
677
|
-
|
|
678
|
-
return names.join('<br>');
|
|
679
|
-
} else {
|
|
680
|
-
const names = this.machines.filter((machine) => {
|
|
681
|
-
return machine.status?.conditions?.find((c) => c.error && c.type === 'NodeHealthy');
|
|
682
|
-
}).map((machine) => {
|
|
683
|
-
if (machine.status?.nodeRef?.name) {
|
|
684
|
-
return this.t('cluster.availabilityWarnings.node', { name: machine.status.nodeRef.name });
|
|
685
|
-
}
|
|
686
|
-
|
|
687
|
-
return this.t('cluster.availabilityWarnings.machine', { name: machine.metadata.name });
|
|
688
|
-
});
|
|
689
|
-
|
|
690
|
-
return names.join('<br>');
|
|
691
|
-
}
|
|
692
|
-
}
|
|
693
|
-
|
|
694
|
-
return '';
|
|
464
|
+
return this.mgmt?.unavailableMachines || '';
|
|
695
465
|
}
|
|
696
466
|
|
|
697
467
|
get stateParts() {
|
|
698
|
-
|
|
699
|
-
{
|
|
700
|
-
label: 'Pending',
|
|
701
|
-
color: 'bg-info',
|
|
702
|
-
textColor: 'text-info',
|
|
703
|
-
value: this.pending,
|
|
704
|
-
sort: 1,
|
|
705
|
-
},
|
|
706
|
-
{
|
|
707
|
-
label: 'Outdated',
|
|
708
|
-
color: 'bg-warning',
|
|
709
|
-
textColor: 'text-warning',
|
|
710
|
-
value: this.outdated,
|
|
711
|
-
sort: 2,
|
|
712
|
-
},
|
|
713
|
-
{
|
|
714
|
-
label: 'Unavailable',
|
|
715
|
-
color: 'bg-error',
|
|
716
|
-
textColor: 'text-error',
|
|
717
|
-
value: this.unavailable,
|
|
718
|
-
sort: 3,
|
|
719
|
-
},
|
|
720
|
-
{
|
|
721
|
-
label: 'Ready',
|
|
722
|
-
color: 'bg-success',
|
|
723
|
-
textColor: 'text-success',
|
|
724
|
-
value: this.ready,
|
|
725
|
-
sort: 4,
|
|
726
|
-
},
|
|
727
|
-
].filter((x) => x.value > 0);
|
|
728
|
-
|
|
729
|
-
return sortBy(out, 'sort:desc');
|
|
468
|
+
return this.mgmt?.stateParts;
|
|
730
469
|
}
|
|
731
470
|
|
|
732
471
|
async getOrCreateToken() {
|
|
@@ -995,27 +734,7 @@ export default class ProvCluster extends SteveModel {
|
|
|
995
734
|
}
|
|
996
735
|
|
|
997
736
|
get hasError() {
|
|
998
|
-
|
|
999
|
-
// but this is wrong as an error might exist but it might not be meaningful in the context of readiness of a cluster
|
|
1000
|
-
// which is what this 'hasError' is used for.
|
|
1001
|
-
// We now check if there's a ready condition after an error, which helps dictate the readiness of a cluster
|
|
1002
|
-
// Based on the findings in https://github.com/rancher/dashboard/issues/10043
|
|
1003
|
-
if (this.status?.conditions && this.status?.conditions.length) {
|
|
1004
|
-
// if there are errors, we compare with how recent the "Ready" condition is compared to that error, otherwise we just move on
|
|
1005
|
-
if (this.status?.conditions.some((c) => c.error === true)) {
|
|
1006
|
-
// there's no ready condition and has an error, mark it
|
|
1007
|
-
if (!this.status?.conditions.some((c) => c.type === 'Ready')) {
|
|
1008
|
-
return true;
|
|
1009
|
-
}
|
|
1010
|
-
|
|
1011
|
-
const filteredConditions = this.status?.conditions.filter((c) => c.error === true || c.type === 'Ready');
|
|
1012
|
-
const mostRecentCondition = filteredConditions.reduce((a, b) => ((a.lastUpdateTime > b.lastUpdateTime) ? a : b));
|
|
1013
|
-
|
|
1014
|
-
return mostRecentCondition.error;
|
|
1015
|
-
}
|
|
1016
|
-
}
|
|
1017
|
-
|
|
1018
|
-
return false;
|
|
737
|
+
return this.mgmt ? this.mgmt.hasError : true;
|
|
1019
738
|
}
|
|
1020
739
|
|
|
1021
740
|
get namespaceLocation() {
|
|
@@ -1242,9 +961,7 @@ export default class ProvCluster extends SteveModel {
|
|
|
1242
961
|
}
|
|
1243
962
|
|
|
1244
963
|
get isAutoscalerEnabled() {
|
|
1245
|
-
return
|
|
1246
|
-
return typeof pool.autoscalingMinSize !== 'undefined' || typeof pool.autoscalingMaxSize !== 'undefined';
|
|
1247
|
-
});
|
|
964
|
+
return this.mgmt?.isAutoscalerEnabled;
|
|
1248
965
|
}
|
|
1249
966
|
|
|
1250
967
|
get isAutoscalerPaused() {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import NormanModel from '@shell/plugins/steve/norman-class';
|
|
2
2
|
import { SNAPSHOT } from '@shell/config/labels-annotations';
|
|
3
3
|
import { CAPI } from '@shell/config/types';
|
|
4
|
-
import { findBy } from '@shell/utils/array';
|
|
5
4
|
import { get } from '@shell/utils/object';
|
|
6
5
|
import { base64Decode } from '@shell/utils/crypto';
|
|
7
6
|
import { ucFirst } from '@shell/utils/string';
|
|
@@ -39,7 +38,7 @@ export default class EtcdBackup extends NormanModel {
|
|
|
39
38
|
}
|
|
40
39
|
|
|
41
40
|
get cluster() {
|
|
42
|
-
return
|
|
41
|
+
return this.$rootGetters['management/byId'](CAPI.RANCHER_CLUSTER, `${ this.metadata.namespace }/${ this.clusterName }`);
|
|
43
42
|
}
|
|
44
43
|
|
|
45
44
|
get rke2() {
|