@rancher/shell 1.2.3 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/data/aws-regions.json +9 -0
- package/assets/images/vendor/openid.svg +18 -0
- package/assets/styles/app.scss +1 -2
- package/assets/styles/fonts/_icons.scss +3 -3
- package/assets/styles/global/_columns.scss +1 -1
- package/assets/styles/global/_labeled-input.scss +1 -0
- package/assets/styles/global/_layout.scss +99 -0
- package/assets/styles/themes/_csp.scss +2 -2
- package/assets/styles/themes/_dark.scss +8 -2
- package/assets/styles/themes/_light.scss +2 -1
- package/assets/styles/themes/_suse.scss +1 -1
- package/assets/styles/vendor/vue-select.scss +5 -0
- package/assets/translations/en-us.yaml +315 -64
- package/assets/translations/zh-hans.yaml +7 -31
- package/babel.config.js +8 -2
- package/chart/__tests__/S3.test.ts +9 -2
- package/chart/gatekeeper.vue +2 -11
- package/chart/istio.vue +1 -10
- package/chart/logging/index.vue +2 -11
- package/chart/monitoring/alerting/index.vue +7 -21
- package/chart/monitoring/grafana/index.vue +61 -2
- package/chart/monitoring/index.vue +52 -26
- package/chart/monitoring/prometheus/index.vue +39 -45
- package/chart/rancher-backup/S3.vue +11 -9
- package/chart/rancher-backup/index.vue +18 -15
- package/cloud-credential/__tests__/harvester.test.ts +18 -0
- package/cloud-credential/azure.vue +4 -17
- package/cloud-credential/generic.vue +18 -9
- package/cloud-credential/harvester.vue +11 -3
- package/components/AlertTable.vue +17 -7
- package/components/AppModal.vue +167 -0
- package/components/AssignTo.vue +7 -4
- package/components/AsyncButton.vue +27 -5
- package/components/BackLink.vue +4 -4
- package/components/BannerGraphic.vue +1 -0
- package/components/BrandImage.vue +47 -1
- package/components/Carousel.vue +15 -8
- package/components/Certificates.vue +161 -0
- package/components/ClusterBadge.vue +12 -3
- package/components/ClusterIconMenu.vue +55 -12
- package/components/ClusterProviderIcon.vue +14 -3
- package/components/CodeMirror.vue +111 -17
- package/components/CommunityLinks.vue +12 -8
- package/components/CopyCode.vue +6 -2
- package/components/CopyToClipboard.vue +2 -1
- package/components/CopyToClipboardText.vue +14 -9
- package/components/CreateDriver.vue +81 -0
- package/components/CruResource.vue +52 -27
- package/components/DetailTop.vue +2 -2
- package/components/Dialog.vue +6 -5
- package/components/DisableAuthProviderModal.vue +14 -8
- package/components/DraggableZone.vue +2 -2
- package/components/EtcdInfoBanner.vue +5 -5
- package/components/ExplorerMembers.vue +3 -3
- package/components/ExplorerProjectsNamespaces.vue +31 -7
- package/components/FixedBanner.vue +48 -36
- package/components/GlobalRoleBindings.vue +26 -0
- package/components/GrafanaDashboard.vue +6 -4
- package/components/IconOrSvg.vue +1 -1
- package/components/Import.vue +10 -6
- package/components/Inactivity.vue +1 -5
- package/components/KeyValueView.vue +14 -10
- package/components/Markdown.vue +16 -12
- package/components/MessageLink.vue +2 -2
- package/components/ModalWithCard.vue +5 -8
- package/components/MoveModal.vue +35 -33
- package/components/PodSecurityAdmission.vue +3 -3
- package/components/PromptChangePassword.vue +33 -33
- package/components/PromptModal.vue +11 -21
- package/components/PromptRemove.vue +12 -17
- package/components/PromptRestore.vue +18 -16
- package/components/Questions/__tests__/Boolean.test.ts +9 -19
- package/components/Questions/__tests__/Float.test.ts +9 -19
- package/components/Questions/__tests__/Int.test.ts +9 -19
- package/components/Questions/__tests__/String.test.ts +9 -19
- package/components/Questions/__tests__/Yaml.test.ts +9 -20
- package/components/Questions/__tests__/utils/questions-defaults.ts +20 -0
- package/components/Questions/index.vue +19 -3
- package/components/ResourceCancelModal.vue +34 -29
- package/components/ResourceDetail/Masthead.vue +48 -16
- package/components/ResourceDetail/index.vue +6 -4
- package/components/ResourceList/Masthead.vue +10 -9
- package/components/ResourceList/index.vue +65 -14
- package/components/ResourceTable.vue +87 -21
- package/components/ResourceYaml.vue +35 -5
- package/components/SelectIconGrid.vue +3 -3
- package/components/SideNav.vue +50 -94
- package/components/SingleClusterInfo.vue +4 -4
- package/components/SortableTable/THead.vue +33 -21
- package/components/SortableTable/filtering.js +9 -1
- package/components/SortableTable/grouping.js +8 -1
- package/components/SortableTable/index.vue +143 -44
- package/components/SortableTable/paging.js +36 -7
- package/components/SortableTable/selection.js +2 -1
- package/components/SortableTable/sorting.js +24 -7
- package/components/StatusTable.vue +5 -1
- package/components/Tabbed/index.vue +18 -1
- package/components/TableDataUserIcon.vue +47 -0
- package/components/TypeDescription.vue +1 -0
- package/components/Wizard.vue +1 -0
- package/components/YamlEditor.vue +1 -0
- package/components/__tests__/AppModal.test.ts +98 -0
- package/components/__tests__/AsyncButton.test.ts +1 -3
- package/components/__tests__/BackLink.test.ts +1 -1
- package/components/__tests__/ButtonGroup.test.ts +3 -6
- package/components/__tests__/Carousel.test.ts +43 -0
- package/components/__tests__/Certificates.test.ts +29 -0
- package/components/__tests__/CodeMirror.test.ts +87 -0
- package/components/__tests__/CopyCode.test.ts +5 -4
- package/components/__tests__/CruResource.test.ts +10 -9
- package/components/__tests__/EtcdInfoBanner.test.ts +37 -0
- package/components/__tests__/FixedBanner.test.ts +5 -20
- package/components/__tests__/NamespaceFilter.test.ts +9 -18
- package/components/__tests__/TabTitle.test.ts +129 -0
- package/components/auth/AzureWarning.vue +2 -2
- package/components/auth/RoleDetailEdit.vue +10 -0
- package/components/auth/__tests__/RoleDetailEdit.test.ts +3 -2
- package/components/auth/login/oidc.vue +7 -1
- package/components/fleet/FleetBundles.vue +5 -11
- package/components/fleet/FleetClusters.vue +9 -9
- package/components/fleet/FleetIntro.vue +11 -17
- package/components/fleet/FleetNoWorkspaces.vue +2 -2
- package/components/fleet/FleetRepos.vue +63 -27
- package/components/fleet/FleetResources.vue +6 -1
- package/components/fleet/FleetStatus.vue +3 -3
- package/components/fleet/FleetSummary.vue +35 -30
- package/components/fleet/ForceDirectedTreeChart/index.vue +9 -3
- package/components/fleet/__tests__/FleetSummary.test.ts +316 -0
- package/components/form/ArrayList.vue +22 -18
- package/components/form/ArrayListSelect.vue +5 -0
- package/components/form/BannerSettings.vue +3 -0
- package/components/form/ClusterAppearance.vue +132 -0
- package/components/form/ColorInput.vue +1 -0
- package/components/form/Error.vue +3 -3
- package/components/form/FileSelector.vue +1 -0
- package/components/form/Footer.vue +2 -2
- package/components/form/GitPicker.vue +83 -38
- package/components/form/KeyValue.vue +70 -48
- package/components/form/LabeledSelect.vue +145 -41
- package/components/form/Labels.vue +3 -1
- package/components/form/NameNsDescription.vue +26 -9
- package/components/form/Password.vue +3 -1
- package/components/form/ResourceLabeledSelect.vue +187 -0
- package/components/form/ResourceTabs/index.vue +31 -15
- package/components/form/SecretSelector.vue +93 -18
- package/components/form/SelectOrCreateAuthSecret.vue +132 -59
- package/components/form/SimpleSecretSelector.vue +88 -28
- package/components/form/Taints.vue +13 -7
- package/components/form/__tests__/BannerSettings.test.ts +53 -0
- package/components/form/__tests__/KeyValue.test.ts +120 -11
- package/components/form/__tests__/LabeledSelect.test.ts +0 -18
- package/components/form/__tests__/{NameNsDescription.ts → NameNsDescription.test.ts} +25 -15
- package/components/form/__tests__/Taints.test.ts +70 -0
- package/components/form/labeled-select-utils/labeled-select-pagination.ts +151 -0
- package/components/form/labeled-select-utils/labeled-select.utils.ts +122 -0
- package/components/formatter/AppSummaryGraph.vue +2 -2
- package/components/formatter/Checked.vue +11 -3
- package/components/formatter/CloudCredPublicData.vue +30 -0
- package/components/formatter/ClusterLink.vue +2 -2
- package/components/formatter/ClusterProvider.vue +1 -18
- package/components/formatter/FleetClusterSummaryGraph.vue +27 -0
- package/components/formatter/FleetSummaryGraph.vue +25 -12
- package/components/formatter/ImagePercentageBar.vue +0 -4
- package/components/formatter/IngressTarget.vue +18 -7
- package/components/formatter/Link.vue +2 -2
- package/components/formatter/LinkDetail.vue +2 -2
- package/components/formatter/LinkDetailImage.vue +2 -2
- package/components/formatter/LinkName.vue +2 -2
- package/components/formatter/LiveDuration.vue +1 -1
- package/components/formatter/PercentageBar.vue +1 -1
- package/components/formatter/PrincipalGroupBindings.vue +2 -2
- package/components/formatter/SecretType.vue +2 -2
- package/components/formatter/VirtualServiceGateways.vue +2 -2
- package/components/formatter/WorkloadDetailEndpoints.vue +12 -22
- package/components/formatter/__tests__/Checked.test.ts +19 -0
- package/components/formatter/__tests__/LinkDetail.test.ts +5 -5
- package/components/formatter/__tests__/WorkloadDetailEndpoints.test.ts +81 -0
- package/components/nav/Group.vue +9 -7
- package/components/nav/Header.vue +85 -46
- package/components/nav/Jump.vue +19 -9
- package/components/nav/NamespaceFilter.vue +8 -1
- package/components/nav/TopLevelMenu.vue +392 -136
- package/components/nav/Type.vue +71 -106
- package/components/nav/WindowManager/ContainerLogs.vue +120 -19
- package/components/nav/WindowManager/ContainerShell.vue +6 -1
- package/components/nav/WindowManager/__tests__/ContainerLogs.test.ts +186 -0
- package/components/nav/WindowManager/index.vue +11 -10
- package/components/nav/__tests__/TopLevelMenu.test.ts +400 -6
- package/components/nav/__tests__/Type.test.ts +322 -97
- package/components/nuxt/nuxt-child.js +9 -78
- package/components/nuxt/nuxt-error.vue +1 -1
- package/components/nuxt/nuxt-link.client.js +13 -95
- package/{layouts → components/templates}/blank.vue +1 -1
- package/{layouts → components/templates}/default.vue +11 -101
- package/{layouts → components/templates}/error.vue +13 -26
- package/{layouts → components/templates}/home.vue +4 -1
- package/{layouts → components/templates}/plain.vue +4 -1
- package/{layouts → components/templates}/standalone.vue +1 -5
- package/{layouts → components/templates}/unauthenticated.vue +2 -3
- package/composables/useCompactInput.test.ts +36 -0
- package/composables/useCompactInput.ts +20 -0
- package/composables/useLabeledFormElement.test.ts +135 -0
- package/composables/useLabeledFormElement.ts +138 -0
- package/config/harvester-manager-types.js +2 -0
- package/config/home-links.js +2 -1
- package/config/labels-annotations.js +2 -1
- package/config/middleware.js +0 -6
- package/config/pagination-table-headers.js +57 -0
- package/config/pod-security-admission.ts +1 -1
- package/config/private-label.js +21 -1
- package/config/product/auth.js +1 -0
- package/config/product/explorer.js +166 -45
- package/config/product/fleet.js +6 -1
- package/config/product/legacy.js +2 -11
- package/config/product/manager.js +51 -25
- package/config/query-params.js +2 -0
- package/config/roles.ts +23 -0
- package/config/router/index.js +23 -0
- package/config/router/navigation-guards/attempt-first-login.js +73 -0
- package/config/router/navigation-guards/authentication.js +63 -0
- package/config/router/navigation-guards/i18n.js +13 -0
- package/config/router/navigation-guards/index.js +16 -0
- package/config/router/navigation-guards/load-initial-settings.js +15 -0
- package/config/router/routes.js +487 -0
- package/config/settings.ts +31 -2
- package/config/store.js +8 -4
- package/config/system-namespaces.js +3 -0
- package/config/table-headers.js +66 -1
- package/config/types.js +35 -20
- package/config/uiplugins.js +10 -5
- package/core/plugin-helpers.js +4 -6
- package/core/plugin-routes.ts +56 -114
- package/core/plugin.ts +18 -11
- package/core/plugins-loader.js +7 -9
- package/core/plugins.js +289 -285
- package/core/types-provisioning.ts +7 -0
- package/creators/app/app.package.json +2 -1
- package/creators/app/files/.eslintignore +0 -2
- package/creators/app/files/.gitlab-ci.yml +14 -0
- package/creators/app/files/.vscode/settings.json +0 -1
- package/creators/app/init +19 -0
- package/creators/pkg/files/.github/workflows/build-extension-catalog.yml +2 -6
- package/creators/pkg/files/.github/workflows/build-extension-charts.yml +2 -6
- package/creators/pkg/init +32 -0
- package/detail/__tests__/provisioning.cattle.io.cluster.test.ts +119 -0
- package/detail/__tests__/service.test.ts +62 -0
- package/detail/catalog.cattle.io.app.vue +1 -1
- package/detail/cis.cattle.io.clusterscan.vue +14 -3
- package/detail/fleet.cattle.io.bundle.vue +1 -1
- package/detail/fleet.cattle.io.cluster.vue +11 -1
- package/detail/fleet.cattle.io.gitrepo.vue +15 -9
- package/detail/namespace.vue +2 -2
- package/detail/networking.k8s.io.ingress.vue +52 -19
- package/detail/node.vue +22 -3
- package/detail/provisioning.cattle.io.cluster.vue +31 -13
- package/detail/service.vue +1 -1
- package/detail/workload/index.vue +1 -0
- package/dialog/AddCustomBadgeDialog.vue +318 -161
- package/dialog/DeactivateDriverDialog.vue +137 -0
- package/dialog/RollbackWorkloadDialog.vue +2 -2
- package/dialog/RotateCertificatesDialog.vue +0 -21
- package/dialog/ScaleMachineDownDialog.vue +34 -17
- package/directives/clean-html.js +15 -0
- package/directives/clean-tooltip.js +32 -0
- package/directives/focus.js +41 -0
- package/directives/int-number.js +21 -0
- package/directives/positive-int-number.js +19 -0
- package/directives/trim-whitespace.js +19 -0
- package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +3 -2
- package/edit/__tests__/kontainerDriver.test.ts +107 -0
- package/edit/__tests__/management.cattle.io.clusterroletemplatebinding.test.ts +12 -1
- package/edit/__tests__/management.cattle.io.setting.test.ts +2 -1
- package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +2 -3
- package/edit/__tests__/nodeDriver.test.ts +107 -0
- package/edit/__tests__/service.test.ts +85 -0
- package/edit/__tests__/ui.cattle.io.navlink.test.ts +3 -1
- package/edit/auth/AuthProviderWarningBanners.vue +34 -0
- package/edit/auth/__tests__/AuthProviderWarningBanners.test.ts +19 -0
- package/edit/auth/__tests__/azuread.test.ts +241 -0
- package/edit/auth/__tests__/oidc.test.ts +137 -0
- package/edit/auth/azuread.vue +133 -31
- package/edit/auth/github.vue +5 -17
- package/edit/auth/googleoauth.vue +6 -23
- package/edit/auth/ldap/index.vue +5 -17
- package/edit/auth/oidc.vue +143 -42
- package/edit/auth/saml.vue +5 -14
- package/edit/catalog.cattle.io.clusterrepo.vue +177 -9
- package/edit/cis.cattle.io.clusterscan.vue +5 -2
- package/edit/cis.cattle.io.clusterscanbenchmark.vue +41 -9
- package/edit/cloudcredential.vue +28 -4
- package/edit/configmap.vue +10 -4
- package/edit/fleet.cattle.io.gitrepo.vue +3 -1
- package/edit/helm.cattle.io.projecthelmchart.vue +29 -19
- package/edit/kontainerDriver.vue +65 -0
- package/edit/logging-flow/Match.vue +10 -9
- package/edit/logging-flow/index.vue +4 -19
- package/edit/logging.banzaicloud.io.output/__tests__/logging.banzaicloud.io.output.test.ts +232 -2
- package/edit/logging.banzaicloud.io.output/index.vue +43 -26
- package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +3 -3
- package/edit/management.cattle.io.project.vue +3 -53
- package/edit/management.cattle.io.setting.vue +52 -2
- package/edit/management.cattle.io.user.vue +2 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +10 -7
- package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +21 -16
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +1 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +2 -2
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +1 -1
- package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +15 -3
- package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +4 -1
- package/edit/monitoring.coreos.com.prometheusrule/RecordingRule.vue +2 -0
- package/edit/monitoring.coreos.com.prometheusrule/index.vue +2 -0
- package/edit/networking.k8s.io.ingress/Rules.vue +8 -3
- package/edit/networking.k8s.io.ingress/index.vue +64 -8
- package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +1 -0
- package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +6 -2
- package/edit/networking.k8s.io.networkpolicy/__tests__/{PolicyRuleTarget.spec.ts → PolicyRuleTarget.test.ts} +46 -7
- package/edit/networking.k8s.io.networkpolicy/__tests__/utils/{selectors.ts → selectors.test.ts} +1 -1
- package/edit/networking.k8s.io.networkpolicy/index.vue +2 -0
- package/edit/nodeDriver.vue +65 -0
- package/edit/persistentvolume/index.vue +2 -2
- package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +33 -16
- package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +276 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +473 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/{CustomCommand.tests.ts → CustomCommand.test.ts} +3 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +228 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/DrainOptions.test.ts +1 -1
- package/edit/provisioning.cattle.io.cluster/__tests__/index.test.ts +73 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +77 -13
- package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +391 -0
- package/edit/provisioning.cattle.io.cluster/import.vue +4 -4
- package/edit/provisioning.cattle.io.cluster/index.vue +126 -51
- package/edit/provisioning.cattle.io.cluster/rke2.vue +325 -791
- package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +137 -0
- package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +217 -0
- package/edit/provisioning.cattle.io.cluster/{Basics.vue → tabs/Basics.vue} +123 -129
- package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +132 -0
- package/edit/provisioning.cattle.io.cluster/{MachinePool.vue → tabs/MachinePool.vue} +1 -0
- package/edit/provisioning.cattle.io.cluster/{S3Config.vue → tabs/etcd/S3Config.vue} +1 -0
- package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +135 -0
- package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +190 -0
- package/edit/provisioning.cattle.io.cluster/{RegistryConfigs.vue → tabs/registries/RegistryConfigs.vue} +3 -0
- package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +148 -0
- package/edit/provisioning.cattle.io.cluster/tabs/upgrade/index.vue +76 -0
- package/edit/resources.cattle.io.backup.vue +139 -124
- package/edit/resources.cattle.io.restore.vue +146 -126
- package/edit/service.vue +13 -0
- package/edit/serviceaccount.vue +46 -4
- package/edit/token.vue +3 -1
- package/edit/workload/Upgrading.vue +3 -2
- package/edit/workload/__tests__/Job.test.ts +1 -3
- package/edit/workload/__tests__/Upgrading.test.ts +2 -2
- package/edit/workload/index.vue +2 -1
- package/edit/workload/mixins/workload.js +35 -2
- package/edit/workload/storage/emptyDir.vue +2 -2
- package/initialize/App.vue +75 -0
- package/initialize/app-extended.js +128 -0
- package/initialize/entry-helpers.js +546 -0
- package/initialize/entry.js +32 -0
- package/initialize/install-components.js +23 -0
- package/initialize/install-directives.js +59 -0
- package/initialize/install-plugins.js +123 -0
- package/list/__tests__/workload.test.ts +1 -1
- package/list/catalog.cattle.io.app.vue +1 -0
- package/list/cis.cattle.io.clusterscan.vue +16 -10
- package/list/group.principal.vue +2 -2
- package/list/management.cattle.io.feature.vue +16 -16
- package/list/management.cattle.io.setting.vue +1 -0
- package/list/management.cattle.io.user.vue +13 -4
- package/list/networking.k8s.io.ingress.vue +36 -0
- package/list/node.vue +212 -73
- package/list/provisioning.cattle.io.cluster.vue +17 -4
- package/list/ui.cattle.io.navlink.vue +2 -2
- package/list/workload.vue +22 -0
- package/machine-config/__tests__/vmwarevsphere-pool-config-merge.test.ts +30 -0
- package/machine-config/__tests__/vmwarevsphere.test.ts +1 -3
- package/machine-config/amazonec2.vue +1 -1
- package/machine-config/azure.vue +2 -1
- package/machine-config/generic.vue +11 -15
- package/machine-config/vmwarevsphere-pool-config-merge.ts +25 -0
- package/machine-config/vmwarevsphere.vue +31 -27
- package/middleware/authenticated.js +23 -399
- package/mixins/__tests__/chart.test.ts +48 -6
- package/mixins/__tests__/create-edit-view.test.ts +2 -3
- package/mixins/auth-config.js +5 -9
- package/mixins/brand.js +102 -96
- package/mixins/chart.js +27 -13
- package/mixins/create-edit-view/index.js +2 -2
- package/mixins/fetch.client.js +42 -48
- package/mixins/labeled-form-element.ts +27 -2
- package/mixins/page-actions.js +7 -5
- package/mixins/resource-fetch-api-pagination.js +304 -0
- package/mixins/resource-fetch-namespaced.js +1 -1
- package/mixins/resource-fetch.js +46 -5
- package/models/__tests__/cluster.test.ts +44 -0
- package/models/__tests__/fleet.cattle.io.cluster.test.ts +36 -0
- package/models/__tests__/management.cattle.io.cluster.test.ts +23 -0
- package/models/__tests__/management.cattle.io.node.ts +85 -0
- package/models/__tests__/management.cattle.io.nodepool.ts +83 -0
- package/models/__tests__/namespace.test.ts +49 -9
- package/models/__tests__/provisioning.cattle.io.cluster.test.ts +241 -0
- package/models/__tests__/schema.tests.ts +24 -0
- package/models/__tests__/secret.test.ts +37 -0
- package/models/__tests__/steve-schema.test.ts +73 -0
- package/models/__tests__/storage.k8s.io.storageclass.test.ts +22 -0
- package/models/__tests__/workload.test.ts +91 -0
- package/models/catalog.cattle.io.app.js +8 -0
- package/models/catalog.cattle.io.clusterrepo.js +9 -1
- package/models/catalog.cattle.io.uiplugin.js +7 -8
- package/models/cis.cattle.io.clusterscan.js +29 -8
- package/models/cloudcredential.js +9 -1
- package/models/cluster/node.js +8 -4
- package/models/cluster/schema.js +6 -0
- package/models/cluster.js +33 -0
- package/models/cluster.x-k8s.io.machine.js +1 -1
- package/models/cluster.x-k8s.io.machinedeployment.js +14 -0
- package/models/driver.js +63 -0
- package/models/fleet.cattle.io.cluster.js +27 -11
- package/models/fleet.cattle.io.gitrepo.js +66 -13
- package/models/helm.cattle.io.projecthelmchart.js +1 -1
- package/models/kontainerdriver.js +85 -0
- package/models/management/schema.js +6 -0
- package/models/management.cattle.io.authconfig.js +3 -2
- package/models/management.cattle.io.cluster.js +16 -7
- package/models/management.cattle.io.globalrole.js +2 -0
- package/models/management.cattle.io.kontainerdriver.js +1 -0
- package/models/management.cattle.io.node.js +18 -14
- package/models/management.cattle.io.nodepool.js +17 -0
- package/models/management.cattle.io.project.js +0 -36
- package/models/management.cattle.io.setting.js +11 -7
- package/models/management.cattle.io.user.js +2 -2
- package/models/monitoring.coreos.com.receiver.js +3 -1
- package/models/monitoring.coreos.com.route.js +1 -1
- package/models/namespace.js +1 -1
- package/models/networking.k8s.io.ingress.js +2 -1
- package/models/nodedriver.js +85 -0
- package/models/pod.js +20 -0
- package/models/provisioning.cattle.io.cluster.js +125 -10
- package/models/schema.js +28 -7
- package/models/secret.js +126 -18
- package/models/service.js +2 -0
- package/models/steve-schema.ts +254 -0
- package/models/storage.k8s.io.storageclass.js +1 -1
- package/models/workload.js +17 -0
- package/models/workload.service.js +18 -0
- package/package.json +18 -14
- package/pages/about.vue +12 -6
- package/pages/account/create-key.vue +0 -1
- package/pages/account/index.vue +7 -3
- package/pages/auth/login.vue +106 -103
- package/pages/auth/logout.vue +2 -4
- package/pages/auth/setup.vue +92 -66
- package/pages/auth/verify.vue +30 -24
- package/pages/c/_cluster/apps/charts/__tests__/install.helper.test.ts +2 -17
- package/pages/c/_cluster/apps/charts/chart.vue +54 -9
- package/pages/c/_cluster/apps/charts/index.vue +99 -69
- package/pages/c/_cluster/apps/charts/install.helpers.js +2 -13
- package/pages/c/_cluster/apps/charts/install.vue +12 -11
- package/pages/c/_cluster/auth/config/_id.vue +0 -6
- package/pages/c/_cluster/auth/config/index.vue +15 -9
- package/pages/c/_cluster/auth/roles/index.vue +8 -10
- package/pages/c/_cluster/ecm/index.vue +0 -2
- package/pages/c/_cluster/explorer/ConfigBadge.vue +13 -8
- package/pages/c/_cluster/explorer/EventsTable.vue +18 -0
- package/pages/c/_cluster/explorer/__tests__/index.test.ts +181 -0
- package/pages/c/_cluster/explorer/index.vue +253 -91
- package/pages/c/_cluster/explorer/tools/__tests__/index.test.ts +69 -0
- package/pages/c/_cluster/explorer/tools/index.vue +10 -6
- package/pages/c/_cluster/fleet/index.vue +89 -94
- package/pages/c/_cluster/longhorn/__tests__/longhorn.index.test.ts +89 -0
- package/pages/c/_cluster/longhorn/index.vue +52 -17
- package/pages/c/_cluster/manager/cloudCredential/index.vue +18 -25
- package/pages/c/_cluster/manager/drivers/kontainerDriver/_id.vue +12 -0
- package/pages/c/_cluster/manager/drivers/kontainerDriver/create.vue +15 -0
- package/pages/c/_cluster/manager/drivers/kontainerDriver/index.vue +91 -0
- package/pages/c/_cluster/manager/drivers/nodeDriver/_id.vue +12 -0
- package/pages/c/_cluster/manager/drivers/nodeDriver/create.vue +15 -0
- package/pages/c/_cluster/manager/drivers/nodeDriver/index.vue +60 -0
- package/pages/c/_cluster/manager/jwt.authentication/index.vue +235 -0
- package/pages/c/_cluster/manager/pages/_page.vue +4 -5
- package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +4 -0
- package/pages/c/_cluster/monitoring/route-receiver/index.vue +2 -2
- package/pages/c/_cluster/neuvector/index.vue +1 -0
- package/pages/c/_cluster/settings/DefaultLinksEditor.vue +1 -0
- package/pages/c/_cluster/settings/banners.vue +86 -10
- package/pages/c/_cluster/settings/brand.vue +261 -38
- package/pages/c/_cluster/settings/index.vue +4 -6
- package/pages/c/_cluster/settings/links.vue +3 -2
- package/pages/c/_cluster/settings/performance.vue +71 -3
- package/pages/c/_cluster/uiplugins/AddExtensionRepos.vue +5 -2
- package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +12 -8
- package/pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue +9 -6
- package/pages/c/_cluster/uiplugins/CatalogList/index.vue +10 -46
- package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +11 -5
- package/pages/c/_cluster/uiplugins/InstallDialog.vue +55 -19
- package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +36 -301
- package/pages/c/_cluster/uiplugins/UninstallDialog.vue +14 -6
- package/pages/c/_cluster/uiplugins/__tests__/SetupUIPlugins.test.ts +52 -106
- package/pages/c/_cluster/uiplugins/index.vue +38 -54
- package/pages/diagnostic.vue +2 -2
- package/pages/fail-whale.vue +103 -42
- package/pages/home.vue +81 -24
- package/pages/prefs.vue +8 -4
- package/pages/support/index.vue +14 -10
- package/pkg/auto-import.js +1 -1
- package/plugins/axios.js +0 -36
- package/plugins/back-button.js +3 -5
- package/plugins/clean-html-directive.js +5 -30
- package/plugins/clean-html.js +53 -0
- package/plugins/clean-tooltip-directive.js +6 -31
- package/plugins/codemirror-loader.js +1 -1
- package/plugins/codemirror.js +41 -9
- package/plugins/dashboard-store/__tests__/mutations.test.ts +389 -0
- package/plugins/dashboard-store/__tests__/resource-class.test.ts +49 -0
- package/plugins/dashboard-store/__tests__/utils/store-mocks.ts +7 -0
- package/plugins/dashboard-store/actions.js +132 -25
- package/plugins/dashboard-store/classify.js +1 -18
- package/plugins/dashboard-store/getters.js +154 -44
- package/plugins/dashboard-store/index.js +0 -111
- package/plugins/dashboard-store/mutations.js +150 -52
- package/plugins/dashboard-store/resource-class.js +77 -127
- package/plugins/directives.js +6 -39
- package/plugins/ember-cookie.js +13 -0
- package/plugins/global-formatters.js +26 -5
- package/plugins/i18n.js +89 -55
- package/plugins/int-number.js +6 -20
- package/plugins/plugin.js +3 -3
- package/plugins/positive-int-number.js +6 -17
- package/plugins/steve/__tests__/{getters.spec.ts → getters.test.ts} +81 -10
- package/plugins/steve/__tests__/mutations.test.ts +49 -0
- package/plugins/steve/__tests__/resource-utils.test.ts +159 -0
- package/plugins/steve/__tests__/steve-class.test.ts +59 -0
- package/plugins/steve/__tests__/subscribe.spec.ts +4 -1
- package/plugins/steve/__tests__/utils/mutation.test.helpers.ts +105 -0
- package/plugins/steve/__tests__/utils/steve-mocks.ts +31 -0
- package/plugins/steve/accept-or-reject-socket-message.ts +103 -0
- package/plugins/steve/actions.js +3 -38
- package/plugins/steve/getters.js +164 -61
- package/plugins/steve/hybrid-class.js +5 -1
- package/plugins/steve/mutations.js +24 -3
- package/plugins/steve/norman-class.js +142 -2
- package/{utils → plugins/steve}/projectAndNamespaceFiltering.utils.ts +28 -10
- package/plugins/steve/resource-utils.ts +38 -0
- package/plugins/steve/schema.d.ts +22 -0
- package/plugins/steve/steve-class.js +22 -0
- package/plugins/steve/steve-pagination-utils.ts +368 -0
- package/plugins/steve/subscribe.js +17 -76
- package/plugins/trim-whitespace.js +6 -34
- package/plugins/vue-js-modal.js +1 -1
- package/promptRemove/pod.vue +15 -7
- package/public/index.html +1 -0
- package/rancher-components/Accordion/Accordion.test.ts +45 -0
- package/rancher-components/Accordion/Accordion.vue +86 -0
- package/rancher-components/Accordion/index.ts +1 -0
- package/rancher-components/BadgeState/BadgeState.vue +3 -3
- package/rancher-components/Banner/Banner.test.ts +1 -5
- package/rancher-components/Banner/Banner.vue +2 -2
- package/rancher-components/Card/Card.vue +4 -4
- package/rancher-components/Form/Checkbox/Checkbox.vue +4 -3
- package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +18 -1
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +57 -24
- package/rancher-components/Form/Radio/RadioButton.test.ts +1 -3
- package/rancher-components/Form/Radio/RadioButton.vue +13 -7
- package/rancher-components/Form/Radio/RadioGroup.vue +4 -3
- package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +6 -4
- package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
- package/rancher-components/StringList/StringList.test.ts +270 -0
- package/rancher-components/StringList/StringList.vue +65 -26
- package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +69 -0
- package/scripts/clean +1 -1
- package/scripts/extension/bundle +19 -7
- package/scripts/extension/helm/charts/ui-plugin-server/templates/_helpers.tpl +11 -0
- package/scripts/extension/helm/charts/ui-plugin-server/templates/cr.yaml +2 -0
- package/scripts/extension/helm/charts/ui-plugin-server/values.yaml +2 -0
- package/scripts/extension/helm/package/Dockerfile +1 -1
- package/scripts/extension/helm/scripts/package +11 -3
- package/scripts/extension/helm/scripts/patch +27 -0
- package/scripts/extension/parse-tag-name +4 -4
- package/scripts/extension/publish +25 -14
- package/scripts/publish-shell.sh +11 -1
- package/scripts/serve-pkgs +0 -2
- package/scripts/test-plugins-build.sh +87 -11
- package/scripts/vue-migrate.js +683 -0
- package/server/har-file.js +183 -0
- package/store/__tests__/catalog.test.ts +224 -0
- package/store/__tests__/type-map.test.ts +1122 -0
- package/store/auth.js +23 -4
- package/store/aws.js +53 -6
- package/store/catalog.js +22 -6
- package/store/cru-resource.ts +26 -0
- package/store/customisation.js +35 -0
- package/store/features.js +7 -4
- package/store/i18n.js +11 -0
- package/store/index.js +140 -49
- package/store/plugins.js +8 -4
- package/store/prefs.js +33 -38
- package/store/type-map.js +288 -213
- package/store/type-map.utils.ts +226 -0
- package/tsconfig.json +34 -9
- package/tsconfig.paths.json +21 -0
- package/types/components/labeledSelect.ts +50 -0
- package/types/resources/settings.d.ts +32 -0
- package/types/{userPreferences.d.ts → resources/userPreferences.d.ts} +0 -1
- package/types/shell/index.d.ts +1045 -770
- package/types/store/dashboard-store.types.ts +42 -0
- package/types/store/pagination.types.ts +457 -0
- package/types/store/type-map.ts +30 -0
- package/types/store/vuex.d.ts +9 -0
- package/types/vue-shim.d.ts +51 -0
- package/utils/__tests__/cluster.test.ts +20 -18
- package/utils/__tests__/create-yaml.test.ts +359 -2
- package/utils/__tests__/kontainer.test.ts +180 -0
- package/utils/__tests__/pod-security-admission.test.ts +1 -1
- package/utils/alertmanagerconfig.js +19 -0
- package/utils/array.ts +40 -1
- package/utils/async.ts +2 -0
- package/utils/auth.js +152 -4
- package/utils/axios.js +2 -21
- package/utils/azure.js +24 -0
- package/utils/banners.js +103 -0
- package/utils/clipboard.js +5 -0
- package/utils/cluster.js +1 -1
- package/utils/config.js +4 -0
- package/utils/create-yaml.js +59 -28
- package/utils/custom-validators.js +0 -2
- package/utils/error.js +41 -1
- package/utils/formatter.js +5 -3
- package/utils/git.ts +1 -1
- package/utils/install-redirect.js +1 -1
- package/utils/kontainer.ts +190 -0
- package/utils/object.js +24 -0
- package/utils/pagination-utils.ts +154 -0
- package/utils/pod-security-admission.ts +1 -1
- package/utils/router.js +86 -0
- package/utils/settings.ts +46 -0
- package/utils/time.js +2 -1
- package/utils/unit-tests/ChildRenderingRouterLinkStub.ts +36 -0
- package/utils/url.ts +1 -1
- package/utils/validators/formRules/__tests__/index.test.ts +70 -4
- package/utils/validators/formRules/index.ts +15 -9
- package/utils/validators/index.js +1 -0
- package/utils/validators/setting.js +6 -10
- package/utils/version.js +2 -1
- package/vue.config.js +377 -401
- package/.DS_Store +0 -0
- package/assets/images/providers/aks-black.svg +0 -28
- package/assets/images/providers/aks.svg +0 -31
- package/assets/styles/vendor/vue-js-modal.scss +0 -16
- package/components/ChartPsp.vue +0 -76
- package/components/EventsTable.vue +0 -67
- package/components/TabbedLinks/index.vue +0 -94
- package/components/__tests__/ChartPsp.test.ts +0 -75
- package/components/formatter/__tests__/ClusterProvider.test.ts +0 -28
- package/components/nuxt/nuxt-link.server.js +0 -16
- package/components/nuxt/nuxt.js +0 -101
- package/config/router.js +0 -408
- package/edit/provisioning.cattle.io.cluster/__tests__/Basics.tests.ts +0 -237
- package/initialize/App.js +0 -198
- package/initialize/client.js +0 -875
- package/initialize/index.js +0 -364
- package/initialize/layouts.ts +0 -26
- package/middleware/i18n.js +0 -10
- package/middleware/unauthenticated.js +0 -22
- package/mixins/fetch.server.js +0 -73
- package/pages/c/_cluster/apps/index.vue +0 -17
- package/pages/c/_cluster/auth/index.vue +0 -19
- package/pages/c/_cluster/index.vue +0 -17
- package/pages/c/_cluster/legacy/index.vue +0 -22
- package/pages/c/_cluster/manager/index.vue +0 -22
- package/pages/c/_cluster/mcapps/index.vue +0 -21
- package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +0 -232
- package/pages/c/index.vue +0 -9
- package/pages/rio/mesh.vue +0 -508
- package/plugins/dashboard-store/__tests__/mutations.spec.ts +0 -406
- package/plugins/dashboard-store/rehydrate-all.js +0 -44
- package/plugins/portal-vue.js +0 -4
- package/plugins/portal.js +0 -4
- package/plugins/resize.js +0 -5
- package/plugins/shortkey.js +0 -4
- package/plugins/tooltip.js +0 -4
- package/plugins/transitions.js +0 -4
- package/plugins/v-select.js +0 -4
- package/plugins/vue-clipboard2.js +0 -4
- package/tsconfig.default.json +0 -46
- package/utils/group.js +0 -70
- package/utils/nuxt.js +0 -659
- package/utils/router.scrollBehavior.js +0 -80
- /package/components/__tests__/{Collapse.spec.ts → Collapse.test.ts} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{AgentConfiguration.vue → tabs/AgentConfiguration.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{MemberRoles.vue → tabs/MemberRoles.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{ACE.vue → tabs/networking/ACE.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{RegistryMirrors.vue → tabs/registries/RegistryMirrors.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{DrainOptions.vue → tabs/upgrade/DrainOptions.vue} +0 -0
- /package/models/__tests__/{node.ts → node.test.ts} +0 -0
- /package/plugins/dashboard-store/__tests__/{actions.spec.ts → actions.test.ts} +0 -0
- /package/plugins/dashboard-store/__tests__/{getters.spec.ts → getters.test.ts} +0 -0
- /package/plugins/steve/__tests__/{header-warnings.spec.ts → header-warnings.test.ts} +0 -0
- /package/rancher-components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
- /package/types/{pod-security-admission.ts → resources/pod-security-admission.ts} +0 -0
|
@@ -32,8 +32,16 @@ export default class CloudCredential extends NormanModel {
|
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
+
get secretName() {
|
|
36
|
+
return this.id.replace(':', '/');
|
|
37
|
+
}
|
|
38
|
+
|
|
35
39
|
get secret() {
|
|
36
|
-
return this.$rootGetters['management/byId'](SECRET, this.
|
|
40
|
+
return this.$rootGetters['management/byId'](SECRET, this.secretName);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async getSecret() {
|
|
44
|
+
await this.$dispatch('management/find', { type: SECRET, id: this.secretName }, { root: true });
|
|
37
45
|
}
|
|
38
46
|
|
|
39
47
|
get configKey() {
|
package/models/cluster/node.js
CHANGED
|
@@ -187,7 +187,7 @@ export default class ClusterNode extends SteveModel {
|
|
|
187
187
|
}
|
|
188
188
|
|
|
189
189
|
get cpuCapacity() {
|
|
190
|
-
return parseSi(this.status.allocatable
|
|
190
|
+
return parseSi(this.status.allocatable?.cpu);
|
|
191
191
|
}
|
|
192
192
|
|
|
193
193
|
get cpuUsagePercentage() {
|
|
@@ -203,7 +203,7 @@ export default class ClusterNode extends SteveModel {
|
|
|
203
203
|
}
|
|
204
204
|
|
|
205
205
|
get ramCapacity() {
|
|
206
|
-
return parseSi(this.status.capacity
|
|
206
|
+
return parseSi(this.status.capacity?.memory);
|
|
207
207
|
}
|
|
208
208
|
|
|
209
209
|
get ramUsagePercentage() {
|
|
@@ -219,7 +219,7 @@ export default class ClusterNode extends SteveModel {
|
|
|
219
219
|
}
|
|
220
220
|
|
|
221
221
|
get podUsage() {
|
|
222
|
-
return calculatePercentage(this.status.allocatable
|
|
222
|
+
return calculatePercentage(this.status.allocatable?.pods, this.status.capacity?.pods);
|
|
223
223
|
}
|
|
224
224
|
|
|
225
225
|
get podConsumedUsage() {
|
|
@@ -227,7 +227,7 @@ export default class ClusterNode extends SteveModel {
|
|
|
227
227
|
}
|
|
228
228
|
|
|
229
229
|
get podCapacity() {
|
|
230
|
-
return Number.parseInt(this.status.capacity
|
|
230
|
+
return Number.parseInt(this.status.capacity?.pods);
|
|
231
231
|
}
|
|
232
232
|
|
|
233
233
|
get podConsumed() {
|
|
@@ -450,6 +450,10 @@ export default class ClusterNode extends SteveModel {
|
|
|
450
450
|
get provider() {
|
|
451
451
|
return this.$rootGetters['currentCluster'].provisioner.toLowerCase();
|
|
452
452
|
}
|
|
453
|
+
|
|
454
|
+
get displayTaintsAndLabels() {
|
|
455
|
+
return !!this.spec.taints?.length || !!this.customLabelCount;
|
|
456
|
+
}
|
|
453
457
|
}
|
|
454
458
|
|
|
455
459
|
function calculatePercentage(allocatable, capacity) {
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import NormanModel from '@shell/plugins/steve/norman-class';
|
|
2
|
+
|
|
3
|
+
export const LABEL_CONTAINS_PROTECTED = [
|
|
4
|
+
'io.cattle.lifecycle',
|
|
5
|
+
'kubernetes.io',
|
|
6
|
+
'cattle.io',
|
|
7
|
+
'k3s.io',
|
|
8
|
+
];
|
|
9
|
+
|
|
10
|
+
export const ANNOTATIONS_CONTAINS_PROTECTED = [
|
|
11
|
+
'coreos.com',
|
|
12
|
+
'cattle.io',
|
|
13
|
+
'k3s.io',
|
|
14
|
+
'kubernetes.io',
|
|
15
|
+
'k3s.io',
|
|
16
|
+
];
|
|
17
|
+
export default class NormanCluster extends NormanModel {
|
|
18
|
+
get systemLabels() {
|
|
19
|
+
return Object.keys(this.labels || {}).filter((key) => LABEL_CONTAINS_PROTECTED.find((label) => key.includes(label)));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
get systemAnnotations() {
|
|
23
|
+
return Object.keys(this.annotations || {}).filter((key) => ANNOTATIONS_CONTAINS_PROTECTED.find((annotation) => key.includes(annotation)));
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
get hasSystemLabels() {
|
|
27
|
+
return !!(this.systemLabels || []).length;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
get hasSystemAnnotations() {
|
|
31
|
+
return !!(this.systemAnnotations || []).length;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -7,6 +7,7 @@ import { handleConflict } from '@shell/plugins/dashboard-store/normalize';
|
|
|
7
7
|
import { MACHINE_ROLES } from '@shell/config/labels-annotations';
|
|
8
8
|
import { notOnlyOfRole } from '@shell/models/cluster.x-k8s.io.machine';
|
|
9
9
|
import { KIND } from '../config/elemental-types';
|
|
10
|
+
import { KIND as HARVESTER_KIND } from '../config/harvester-manager-types';
|
|
10
11
|
|
|
11
12
|
export default class CapiMachineDeployment extends SteveModel {
|
|
12
13
|
get cluster() {
|
|
@@ -69,6 +70,19 @@ export default class CapiMachineDeployment extends SteveModel {
|
|
|
69
70
|
return this.template?.providerSize || this.t('node.list.poolDescription.noSize');
|
|
70
71
|
}
|
|
71
72
|
|
|
73
|
+
get providerSummary() {
|
|
74
|
+
if (this.template) {
|
|
75
|
+
switch (this.infrastructureRefKind) {
|
|
76
|
+
case HARVESTER_KIND.MACHINE_TEMPLATE:
|
|
77
|
+
return null;
|
|
78
|
+
default:
|
|
79
|
+
return `${ this.providerDisplay } \u2013 ${ this.providerLocation } / ${ this.providerSize } (${ this.providerName })`;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
|
|
72
86
|
get desired() {
|
|
73
87
|
return this.spec?.replicas || 0;
|
|
74
88
|
}
|
package/models/driver.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { DESCRIPTION } from '@shell/config/labels-annotations';
|
|
2
|
+
import NormanModel from '@shell/plugins/steve/norman-class';
|
|
3
|
+
import { KONTAINER_TO_DRIVER } from './management.cattle.io.kontainerdriver';
|
|
4
|
+
import capitalize from 'lodash/capitalize';
|
|
5
|
+
|
|
6
|
+
export default class Driver extends NormanModel {
|
|
7
|
+
get canViewYaml() {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
get driverName() {
|
|
12
|
+
if (!this.builtIn) {
|
|
13
|
+
// if the driver is not built in, there's a good change its a custom one
|
|
14
|
+
// custom drivers have a random id, so shouldn't be used as the type
|
|
15
|
+
// instead use the status.displayName. this will map to the name extracted from the binary
|
|
16
|
+
const driverName = this.status?.displayName?.toLowerCase();
|
|
17
|
+
|
|
18
|
+
if (driverName) {
|
|
19
|
+
// some drivers are built in but don't have the builtIn flag. ensure we pass these through K_TO_D
|
|
20
|
+
return KONTAINER_TO_DRIVER[driverName] || driverName;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return KONTAINER_TO_DRIVER[this.id] || this.name || this.id;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
get nameDisplay() {
|
|
28
|
+
const path = `cluster.provider.${ this.driverName }`;
|
|
29
|
+
const label = capitalize(this.driverName);
|
|
30
|
+
|
|
31
|
+
return this.$rootGetters['i18n/withFallback'](path, label);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
get description() {
|
|
35
|
+
if (!!this.builtIn || !!this.builtin) {
|
|
36
|
+
return this.$rootGetters['i18n/withFallback']('tableHeaders.builtIn');
|
|
37
|
+
} else {
|
|
38
|
+
return this.url;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Set description based on the type of model available with private fallback
|
|
44
|
+
*/
|
|
45
|
+
set description(value) {
|
|
46
|
+
if (this.annotations) {
|
|
47
|
+
this.annotations[DESCRIPTION] = value;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
this._description = value;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
cleanForSave(data, forNew) {
|
|
54
|
+
const val = super.cleanForSave(data, forNew);
|
|
55
|
+
|
|
56
|
+
if (forNew) {
|
|
57
|
+
val.active = true;
|
|
58
|
+
}
|
|
59
|
+
delete val.metadata;
|
|
60
|
+
|
|
61
|
+
return val;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -107,6 +107,10 @@ export default class FleetCluster extends SteveModel {
|
|
|
107
107
|
return this.metadata?.labels?.[FLEET_LABELS.CLUSTER_DISPLAY_NAME] || this.metadata?.name || this.id;
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
+
get name() {
|
|
111
|
+
return this.metadata?.name || this.metadata?.labels?.[FLEET_LABELS.CLUSTER_NAME];
|
|
112
|
+
}
|
|
113
|
+
|
|
110
114
|
get state() {
|
|
111
115
|
if (this.spec?.paused === true) {
|
|
112
116
|
return 'paused';
|
|
@@ -115,17 +119,6 @@ export default class FleetCluster extends SteveModel {
|
|
|
115
119
|
return this.metadata?.state?.name || 'unknown';
|
|
116
120
|
}
|
|
117
121
|
|
|
118
|
-
get nodeInfo() {
|
|
119
|
-
const ready = this.status?.agent?.readyNodes || 0;
|
|
120
|
-
const unready = this.status?.agent?.nonReadyNodes || 0;
|
|
121
|
-
|
|
122
|
-
return {
|
|
123
|
-
ready,
|
|
124
|
-
unready,
|
|
125
|
-
total: ready + unready,
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
|
|
129
122
|
get repoInfo() {
|
|
130
123
|
const ready = this.status?.readyGitRepos || 0;
|
|
131
124
|
const total = this.status?.desiredReadyGitRepos || 0;
|
|
@@ -137,6 +130,29 @@ export default class FleetCluster extends SteveModel {
|
|
|
137
130
|
};
|
|
138
131
|
}
|
|
139
132
|
|
|
133
|
+
get bundleInfo() {
|
|
134
|
+
const bundlesData = {
|
|
135
|
+
ready: 0,
|
|
136
|
+
total: 0
|
|
137
|
+
};
|
|
138
|
+
const readyBundles = this.status?.display?.readyBundles;
|
|
139
|
+
|
|
140
|
+
if (readyBundles && readyBundles.includes('/')) {
|
|
141
|
+
const dataArr = readyBundles.split('/');
|
|
142
|
+
|
|
143
|
+
if (dataArr.length === 2 && parseInt(dataArr[0]) >= 0 && parseInt(dataArr[1]) >= 0) {
|
|
144
|
+
bundlesData.ready = parseInt(dataArr[0]);
|
|
145
|
+
bundlesData.total = parseInt(dataArr[1]);
|
|
146
|
+
|
|
147
|
+
return bundlesData;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
bundlesData.noValidData = true;
|
|
152
|
+
|
|
153
|
+
return bundlesData;
|
|
154
|
+
}
|
|
155
|
+
|
|
140
156
|
get mgmt() {
|
|
141
157
|
const mgmt = this.$getters['byId'](MANAGEMENT.CLUSTER, this.metadata?.labels?.[FLEET_LABELS.CLUSTER_NAME]);
|
|
142
158
|
|
|
@@ -7,7 +7,9 @@ import { FLEET as FLEET_ANNOTATIONS } from '@shell/config/labels-annotations';
|
|
|
7
7
|
import { addObject, addObjects, findBy, insertAt } from '@shell/utils/array';
|
|
8
8
|
import { set } from '@shell/utils/object';
|
|
9
9
|
import SteveModel from '@shell/plugins/steve/steve-class';
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
STATES_ENUM, colorForState, mapStateToEnum, primaryDisplayStatusFromCount, stateDisplay, stateSort
|
|
12
|
+
} from '@shell/plugins/dashboard-store/resource-class';
|
|
11
13
|
import { NAME } from '@shell/config/product/explorer';
|
|
12
14
|
|
|
13
15
|
function quacksLikeAHash(str) {
|
|
@@ -103,6 +105,8 @@ export default class GitRepo extends SteveModel {
|
|
|
103
105
|
const groups = workspace?.clusterGroups || [];
|
|
104
106
|
|
|
105
107
|
if (workspace?.id === 'fleet-local') {
|
|
108
|
+
// should we be getting the clusters from workspace.clusters instead of having to rely on the groups,
|
|
109
|
+
// which takes an additional request to be done on the Fleet dashboard screen?
|
|
106
110
|
const local = findBy(groups, 'id', 'fleet-local/default');
|
|
107
111
|
|
|
108
112
|
if (local) {
|
|
@@ -203,17 +207,6 @@ export default class GitRepo extends SteveModel {
|
|
|
203
207
|
return hash;
|
|
204
208
|
}
|
|
205
209
|
|
|
206
|
-
get clusterInfo() {
|
|
207
|
-
const ready = this.status?.readyClusters || 0;
|
|
208
|
-
const total = this.status?.desiredReadyClusters || 0;
|
|
209
|
-
|
|
210
|
-
return {
|
|
211
|
-
ready,
|
|
212
|
-
unready: total - ready,
|
|
213
|
-
total,
|
|
214
|
-
};
|
|
215
|
-
}
|
|
216
|
-
|
|
217
210
|
get targetInfo() {
|
|
218
211
|
let mode = null;
|
|
219
212
|
let cluster = null;
|
|
@@ -323,6 +316,14 @@ export default class GitRepo extends SteveModel {
|
|
|
323
316
|
return 0;
|
|
324
317
|
}
|
|
325
318
|
|
|
319
|
+
get targetClustersReady() {
|
|
320
|
+
if (this.targetClusters && this.targetClusters.length) {
|
|
321
|
+
return this.targetClusters.filter((cluster) => cluster.state === 'active');
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
return 0;
|
|
325
|
+
}
|
|
326
|
+
|
|
326
327
|
get bundleDeployments() {
|
|
327
328
|
const bds = this.$getters['all'](FLEET.BUNDLE_DEPLOYMENT);
|
|
328
329
|
|
|
@@ -384,8 +385,9 @@ export default class GitRepo extends SteveModel {
|
|
|
384
385
|
namespace: r.namespace,
|
|
385
386
|
name: r.name,
|
|
386
387
|
clusterId: c.id,
|
|
388
|
+
clusterLabel: c.metadata.labels[FLEET_ANNOTATIONS.CLUSTER_NAME],
|
|
387
389
|
clusterName: c.nameDisplay,
|
|
388
|
-
state,
|
|
390
|
+
state: mapStateToEnum(state),
|
|
389
391
|
stateBackground: color,
|
|
390
392
|
stateDisplay: display,
|
|
391
393
|
stateSort: stateSort(color, display),
|
|
@@ -401,6 +403,57 @@ export default class GitRepo extends SteveModel {
|
|
|
401
403
|
return out;
|
|
402
404
|
}
|
|
403
405
|
|
|
406
|
+
get clusterInfo() {
|
|
407
|
+
const ready = this.status?.readyClusters || 0;
|
|
408
|
+
const total = this.status?.desiredReadyClusters || 0;
|
|
409
|
+
|
|
410
|
+
return {
|
|
411
|
+
ready,
|
|
412
|
+
unready: total - ready,
|
|
413
|
+
total,
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
get clusterResourceStatus() {
|
|
418
|
+
const clusterStatuses = this.resourcesStatuses.reduce((prev, curr) => {
|
|
419
|
+
const { clusterId, clusterLabel } = curr;
|
|
420
|
+
|
|
421
|
+
const state = curr.state;
|
|
422
|
+
|
|
423
|
+
if (!prev[clusterId]) {
|
|
424
|
+
prev[clusterId] = {
|
|
425
|
+
clusterLabel,
|
|
426
|
+
resourceCounts: { [state]: 0, desiredReady: 0 }
|
|
427
|
+
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
if (!prev[clusterId].resourceCounts[state]) {
|
|
432
|
+
prev[clusterId].resourceCounts[state] = 0;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
prev[clusterId].resourceCounts[state] += 1;
|
|
436
|
+
prev[clusterId].resourceCounts.desiredReady += 1;
|
|
437
|
+
|
|
438
|
+
return prev;
|
|
439
|
+
}, {});
|
|
440
|
+
|
|
441
|
+
const values = Object.keys(clusterStatuses).map((key) => {
|
|
442
|
+
const { clusterLabel, resourceCounts } = clusterStatuses[key];
|
|
443
|
+
|
|
444
|
+
return {
|
|
445
|
+
clusterId: key,
|
|
446
|
+
clusterLabel, // FLEET LABEL
|
|
447
|
+
status: {
|
|
448
|
+
displayStatus: primaryDisplayStatusFromCount(resourceCounts),
|
|
449
|
+
resourceCounts: { ...resourceCounts }
|
|
450
|
+
}
|
|
451
|
+
};
|
|
452
|
+
});
|
|
453
|
+
|
|
454
|
+
return values;
|
|
455
|
+
}
|
|
456
|
+
|
|
404
457
|
get clustersList() {
|
|
405
458
|
return this.$getters['all'](FLEET.CLUSTER);
|
|
406
459
|
}
|
|
@@ -22,7 +22,7 @@ export default class ProjectHelmChart extends SteveModel {
|
|
|
22
22
|
const clusterId = this.$rootGetters['currentCluster']?.id;
|
|
23
23
|
const project = this.$rootGetters['management/byId'](MANAGEMENT.PROJECT, `${ clusterId }/${ this.projectId }`);
|
|
24
24
|
|
|
25
|
-
return project
|
|
25
|
+
return project?.spec.displayName;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
get namespaces() {
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import Driver from '@shell/models/driver';
|
|
2
|
+
|
|
3
|
+
export default class KontainerDriver extends Driver {
|
|
4
|
+
get doneRoute() {
|
|
5
|
+
return 'c-cluster-manager-driver-kontainerdriver';
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
get _availableActions() {
|
|
9
|
+
const out = [
|
|
10
|
+
{
|
|
11
|
+
action: 'activate',
|
|
12
|
+
label: this.t('action.activate'),
|
|
13
|
+
icon: 'icon icon-play',
|
|
14
|
+
bulkable: true,
|
|
15
|
+
bulkAction: 'activateBulk',
|
|
16
|
+
enabled: !!this.links.update && !this.active
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
action: 'deactivate',
|
|
20
|
+
label: this.t('action.deactivate'),
|
|
21
|
+
icon: 'icon icon-pause',
|
|
22
|
+
bulkable: true,
|
|
23
|
+
bulkAction: 'deactivateBulk',
|
|
24
|
+
enabled: !!this.links.update && !!this.active,
|
|
25
|
+
weight: -1
|
|
26
|
+
},
|
|
27
|
+
{ divider: true },
|
|
28
|
+
{
|
|
29
|
+
action: 'viewInApi',
|
|
30
|
+
enabled: true,
|
|
31
|
+
icon: 'icon icon-external-link',
|
|
32
|
+
label: this.t('action.viewInApi'),
|
|
33
|
+
},
|
|
34
|
+
{ divider: true },
|
|
35
|
+
{
|
|
36
|
+
action: 'goToEdit',
|
|
37
|
+
label: this.t('action.edit'),
|
|
38
|
+
icon: 'icon icon-edit',
|
|
39
|
+
bulkable: false,
|
|
40
|
+
enabled: !!this.links.update && !this.builtin,
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
action: 'promptRemove',
|
|
44
|
+
altAction: 'remove',
|
|
45
|
+
bulkAction: 'promptRemove',
|
|
46
|
+
label: this.t('action.remove'),
|
|
47
|
+
bulkable: true,
|
|
48
|
+
icon: 'icon icon-delete',
|
|
49
|
+
enabled: !!this.links.remove,
|
|
50
|
+
weight: -10,
|
|
51
|
+
}
|
|
52
|
+
];
|
|
53
|
+
|
|
54
|
+
return out;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
deactivate(resources = [this]) {
|
|
58
|
+
this.$dispatch('promptModal', {
|
|
59
|
+
componentProps: { drivers: resources, driverType: 'kontainerDrivers' },
|
|
60
|
+
component: 'DeactivateDriverDialog'
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
deactivateBulk(resources) {
|
|
65
|
+
this.$dispatch('promptModal', {
|
|
66
|
+
componentProps: { drivers: resources, driverType: 'kontainerDrivers' },
|
|
67
|
+
component: 'DeactivateDriverDialog'
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
activate() {
|
|
72
|
+
return this.$dispatch('rancher/request', {
|
|
73
|
+
url: `v3/kontainerDrivers/${ escape(this.id) }?action=activate`,
|
|
74
|
+
method: 'post',
|
|
75
|
+
}, { root: true });
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async activateBulk(resources) {
|
|
79
|
+
await Promise.all(resources.map((resource) => this.$dispatch('rancher/request', {
|
|
80
|
+
url: `v3/kontainerDrivers/${ escape(resource.id) }?action=activate`,
|
|
81
|
+
method: 'post',
|
|
82
|
+
}, { root: true }
|
|
83
|
+
)));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -14,10 +14,11 @@ export const configType = {
|
|
|
14
14
|
googleoauth: 'oauth',
|
|
15
15
|
local: '',
|
|
16
16
|
github: 'oauth',
|
|
17
|
-
keycloakoidc: 'oidc'
|
|
17
|
+
keycloakoidc: 'oidc',
|
|
18
|
+
genericoidc: 'oidc',
|
|
18
19
|
};
|
|
19
20
|
|
|
20
|
-
const imageOverrides = { keycloakoidc: 'keycloak' };
|
|
21
|
+
const imageOverrides = { keycloakoidc: 'keycloak', genericoidc: 'openid' };
|
|
21
22
|
|
|
22
23
|
export default class AuthConfig extends SteveModel {
|
|
23
24
|
get _availableActions() {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import Vue from 'vue';
|
|
2
1
|
import { CATALOG, CLUSTER_BADGE } from '@shell/config/labels-annotations';
|
|
3
2
|
import { NODE, FLEET, MANAGEMENT, CAPI } from '@shell/config/types';
|
|
4
3
|
import { insertAt, addObject, removeObject } from '@shell/utils/array';
|
|
@@ -15,6 +14,7 @@ import HybridModel from '@shell/plugins/steve/hybrid-class';
|
|
|
15
14
|
import { LINUX, WINDOWS } from '@shell/store/catalog';
|
|
16
15
|
import { KONTAINER_TO_DRIVER } from './management.cattle.io.kontainerdriver';
|
|
17
16
|
import { PINNED_CLUSTERS } from '@shell/store/prefs';
|
|
17
|
+
import { copyTextToClipboard } from '@shell/utils/clipboard';
|
|
18
18
|
|
|
19
19
|
// See translation file cluster.providers for list of providers
|
|
20
20
|
// If the logo is not named with the provider name, add an override here
|
|
@@ -88,6 +88,10 @@ export default class MgmtCluster extends HybridModel {
|
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
get provisioner() {
|
|
91
|
+
if (this.status?.provider ) {
|
|
92
|
+
return this.status.provider;
|
|
93
|
+
}
|
|
94
|
+
|
|
91
95
|
// For imported K3s clusters, this.status.driver is 'k3s.'
|
|
92
96
|
return this.status?.driver ? this.status.driver : 'imported';
|
|
93
97
|
}
|
|
@@ -295,9 +299,10 @@ export default class MgmtCluster extends HybridModel {
|
|
|
295
299
|
|
|
296
300
|
// Custom badge to show for the Cluster (if the appropriate annotations are set)
|
|
297
301
|
get badge() {
|
|
298
|
-
const
|
|
302
|
+
const icon = this.metadata?.annotations?.[CLUSTER_BADGE.ICON_TEXT];
|
|
303
|
+
const comment = this.metadata?.annotations?.[CLUSTER_BADGE.TEXT];
|
|
299
304
|
|
|
300
|
-
if (!
|
|
305
|
+
if (!icon && !comment) {
|
|
301
306
|
return undefined;
|
|
302
307
|
}
|
|
303
308
|
|
|
@@ -305,10 +310,10 @@ export default class MgmtCluster extends HybridModel {
|
|
|
305
310
|
const iconText = this.metadata?.annotations[CLUSTER_BADGE.ICON_TEXT] || '';
|
|
306
311
|
|
|
307
312
|
return {
|
|
308
|
-
text,
|
|
313
|
+
text: comment || undefined,
|
|
309
314
|
color,
|
|
310
315
|
textColor: textColor(parseColor(color)),
|
|
311
|
-
iconText: iconText.substr(0,
|
|
316
|
+
iconText: iconText.substr(0, 3)
|
|
312
317
|
};
|
|
313
318
|
}
|
|
314
319
|
|
|
@@ -404,9 +409,13 @@ export default class MgmtCluster extends HybridModel {
|
|
|
404
409
|
}
|
|
405
410
|
|
|
406
411
|
async copyKubeConfig() {
|
|
407
|
-
|
|
412
|
+
try {
|
|
413
|
+
const config = await this.generateKubeConfig();
|
|
408
414
|
|
|
409
|
-
|
|
415
|
+
if (config) {
|
|
416
|
+
await copyTextToClipboard(config);
|
|
417
|
+
}
|
|
418
|
+
} catch {}
|
|
410
419
|
}
|
|
411
420
|
|
|
412
421
|
async fetchNodeMetrics() {
|
|
@@ -37,6 +37,7 @@ export default class GlobalRole extends SteveDescriptionModel {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
get nameDisplay() {
|
|
40
|
+
// i18n-uses rbac.globalRoles.role.*.label
|
|
40
41
|
const path = `rbac.globalRoles.role.${ this.id }.label`;
|
|
41
42
|
const label = this.displayName || this.metadata?.name || this.id;
|
|
42
43
|
|
|
@@ -46,6 +47,7 @@ export default class GlobalRole extends SteveDescriptionModel {
|
|
|
46
47
|
get descriptionDisplay() {
|
|
47
48
|
return this.description ||
|
|
48
49
|
this.metadata?.annotations?.[DESCRIPTION] ||
|
|
50
|
+
// i18n-uses rbac.globalRoles.role.*.description
|
|
49
51
|
this.$rootGetters['i18n/withFallback'](`rbac.globalRoles.role.${ this.id }.description`, this.t(`rbac.globalRoles.unknownRole.description`));
|
|
50
52
|
}
|
|
51
53
|
|
|
@@ -8,6 +8,7 @@ import { insertAt } from '@shell/utils/array';
|
|
|
8
8
|
import { downloadUrl } from '@shell/utils/download';
|
|
9
9
|
import findLast from 'lodash/findLast';
|
|
10
10
|
import HybridModel from '@shell/plugins/steve/hybrid-class';
|
|
11
|
+
import { notOnlyOfRole } from '@shell/models/cluster.x-k8s.io.machine';
|
|
11
12
|
|
|
12
13
|
export default class MgmtNode extends HybridModel {
|
|
13
14
|
get _availableActions() {
|
|
@@ -21,11 +22,12 @@ export default class MgmtNode extends HybridModel {
|
|
|
21
22
|
};
|
|
22
23
|
|
|
23
24
|
const scaleDown = {
|
|
24
|
-
action:
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
action: 'scaleDown',
|
|
26
|
+
bulkAction: 'scaleDown',
|
|
27
|
+
enabled: !!this.canScaleDown,
|
|
28
|
+
icon: 'icon icon-minus icon-fw',
|
|
29
|
+
label: this.t('node.actions.scaleDown'),
|
|
30
|
+
bulkable: true,
|
|
29
31
|
};
|
|
30
32
|
|
|
31
33
|
insertAt(out, 0, { divider: true });
|
|
@@ -105,12 +107,12 @@ export default class MgmtNode extends HybridModel {
|
|
|
105
107
|
}
|
|
106
108
|
}
|
|
107
109
|
|
|
108
|
-
async scaleDown(resources) {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
})
|
|
110
|
+
async scaleDown(resources = this) {
|
|
111
|
+
this.$dispatch('promptModal', {
|
|
112
|
+
resources,
|
|
113
|
+
component: 'ScaleMachineDownDialog',
|
|
114
|
+
modalWidth: '450px'
|
|
115
|
+
});
|
|
114
116
|
}
|
|
115
117
|
|
|
116
118
|
get provisioningCluster() {
|
|
@@ -166,10 +168,12 @@ export default class MgmtNode extends HybridModel {
|
|
|
166
168
|
}
|
|
167
169
|
|
|
168
170
|
get canScaleDown() {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
+
if (!this.isEtcd && !this.isControlPlane) {
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
174
|
+
|
|
171
175
|
const hasAction = this.norman?.actions?.scaledown;
|
|
172
176
|
|
|
173
|
-
return hasAction && (
|
|
177
|
+
return hasAction && notOnlyOfRole(this, this.provisioningCluster?.nodes);
|
|
174
178
|
}
|
|
175
179
|
}
|