dashboard-shell-shell 3.0.2-test.20250913 → 3.0.5-test.2
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 +3 -0
- package/assets/icons/demo.css:Zone.Identifier +0 -0
- package/assets/icons/demo_index.html:Zone.Identifier +0 -0
- package/assets/icons/iconfont.css:Zone.Identifier +0 -0
- package/assets/icons/iconfont.js:Zone.Identifier +0 -0
- package/assets/icons/iconfont.json:Zone.Identifier +0 -0
- package/assets/icons/iconfont.ttf:Zone.Identifier +0 -0
- package/assets/icons/iconfont.woff2:Zone.Identifier +0 -0
- package/assets/icons/iconfont.woff:Zone.Identifier +0 -0
- package/assets/images/icons/document.svg +3 -0
- package/assets/images/key.svg +17 -0
- package/assets/images/providers/sks.svg +1 -0
- package/assets/images/vendor/cognito.svg +1 -0
- package/assets/styles/app.scss +3 -0
- package/assets/styles/base/_basic.scss +10 -0
- package/assets/styles/base/_spacing.scss +29 -0
- package/assets/styles/base/_variables.scss +16 -10
- package/assets/styles/global/_labeled-input.scss +1 -1
- package/assets/styles/global/_layout.scss +1 -1
- package/assets/styles/themes/_dark.scss +30 -0
- package/assets/styles/themes/_light.scss +80 -2
- package/assets/translations/en-us.yaml +822 -105
- package/assets/translations/zh-hans.yaml +13 -3
- package/chart/__tests__/S3.test.ts +2 -1
- package/chart/monitoring/index.vue +1 -1
- package/cloud-credential/gcp.vue +9 -1
- package/components/ActionMenuShell.vue +3 -7
- package/components/AppModal.vue +9 -28
- package/components/AsyncButton.vue +2 -0
- package/components/BrandImage.vue +0 -21
- package/components/Certificates.vue +5 -0
- package/components/CodeMirror.vue +3 -3
- package/components/CommunityLinks.vue +3 -58
- package/components/ConfigMapSettings/Settings.vue +377 -0
- package/components/ConfigMapSettings/index.vue +354 -0
- package/components/CruResource.vue +103 -16
- package/components/DetailText.vue +61 -11
- package/components/Drawer/Chrome.vue +115 -0
- package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +61 -0
- package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +48 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/ConfigTab.test.ts +54 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/YamlTab.test.ts +80 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/composables.test.ts +106 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/helpers.test.ts +42 -0
- package/components/Drawer/ResourceDetailDrawer/composables.ts +53 -0
- package/components/Drawer/ResourceDetailDrawer/helpers.ts +10 -0
- package/components/Drawer/ResourceDetailDrawer/index.vue +123 -0
- package/components/ExplorerProjectsNamespaces.vue +46 -29
- package/components/FilterPanel.vue +156 -0
- package/components/FixedBanner.vue +19 -5
- package/components/{fleet/ForceDirectedTreeChart/index.vue → ForceDirectedTreeChart.vue} +47 -41
- package/components/GrowlManager.vue +16 -15
- package/components/IconOrSvg.vue +19 -35
- package/components/KeyValueView.vue +1 -1
- package/components/LandingPagePreference.vue +2 -0
- package/components/Loading.vue +1 -1
- package/components/LocaleSelector.vue +10 -2
- package/components/PaginatedResourceTable.vue +53 -1
- package/components/ProgressBarMulti.vue +1 -0
- package/components/PromptModal.vue +38 -7
- package/components/PromptRemove.vue +5 -1
- package/components/PromptRestore.vue +22 -44
- package/components/RelatedResources.vue +4 -12
- package/components/Resource/Detail/Additional.vue +46 -0
- package/components/Resource/Detail/Card/PodsCard/Bubble.vue +13 -0
- package/components/Resource/Detail/Card/PodsCard/composable.ts +30 -0
- package/components/Resource/Detail/Card/PodsCard/index.vue +118 -0
- package/components/Resource/Detail/Card/ResourceUsageCard/composable.ts +51 -0
- package/components/Resource/Detail/Card/ResourceUsageCard/index.vue +79 -0
- package/components/Resource/Detail/Card/Scaler.vue +89 -0
- package/components/Resource/Detail/Card/StateCard/composables.ts +112 -0
- package/components/Resource/Detail/Card/StateCard/index.vue +39 -0
- package/components/Resource/Detail/Card/VerticalGap.vue +11 -0
- package/components/Resource/Detail/Card/__tests__/Card.test.ts +36 -0
- package/components/Resource/Detail/Card/__tests__/PodsCard.test.ts +84 -0
- package/components/Resource/Detail/Card/__tests__/ResourceUsageCard.test.ts +72 -0
- package/components/Resource/Detail/Card/__tests__/Scaler.test.ts +87 -0
- package/components/Resource/Detail/Card/__tests__/StateCard.test.ts +53 -0
- package/components/Resource/Detail/Card/__tests__/VerticalGap.test.ts +14 -0
- package/components/Resource/Detail/Card/__tests__/index.test.ts +36 -0
- package/components/Resource/Detail/Card/index.vue +56 -0
- package/components/Resource/Detail/Metadata/Annotations/__tests__/index.test.ts +19 -0
- package/components/Resource/Detail/Metadata/Annotations/composable.ts +12 -0
- package/components/Resource/Detail/Metadata/Annotations/index.vue +31 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +223 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/index.test.ts +103 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/composable.ts +72 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +317 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +140 -0
- package/components/Resource/Detail/Metadata/KeyValue.vue +140 -0
- package/components/Resource/Detail/Metadata/Labels/__tests__/index.test.ts +18 -0
- package/components/Resource/Detail/Metadata/Labels/composable.ts +12 -0
- package/components/Resource/Detail/Metadata/Labels/index.vue +31 -0
- package/components/Resource/Detail/Metadata/Rectangle.vue +34 -0
- package/components/Resource/Detail/Metadata/__tests__/KeyValue.test.ts +107 -0
- package/components/Resource/Detail/Metadata/__tests__/Rectangle.test.ts +24 -0
- package/components/Resource/Detail/Metadata/__tests__/composables.test.ts +75 -0
- package/components/Resource/Detail/Metadata/__tests__/index.test.ts +91 -0
- package/components/Resource/Detail/Metadata/composables.ts +81 -0
- package/components/Resource/Detail/Metadata/index.vue +88 -0
- package/components/Resource/Detail/Page.vue +37 -0
- package/components/Resource/Detail/PercentageBar.vue +40 -0
- package/components/Resource/Detail/ResourceRow.vue +138 -0
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/composables.test.ts +29 -0
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/index.test.ts +48 -0
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/composables.ts +31 -0
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/index.vue +50 -0
- package/components/Resource/Detail/ResourceTabs/KnownHostsTab/__tests__/composables.test.ts +66 -0
- package/components/Resource/Detail/ResourceTabs/KnownHostsTab/composables.ts +21 -0
- package/components/Resource/Detail/ResourceTabs/KnownHostsTab/index.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Basic.vue +45 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/BasicAuth.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Certificate.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Registry.vue +22 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/ServiceAccountToken.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Ssh.vue +32 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Basic.test.ts +40 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/BasicAuth.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Certificate.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Registry.test.ts +27 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/ServiceAccountToken.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Ssh.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/auth-types.test.ts +186 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/composables.test.ts +102 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/auth-types.ts +109 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/composeables.ts +52 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/index.vue +71 -0
- package/components/Resource/Detail/SpacedRow.vue +14 -0
- package/components/Resource/Detail/StatusBar.vue +59 -0
- package/components/Resource/Detail/StatusRow.vue +61 -0
- package/components/Resource/Detail/TitleBar/Title.vue +14 -0
- package/components/Resource/Detail/TitleBar/Top.vue +14 -0
- package/components/Resource/Detail/TitleBar/__tests__/Title.test.ts +17 -0
- package/components/Resource/Detail/TitleBar/__tests__/Top.test.ts +17 -0
- package/components/Resource/Detail/TitleBar/__tests__/composables.test.ts +63 -0
- package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +142 -0
- package/components/Resource/Detail/TitleBar/composables.ts +46 -0
- package/components/Resource/Detail/TitleBar/index.vue +204 -0
- package/components/Resource/Detail/Top/index.vue +34 -0
- package/components/Resource/Detail/__tests__/Page.test.ts +32 -0
- package/components/Resource/Detail/composables.ts +45 -0
- package/components/ResourceDetail/Masthead/__tests__/index.test.ts +70 -0
- package/components/ResourceDetail/{__tests__/Masthead.test.ts → Masthead/__tests__/legacy.test.ts} +3 -3
- package/components/ResourceDetail/Masthead/index.vue +65 -0
- package/components/ResourceDetail/Masthead/latest.vue +44 -0
- package/components/ResourceDetail/{Masthead.vue → Masthead/legacy.vue} +0 -1
- package/components/ResourceDetail/__tests__/index.test.ts +135 -0
- package/components/ResourceDetail/index.vue +75 -575
- package/components/ResourceDetail/legacy.vue +564 -0
- package/components/ResourceList/Masthead.vue +69 -20
- package/components/ResourceList/index.vue +3 -2
- package/components/ResourceTable.vue +59 -85
- package/components/ResourceYaml.vue +15 -2
- package/components/RichTranslation.vue +106 -0
- package/components/SlideInPanelManager.vue +116 -14
- package/components/SortableTable/index.vue +10 -2
- package/components/SortableTable/paging.js +15 -16
- package/components/SortableTable/selection.js +22 -10
- package/components/StateDot/index.vue +28 -0
- package/components/StatusBadge.vue +6 -4
- package/components/SubtleLink.vue +25 -0
- package/components/Tabbed/index.vue +38 -22
- package/components/Wizard.vue +16 -3
- package/components/YamlEditor.vue +1 -2
- package/components/__tests__/AsyncButton.test.ts +39 -0
- package/components/__tests__/ConfigMapSettings.test.ts +376 -0
- package/components/__tests__/CruResource.test.ts +63 -0
- package/components/__tests__/FilterPanel.test.ts +81 -0
- package/components/__tests__/GrowlManager.test.ts +0 -25
- package/components/__tests__/PromptModal.test.ts +146 -0
- package/components/__tests__/PromptRestore.test.ts +1 -65
- package/components/__tests__/RichTranslation.test.ts +115 -0
- package/components/auth/AuthBanner.vue +15 -14
- package/components/auth/Principal.vue +0 -1
- package/components/auth/RoleDetailEdit.vue +44 -4
- package/components/auth/login/ldap.vue +2 -2
- package/components/auth/login/oidc.vue +6 -1
- package/components/fleet/FleetApplications.vue +174 -0
- package/components/fleet/FleetClusterTargets/TargetsList.vue +66 -0
- package/components/fleet/FleetClusterTargets/index.vue +455 -0
- package/components/fleet/FleetClusters.vue +25 -6
- package/components/fleet/FleetGitRepoPaths.vue +476 -0
- package/components/fleet/FleetHelmOps.vue +123 -0
- package/components/fleet/FleetIntro.vue +58 -28
- package/components/fleet/FleetNoWorkspaces.vue +5 -1
- package/components/fleet/FleetOCIStorageSecret.vue +171 -0
- package/components/fleet/FleetRepos.vue +37 -80
- package/components/fleet/FleetResources.vue +69 -27
- package/components/fleet/FleetSummary.vue +26 -51
- package/components/fleet/FleetValuesFrom.vue +295 -0
- package/components/fleet/__tests__/FleetClusterTargets.test.ts +1224 -0
- package/components/fleet/__tests__/FleetGitRepoPaths.test.ts +265 -0
- package/components/fleet/__tests__/FleetOCIStorageSecret.test.ts +213 -0
- package/components/fleet/__tests__/FleetSummary.test.ts +39 -39
- package/components/fleet/__tests__/FleetValuesFrom.test.ts +300 -0
- package/components/fleet/dashboard/Empty.vue +73 -0
- package/components/fleet/dashboard/ResourceCard.vue +184 -0
- package/components/fleet/dashboard/ResourceCardSummary.vue +195 -0
- package/components/fleet/dashboard/ResourceDetails.vue +194 -0
- package/components/fleet/dashboard/ResourcePanel.vue +384 -0
- package/components/form/ArrayList.vue +144 -116
- package/components/form/BannerSettings.vue +117 -50
- package/components/form/ChangePassword.vue +3 -1
- package/components/form/ColorInput.vue +35 -6
- package/components/form/FileImageSelector.vue +1 -1
- package/components/form/Footer.vue +10 -4
- package/components/form/KeyValue.vue +92 -51
- package/components/form/LabeledSelect.vue +72 -54
- package/components/form/Labels.vue +91 -21
- package/components/form/MatchExpressions.vue +56 -9
- package/components/form/NameNsDescription.vue +12 -8
- package/components/form/Networking.vue +24 -19
- package/components/form/NotificationSettings.vue +15 -1
- package/components/form/ResourceLabeledSelect.vue +22 -8
- package/components/form/ResourceSelector.vue +27 -23
- package/components/form/ResourceTabs/index.vue +7 -1
- package/components/form/SSHKnownHosts/index.vue +14 -11
- package/components/form/SecretSelector.vue +18 -2
- package/components/form/Select.vue +57 -26
- package/components/form/SelectOrCreateAuthSecret.vue +6 -3
- package/components/form/SimpleSecretSelector.vue +17 -4
- package/components/form/Taints.vue +21 -2
- package/components/form/UnitInput.vue +21 -0
- package/components/form/ValueFromResource.vue +31 -19
- package/components/form/__tests__/ArrayList.test.ts +32 -0
- package/components/form/__tests__/ColorInput.test.ts +35 -0
- package/components/form/__tests__/KeyValue.test.ts +36 -0
- package/components/form/__tests__/LabeledSelect.test.ts +79 -2
- package/components/form/__tests__/Labels.test.ts +360 -0
- package/components/form/__tests__/MatchExpressions.test.ts +16 -13
- package/components/form/__tests__/Networking.test.ts +116 -0
- package/components/form/__tests__/SSHKnownHosts.test.ts +11 -2
- package/components/form/__tests__/Select.test.ts +37 -1
- package/components/form/__tests__/UnitInput.test.ts +23 -1
- package/components/form/labeled-select-utils/labeled-select-pagination.ts +3 -38
- package/components/formatter/ClusterLink.vue +5 -8
- package/components/formatter/Description.vue +30 -0
- package/components/formatter/FleetApplicationClustersReady.vue +77 -0
- package/components/formatter/FleetApplicationSource.vue +79 -0
- package/components/formatter/FleetSummaryGraph.vue +7 -0
- package/components/formatter/PodImages.vue +1 -1
- package/components/formatter/WorkloadHealthScale.vue +1 -1
- package/components/formatter/__tests__/ClusterLink.test.ts +2 -32
- package/components/formatter/__tests__/LiveDate.test.ts +10 -2
- package/components/google/AccountAccess.vue +209 -0
- package/components/google/types/gcp.d.ts +136 -0
- package/components/google/types/index.d.ts +101 -0
- package/components/google/util/__mocks__/gcp.ts +465 -0
- package/components/google/util/formatter.ts +82 -0
- package/components/google/util/gcp.ts +134 -0
- package/components/google/util/index.d.ts +11 -0
- package/components/nav/Favorite.vue +1 -1
- package/components/nav/Group.vue +5 -0
- package/components/nav/Header.vue +24 -38
- package/components/nav/NamespaceFilter.vue +141 -84
- package/components/nav/NotificationCenter/Notification.vue +484 -0
- package/components/nav/NotificationCenter/NotificationHeader.vue +112 -0
- package/components/nav/NotificationCenter/index.vue +148 -0
- package/components/nav/TopLevelMenu.helper.ts +55 -34
- package/components/nav/TopLevelMenu.vue +11 -0
- package/components/nav/Type.vue +4 -1
- package/components/nav/WindowManager/ContainerLogs.vue +87 -61
- package/components/nav/WindowManager/ContainerLogsActions.vue +76 -0
- package/components/nav/WindowManager/index.vue +3 -2
- package/components/templates/default.vue +0 -3
- package/components/templates/plain.vue +0 -3
- package/composables/drawer.ts +26 -0
- package/composables/focusTrap.ts +3 -3
- package/composables/resources.test.ts +63 -0
- package/composables/resources.ts +38 -0
- package/composables/useI18n.ts +12 -11
- package/composables/useIsNewDetailPageEnabled.ts +17 -0
- package/config/labels-annotations.js +22 -11
- package/config/pagination-table-headers.js +8 -1
- package/config/private-label.js +0 -1
- package/config/product/auth.js +20 -3
- package/config/product/{cis.js → compliance.js} +23 -26
- package/config/product/explorer.js +49 -17
- package/config/product/fleet.js +77 -17
- package/config/product/manager.js +1 -29
- package/config/product/settings.js +23 -11
- package/config/query-params.js +16 -1
- package/config/roles.ts +2 -1
- package/config/router/navigation-guards/authentication.js +51 -2
- package/config/router/navigation-guards/index.js +5 -67
- package/config/router/routes.js +65 -31
- package/config/secret.ts +15 -0
- package/config/settings.ts +33 -16
- package/config/store.js +2 -0
- package/config/system-namespaces.js +1 -1
- package/config/table-headers.js +91 -30
- package/config/types.js +18 -7
- package/config/version.js +1 -1
- package/core/plugin-helpers.ts +3 -2
- package/core/plugin.ts +32 -7
- package/core/types.ts +25 -7
- package/detail/catalog.cattle.io.app.vue +5 -1
- package/detail/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +22 -18
- package/detail/fleet.cattle.io.bundle.vue +70 -6
- package/detail/fleet.cattle.io.cluster.vue +28 -15
- package/detail/fleet.cattle.io.gitrepo.vue +11 -2
- package/detail/fleet.cattle.io.helmop.vue +157 -0
- package/detail/management.cattle.io.fleetworkspace.vue +18 -27
- package/detail/management.cattle.io.oidcclient.vue +369 -0
- package/detail/namespace.vue +0 -3
- package/detail/node.vue +20 -16
- package/detail/pod.vue +2 -2
- package/detail/provisioning.cattle.io.cluster.vue +16 -50
- package/detail/service.vue +10 -2
- package/detail/workload/index.vue +48 -39
- package/dialog/AddCustomBadgeDialog.vue +0 -1
- package/{pages/c/_cluster/uiplugins/AddExtensionRepos.vue → dialog/AddExtensionReposDialog.vue} +72 -42
- package/dialog/AddonConfigConfirmationDialog.vue +1 -1
- package/dialog/AssignToDialog.vue +176 -0
- package/dialog/ChangePasswordDialog.vue +106 -0
- package/{pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue → dialog/DeveloperLoadExtensionDialog.vue} +74 -71
- package/dialog/DisableAuthProviderDialog.vue +101 -0
- package/dialog/DrainNode.vue +1 -1
- package/{pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue → dialog/ExtensionCatalogInstallDialog.vue} +100 -88
- package/{pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue → dialog/ExtensionCatalogUninstallDialog.vue} +87 -66
- package/dialog/FeatureFlagListDialog.vue +288 -0
- package/dialog/ForceMachineRemoveDialog.vue +1 -1
- package/dialog/GenericPrompt.vue +1 -1
- package/dialog/HelmOpForceUpdateDialog.vue +132 -0
- package/{components/Import.vue → dialog/ImportDialog.vue} +8 -13
- package/{pages/c/_cluster/uiplugins/InstallDialog.vue → dialog/InstallExtensionDialog.vue} +124 -106
- package/{components/form/SSHKnownHosts → dialog}/KnownHostsEditDialog.vue +52 -62
- package/dialog/MoveNamespaceDialog.vue +157 -0
- package/dialog/OidcClientSecretDialog.vue +117 -0
- package/dialog/RedeployWorkloadDialog.vue +164 -0
- package/dialog/RotateEncryptionKeyDialog.vue +10 -30
- package/dialog/ScalePoolDownDialog.vue +1 -1
- package/{components/nav/Jump.vue → dialog/SearchDialog.vue} +34 -14
- package/{pages/c/_cluster/uiplugins/UninstallDialog.vue → dialog/UninstallExtensionDialog.vue} +67 -58
- package/dialog/WechatDialog.vue +57 -0
- package/{components/form/SSHKnownHosts → dialog}/__tests__/KnownHostsEditDialog.test.ts +15 -34
- package/edit/__tests__/cis.cattle.io.clusterscan.test.ts +3 -3
- package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +60 -68
- package/edit/__tests__/fleet.cattle.io.helmop.test.ts +224 -0
- package/edit/__tests__/service.test.ts +2 -1
- package/edit/auth/ldap/__tests__/config.test.ts +14 -0
- package/edit/auth/ldap/config.vue +24 -0
- package/edit/auth/oidc.vue +159 -93
- package/edit/autoscaling.horizontalpodautoscaler/index.vue +4 -1
- package/edit/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +30 -31
- package/edit/{cis.cattle.io.clusterscanbenchmark.vue → compliance.cattle.io.clusterscanbenchmark.vue} +4 -4
- package/edit/{cis.cattle.io.clusterscanprofile.vue → compliance.cattle.io.clusterscanprofile.vue} +5 -5
- package/edit/configmap.vue +8 -2
- package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
- package/edit/fleet.cattle.io.gitrepo.vue +70 -256
- package/edit/fleet.cattle.io.helmop.vue +786 -0
- package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
- package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
- package/edit/logging-flow/index.vue +1 -0
- package/edit/logging.banzaicloud.io.output/index.vue +2 -1
- package/edit/logging.banzaicloud.io.output/providers/awsElasticsearch.vue +5 -6
- package/edit/management.cattle.io.fleetworkspace.vue +44 -10
- package/edit/management.cattle.io.oidcclient.vue +162 -0
- package/edit/management.cattle.io.project.vue +4 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +5 -0
- package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
- package/edit/monitoring.coreos.com.receiver/auth.vue +3 -3
- package/edit/monitoring.coreos.com.receiver/index.vue +1 -0
- package/edit/monitoring.coreos.com.receiver/types/email.vue +1 -1
- package/edit/monitoring.coreos.com.route.vue +1 -0
- package/edit/namespace.vue +2 -4
- package/edit/networking.istio.io.destinationrule/index.vue +4 -1
- package/edit/networking.k8s.io.ingress/Certificate.vue +11 -3
- package/edit/networking.k8s.io.ingress/__tests__/Certificate.test.ts +37 -0
- package/edit/networking.k8s.io.ingress/index.vue +4 -1
- package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +3 -14
- package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +57 -62
- package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +10 -16
- package/edit/networking.k8s.io.networkpolicy/__tests__/PolicyRuleTarget.test.ts +72 -41
- package/edit/networking.k8s.io.networkpolicy/__tests__/utils/mock.json +17 -1
- package/edit/networking.k8s.io.networkpolicy/index.vue +23 -31
- package/edit/node.vue +1 -0
- package/edit/persistentvolume/index.vue +4 -1
- package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +26 -12
- package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +69 -2
- package/edit/provisioning.cattle.io.cluster/__tests__/utils/rke2-test-data.ts +58 -0
- package/edit/provisioning.cattle.io.cluster/index.vue +21 -73
- package/edit/provisioning.cattle.io.cluster/rke2.vue +535 -428
- package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +48 -39
- package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +5 -3
- package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +5 -0
- package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +2 -2
- package/edit/resources.cattle.io.restore.vue +1 -1
- package/edit/secret/basic.vue +1 -0
- package/edit/secret/index.vue +127 -15
- package/edit/service.vue +17 -29
- package/edit/serviceaccount.vue +4 -1
- package/edit/storage.k8s.io.storageclass/index.vue +4 -1
- package/edit/workload/index.vue +11 -15
- package/edit/workload/mixins/workload.js +0 -2
- package/list/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +2 -2
- package/list/fleet.cattle.io.gitrepo.vue +1 -1
- package/list/fleet.cattle.io.helmop.vue +108 -0
- package/list/harvesterhci.io.management.cluster.vue +0 -17
- package/list/management.cattle.io.feature.vue +4 -288
- package/list/management.cattle.io.oidcclient.vue +108 -0
- package/list/management.cattle.io.user.vue +13 -20
- package/list/namespace.vue +6 -2
- package/list/node.vue +2 -0
- package/list/projectsecret.vue +345 -0
- package/list/secret.vue +109 -0
- package/list/workload.vue +6 -2
- package/machine-config/__tests__/vmwarevsphere.test.ts +5 -7
- package/machine-config/amazonec2.vue +3 -24
- package/machine-config/components/GCEImage.vue +374 -0
- package/machine-config/google.vue +617 -0
- package/machine-config/vmwarevsphere.vue +7 -17
- package/mixins/__tests__/brand.spec.ts +170 -0
- package/mixins/auth-config.js +8 -1
- package/mixins/brand.js +16 -17
- package/mixins/create-edit-view/impl.js +10 -1
- package/mixins/create-edit-view/index.js +5 -0
- package/mixins/preset.js +100 -0
- package/mixins/resource-fetch-api-pagination.js +73 -44
- package/mixins/resource-fetch.js +18 -8
- package/mixins/resource-table-watch.js +45 -0
- package/mixins/vue-select-overrides.js +1 -4
- package/models/__tests__/chart.test.ts +296 -0
- package/models/__tests__/fleet.cattle.io.gitrepo.test.ts +1 -1
- package/models/__tests__/fleet.cattle.io.helmop.test.ts +224 -0
- package/models/__tests__/node.test.ts +7 -63
- package/models/__tests__/workload.test.ts +1 -0
- package/models/chart.js +157 -2
- package/models/cluster/node.js +2 -1
- package/models/cluster.js +32 -2
- package/models/cluster.x-k8s.io.machinedeployment.js +11 -2
- package/models/{cis.cattle.io.clusterscan.js → compliance.cattle.io.clusterscan.js} +8 -8
- package/models/{cis.cattle.io.clusterscanbenchmark.js → compliance.cattle.io.clusterscanbenchmark.js} +1 -1
- package/models/{cis.cattle.io.clusterscanprofile.js → compliance.cattle.io.clusterscanprofile.js} +5 -5
- package/models/{cis.cattle.io.clusterscanreport.js → compliance.cattle.io.clusterscanreport.js} +1 -1
- package/models/fleet-application.js +297 -0
- package/models/fleet.cattle.io.bundle.js +9 -8
- package/models/fleet.cattle.io.cluster.js +21 -4
- package/models/fleet.cattle.io.gitrepo.js +46 -382
- package/models/fleet.cattle.io.helmop.js +202 -0
- package/models/management.cattle.io.authconfig.js +1 -0
- package/models/management.cattle.io.cluster.js +0 -20
- package/models/management.cattle.io.feature.js +7 -1
- package/models/management.cattle.io.fleetworkspace.js +14 -1
- package/models/management.cattle.io.node.js +7 -22
- package/models/management.cattle.io.nodepool.js +12 -0
- package/models/management.cattle.io.oidcclient.js +18 -0
- package/models/management.cattle.io.registration.js +3 -0
- package/models/management.cattle.io.setting.js +0 -1
- package/models/namespace.js +12 -1
- package/models/provisioning.cattle.io.cluster.js +60 -97
- package/models/secret.js +157 -2
- package/models/service.js +28 -9
- package/models/storage.k8s.io.storageclass.js +2 -2
- package/models/workload.js +91 -51
- package/package.json +6 -5
- package/pages/about.vue +17 -61
- package/pages/account/index.vue +9 -1
- package/pages/auth/login.vue +2 -3
- package/pages/auth/verify.vue +13 -1
- package/pages/c/_cluster/apps/charts/AddRepoLink.vue +36 -0
- package/pages/c/_cluster/apps/charts/AppChartCardFooter.vue +80 -0
- package/pages/c/_cluster/apps/charts/AppChartCardSubHeader.vue +57 -0
- package/pages/c/_cluster/apps/charts/StatusLabel.vue +33 -0
- package/pages/c/_cluster/apps/charts/index.vue +501 -468
- package/pages/c/_cluster/apps/charts/install.vue +0 -1
- package/pages/c/_cluster/auth/roles/index.vue +19 -48
- package/pages/c/_cluster/auth/user.retention/index.vue +87 -78
- package/pages/c/_cluster/explorer/EventsTable.vue +1 -1
- package/pages/c/_cluster/explorer/index.vue +14 -3
- package/pages/c/_cluster/explorer/projectsecret.vue +34 -0
- package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -1
- package/pages/c/_cluster/fleet/__tests__/index.test.ts +720 -0
- package/pages/c/_cluster/fleet/application/_resource/_id.vue +14 -0
- package/pages/c/_cluster/fleet/application/_resource/create.vue +14 -0
- package/pages/c/_cluster/fleet/application/create.vue +341 -0
- package/pages/c/_cluster/fleet/application/index.vue +139 -0
- package/pages/c/_cluster/fleet/graph/config.js +277 -0
- package/pages/c/_cluster/fleet/index.vue +866 -328
- package/pages/c/_cluster/fleet/settings/index.vue +229 -0
- package/pages/c/_cluster/longhorn/index.vue +5 -2
- package/pages/c/_cluster/settings/banners.vue +56 -2
- package/pages/c/_cluster/settings/brand.vue +2 -1
- package/pages/c/_cluster/settings/performance.vue +7 -26
- package/pages/c/_cluster/uiplugins/CatalogList/index.vue +16 -1
- package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +2 -2
- package/pages/c/_cluster/uiplugins/__tests__/AddExtensionRepos.test.ts +4 -7
- package/pages/c/_cluster/uiplugins/index.vue +98 -55
- package/pages/explorer/resource/detail/configmap.vue +42 -0
- package/pages/explorer/resource/detail/projectsecret.vue +9 -0
- package/pages/explorer/resource/detail/secret.vue +63 -0
- package/pages/home.vue +8 -104
- package/pages/prefs.vue +0 -1
- package/pages/support/index.vue +4 -6
- package/plugins/clean-html.js +2 -0
- package/plugins/dashboard-store/__tests__/actions.test.ts +4 -1
- package/plugins/dashboard-store/__tests__/normalize.test.ts +223 -0
- package/plugins/dashboard-store/__tests__/resource-class.test.ts +191 -0
- package/plugins/dashboard-store/__tests__/utils/normalize-usecases.ts +1526 -0
- package/plugins/dashboard-store/actions.js +212 -55
- package/plugins/dashboard-store/getters.js +112 -24
- package/plugins/dashboard-store/mutations.js +61 -12
- package/plugins/dashboard-store/normalize.js +29 -19
- package/plugins/dashboard-store/resource-class.js +132 -49
- package/plugins/steve/__tests__/getters.test.ts +19 -12
- package/plugins/steve/__tests__/steve-class.test.ts +1 -0
- package/plugins/steve/__tests__/subscribe.spec.ts +324 -1
- package/plugins/steve/actions.js +37 -24
- package/plugins/steve/getters.js +47 -12
- package/plugins/steve/resourceWatcher.js +10 -3
- package/plugins/steve/steve-class.js +5 -0
- package/plugins/steve/steve-pagination-utils.ts +225 -43
- package/plugins/steve/subscribe.js +418 -53
- package/plugins/steve/worker/web-worker.advanced.js +5 -1
- package/rancher-components/Banner/Banner.test.ts +51 -3
- package/rancher-components/Banner/Banner.vue +37 -6
- package/rancher-components/Form/Checkbox/Checkbox.test.ts +59 -1
- package/rancher-components/Form/Checkbox/Checkbox.vue +27 -9
- package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +51 -0
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +21 -3
- package/rancher-components/Form/Radio/RadioButton.test.ts +36 -1
- package/rancher-components/Form/Radio/RadioButton.vue +21 -5
- package/rancher-components/Form/Radio/RadioGroup.test.ts +60 -0
- package/rancher-components/Form/Radio/RadioGroup.vue +81 -38
- package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +4 -0
- package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +22 -1
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +1 -0
- package/rancher-components/RcButton/RcButton.vue +1 -1
- package/rancher-components/RcDropdown/RcDropdown.test.ts +98 -0
- package/rancher-components/RcDropdown/RcDropdown.vue +6 -0
- package/rancher-components/RcDropdown/RcDropdownItem.vue +8 -55
- package/rancher-components/RcDropdown/RcDropdownItemCheckbox.vue +69 -0
- package/rancher-components/RcDropdown/RcDropdownItemSelect.vue +93 -0
- package/rancher-components/RcDropdown/RcDropdownMenu.vue +7 -8
- package/rancher-components/RcDropdown/index.ts +2 -0
- package/rancher-components/RcDropdown/useDropdownContext.ts +21 -0
- package/rancher-components/RcDropdown/useDropdownItem.ts +92 -0
- package/rancher-components/RcItemCard/RcItemCard.test.ts +189 -0
- package/rancher-components/RcItemCard/RcItemCard.vue +430 -0
- package/rancher-components/RcItemCard/RcItemCardAction.vue +24 -0
- package/rancher-components/RcItemCard/index.ts +2 -0
- package/rancher-components/StringList/StringList.vue +1 -1
- package/scripts/extension/publish +1 -1
- package/static/loading-indicator.html +1 -1
- package/store/action-menu.js +26 -56
- package/store/auth.js +3 -0
- package/store/catalog.js +85 -25
- package/store/features.js +0 -1
- package/store/growl.js +97 -8
- package/store/i18n.js +1 -1
- package/store/index.js +44 -14
- package/store/notifications.ts +426 -0
- package/store/prefs.js +2 -8
- package/store/slideInPanel.ts +6 -0
- package/store/type-map.js +34 -17
- package/store/type-map.utils.ts +49 -6
- package/store/uiplugins.ts +15 -1
- package/types/fleet.d.ts +60 -1
- package/types/kube/kube-api.ts +34 -0
- package/types/notifications/index.ts +74 -0
- package/types/resources/fleet.d.ts +43 -0
- package/types/resources/pod-security-admission.ts +36 -0
- package/types/resources/settings.d.ts +107 -0
- package/types/resources/userPreferences.d.ts +13 -0
- package/types/shell/index.d.ts +971 -745
- package/types/store/dashboard-store.types.ts +57 -4
- package/types/store/pagination.types.ts +41 -9
- package/types/store/subscribe.types.ts +50 -0
- package/utils/__mocks__/tabbable.js +13 -0
- package/utils/__tests__/back-off.test.ts +354 -0
- package/utils/__tests__/create-yaml.test.ts +235 -0
- package/utils/__tests__/fleet.test.ts +148 -0
- package/utils/__tests__/kontainer.test.ts +19 -0
- package/utils/__tests__/object.test.ts +54 -1
- package/utils/__tests__/string.test.ts +273 -1
- package/utils/__tests__/time.test.ts +31 -0
- package/utils/auth.js +41 -6
- package/utils/back-off.ts +176 -0
- package/utils/cluster.js +24 -20
- package/utils/create-yaml.js +103 -9
- package/utils/crypto/encryption.ts +103 -0
- package/utils/cspAdaptor.ts +51 -0
- package/utils/error.js +0 -5
- package/utils/fleet-types.ts +0 -0
- package/utils/fleet.ts +204 -74
- package/utils/grafana.js +1 -0
- package/utils/kontainer.ts +3 -5
- package/utils/object.js +36 -12
- package/utils/pagination-utils.ts +50 -3
- package/utils/pagination-wrapper.ts +132 -50
- package/utils/perf-setting.utils.ts +28 -0
- package/utils/release-notes.ts +48 -0
- package/utils/selector-typed.ts +210 -0
- package/utils/selector.js +29 -6
- package/utils/settings.ts +4 -1
- package/utils/string.js +24 -0
- package/utils/style.ts +39 -0
- package/utils/{time.js → time.ts} +25 -6
- package/utils/uiplugins.ts +41 -8
- package/utils/v-sphere.ts +5 -1
- package/utils/validators/formRules/__tests__/index.test.ts +76 -6
- package/utils/validators/formRules/index.ts +99 -4
- package/utils/window.js +11 -7
- package/.DS_Store +0 -0
- package/components/AssignTo.vue +0 -199
- package/components/DisableAuthProviderModal.vue +0 -115
- package/components/MoveModal.vue +0 -167
- package/components/PromptChangePassword.vue +0 -123
- package/components/ResourceList/Masthead-btn.vue +0 -225
- package/components/__tests__/ApplicationCard.test.ts +0 -27
- package/components/cards/ApplicationCard.vue +0 -145
- package/components/fleet/FleetBundleResources.vue +0 -86
- package/components/fleet/ForceDirectedTreeChart/chartIcons.js +0 -17
- package/components/formatter/RKETemplateName.vue +0 -37
- package/config/product/legacy.js +0 -62
- package/config/secret.js +0 -14
- package/dialog/SaveAsRKETemplateDialog.vue +0 -139
- package/models/etcdbackup.js +0 -45
- package/pages/auth copy/login.vue +0 -595
- package/pages/auth copy/logout.vue +0 -47
- package/pages/auth copy/setup.vue +0 -523
- package/pages/auth copy/verify.vue +0 -203
- package/pages/c/_cluster/fleet/GitRepoGraphConfig.js +0 -249
- package/pages/c/_cluster/legacy/pages/_page.vue +0 -29
- package/pages/c/_cluster/legacy/project/_page.vue +0 -57
- package/pages/c/_cluster/legacy/project/index.vue +0 -32
- package/pages/c/_cluster/legacy/project/pipelines.vue +0 -96
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { parse } from '@shell/utils/url';
|
|
2
|
+
import { insertAt } from '@shell/utils/array';
|
|
3
|
+
import { set } from '@shell/utils/object';
|
|
4
|
+
import { SOURCE_TYPE } from '@shell/config/product/fleet';
|
|
5
|
+
import FleetUtils from '@shell/utils/fleet';
|
|
6
|
+
import { FLEET } from '@shell/config/types';
|
|
7
|
+
import { FLEET as FLEET_ANNOTATIONS } from '@shell/config/labels-annotations';
|
|
8
|
+
import FleetApplication from '@shell/models/fleet-application';
|
|
9
|
+
|
|
10
|
+
export default class HelmOp extends FleetApplication {
|
|
11
|
+
applyDefaults() {
|
|
12
|
+
const spec = this.spec || {};
|
|
13
|
+
const meta = this.metadata || {};
|
|
14
|
+
|
|
15
|
+
meta.namespace = this.$rootGetters['workspace'];
|
|
16
|
+
|
|
17
|
+
spec.helm = spec.helm || {};
|
|
18
|
+
|
|
19
|
+
spec['correctDrift'] = { enabled: false };
|
|
20
|
+
|
|
21
|
+
set(this, 'spec', spec);
|
|
22
|
+
set(this, 'metadata', meta);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
get _availableActions() {
|
|
26
|
+
const out = super._availableActions;
|
|
27
|
+
|
|
28
|
+
insertAt(out, 0, {
|
|
29
|
+
action: 'pause',
|
|
30
|
+
label: this.t('fleet.helmOp.actions.pause.label'),
|
|
31
|
+
icon: 'icon icon-pause',
|
|
32
|
+
bulkable: true,
|
|
33
|
+
enabled: !!this.links.update && !this.spec?.paused
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
insertAt(out, 1, {
|
|
37
|
+
action: 'unpause',
|
|
38
|
+
label: this.t('fleet.helmOp.actions.unpause.label'),
|
|
39
|
+
icon: 'icon icon-play',
|
|
40
|
+
bulkable: true,
|
|
41
|
+
enabled: !!this.links.update && this.spec?.paused === true
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
insertAt(out, 5, { divider: true });
|
|
45
|
+
|
|
46
|
+
return out;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
get dashboardIcon() {
|
|
50
|
+
return FleetUtils.dashboardIcons[FLEET.HELM_OP];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
get resourceIcon() {
|
|
54
|
+
return FleetUtils.resourceIcons[FLEET.HELM_OP];
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
github(value) {
|
|
58
|
+
const url = (value || '');
|
|
59
|
+
|
|
60
|
+
const matchHttps = url.match(FleetUtils.GIT_HTTPS_REGEX);
|
|
61
|
+
|
|
62
|
+
if (matchHttps) {
|
|
63
|
+
return matchHttps[1];
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const matchSSH = url.match(FleetUtils.GIT_SSH_REGEX);
|
|
67
|
+
|
|
68
|
+
if (matchSSH) {
|
|
69
|
+
return FleetUtils.parseSSHUrl(matchSSH[0]).repoPath;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
sourceDisplay(repo) {
|
|
76
|
+
if (!repo) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const github = this.github(repo);
|
|
81
|
+
|
|
82
|
+
if (github) {
|
|
83
|
+
return github;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
repo = repo.replace(/.git$/, '');
|
|
87
|
+
repo = repo.replace(/^https:\/\//, '');
|
|
88
|
+
repo = repo.replace(/\/+$/, '');
|
|
89
|
+
|
|
90
|
+
return repo;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Source type examples:
|
|
95
|
+
*
|
|
96
|
+
* tarball:
|
|
97
|
+
* chart: https://github.com/rancher/fleet-helm-charts/releases/download/fleet-0.12.1-beta.2/fleet-0.12.1-beta.2.tgz
|
|
98
|
+
* repo:
|
|
99
|
+
* repo: https://rancher.github.io/fleet-helm-charts/
|
|
100
|
+
* chart: fleet-agent
|
|
101
|
+
* version: 0.12.1-beta.2
|
|
102
|
+
* oci:
|
|
103
|
+
* repo: oci://ghcr.io/rancher/fleet-test-configmap-chart
|
|
104
|
+
* version: the-tag
|
|
105
|
+
*/
|
|
106
|
+
get sourceType() {
|
|
107
|
+
if (this.spec.helm?.repo?.startsWith('oci://')) {
|
|
108
|
+
return SOURCE_TYPE.OCI;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (this.spec.helm?.repo && this.spec.helm?.chart) {
|
|
112
|
+
return SOURCE_TYPE.REPO;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (this.spec.helm?.chart) {
|
|
116
|
+
return SOURCE_TYPE.TARBALL;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
get source() {
|
|
123
|
+
let value = '';
|
|
124
|
+
|
|
125
|
+
switch (this.sourceType) {
|
|
126
|
+
case SOURCE_TYPE.REPO:
|
|
127
|
+
value = this.spec.helm?.repo || '';
|
|
128
|
+
break;
|
|
129
|
+
case SOURCE_TYPE.OCI: {
|
|
130
|
+
const parsed = parse(this.spec.helm?.repo || '');
|
|
131
|
+
|
|
132
|
+
value = parsed?.host ? `oci://${ parsed.host }` : '';
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
case SOURCE_TYPE.TARBALL:
|
|
136
|
+
value = this.spec.helm?.chart || '';
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const matchHttps = value.match(FleetUtils.HTTP_REGEX);
|
|
140
|
+
const matchSSH = value.match(FleetUtils.GIT_SSH_REGEX);
|
|
141
|
+
|
|
142
|
+
if (matchSSH) {
|
|
143
|
+
const { sshUserAndHost, repoPath } = FleetUtils.parseSSHUrl(matchSSH[0]);
|
|
144
|
+
|
|
145
|
+
value = `https://${ sshUserAndHost.replace('git@', '') }/${ repoPath }`;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return {
|
|
149
|
+
value,
|
|
150
|
+
display: this.sourceDisplay(value),
|
|
151
|
+
icon: 'icon icon-application',
|
|
152
|
+
showLink: !!(matchHttps || matchSSH)
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
get sourceSub() {
|
|
157
|
+
// Version label
|
|
158
|
+
const semanticVersion = this.spec.helm?.version || '';
|
|
159
|
+
const installedVersion = this.status?.version || '';
|
|
160
|
+
|
|
161
|
+
let labelVersion = semanticVersion || installedVersion || '';
|
|
162
|
+
|
|
163
|
+
if (semanticVersion && installedVersion && semanticVersion !== installedVersion) {
|
|
164
|
+
labelVersion = `${ semanticVersion } -> ${ installedVersion }`;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// Chart label
|
|
168
|
+
let chart = '';
|
|
169
|
+
|
|
170
|
+
switch (this.sourceType) {
|
|
171
|
+
case SOURCE_TYPE.REPO:
|
|
172
|
+
chart = this.spec.helm.chart || '';
|
|
173
|
+
break;
|
|
174
|
+
case SOURCE_TYPE.OCI: {
|
|
175
|
+
const parsed = parse(this.spec.helm.repo || '');
|
|
176
|
+
|
|
177
|
+
chart = parsed?.path ? parsed?.path.substring(1) : '';
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Concat chart label and version label
|
|
183
|
+
let value = chart || labelVersion || '';
|
|
184
|
+
|
|
185
|
+
if (chart && labelVersion) {
|
|
186
|
+
value = `${ chart } : ${ labelVersion }`;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
return {
|
|
190
|
+
value,
|
|
191
|
+
display: value,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
get bundles() {
|
|
196
|
+
return this.$getters['matching'](FLEET.BUNDLE, { [FLEET_ANNOTATIONS.HELM_NAME]: this.name }, this.namespace);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
get bundleDeployments() {
|
|
200
|
+
return this.$getters['matching'](FLEET.BUNDLE_DEPLOYMENT, { [FLEET_ANNOTATIONS.HELM_NAME]: this.name });
|
|
201
|
+
}
|
|
202
|
+
}
|
|
@@ -106,10 +106,6 @@ export default class MgmtCluster extends SteveModel {
|
|
|
106
106
|
return null;
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
get rkeTemplateVersion() {
|
|
110
|
-
return this.spec?.clusterTemplateRevisionName;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
109
|
get providerForEmberParam() {
|
|
114
110
|
// Ember wants one word called provider to tell what component to show, but has much indirect mapping to figure out what it is.
|
|
115
111
|
let provider;
|
|
@@ -136,14 +132,6 @@ export default class MgmtCluster extends SteveModel {
|
|
|
136
132
|
}
|
|
137
133
|
|
|
138
134
|
get emberEditPath() {
|
|
139
|
-
let clusterTemplateRevision;
|
|
140
|
-
|
|
141
|
-
// If the RKE1 cluster is created from an RKE template, we need
|
|
142
|
-
// to get the template version to pass into the Ember UI for
|
|
143
|
-
// the iFramed edit cluster form
|
|
144
|
-
if (this.rkeTemplateVersion) {
|
|
145
|
-
clusterTemplateRevision = this.rkeTemplateVersion;
|
|
146
|
-
}
|
|
147
135
|
const provider = this.providerForEmberParam;
|
|
148
136
|
|
|
149
137
|
// Avoid passing falsy values as query parameters
|
|
@@ -153,10 +141,6 @@ export default class MgmtCluster extends SteveModel {
|
|
|
153
141
|
qp['provider'] = provider;
|
|
154
142
|
}
|
|
155
143
|
|
|
156
|
-
if (clusterTemplateRevision) {
|
|
157
|
-
qp['clusterTemplateRevision'] = clusterTemplateRevision;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
144
|
// Copied out of https://github.com/rancher/ui/blob/20f56dc54c4fc09b5f911e533cb751c13609adaf/app/models/cluster.js#L844
|
|
161
145
|
if ( provider === 'import' && isEmpty(this.eksConfig) && isEmpty(this.gkeConfig) ) {
|
|
162
146
|
qp.importProvider = 'other';
|
|
@@ -168,10 +152,6 @@ export default class MgmtCluster extends SteveModel {
|
|
|
168
152
|
qp.importProvider = KONTAINER_TO_DRIVER[provider];
|
|
169
153
|
}
|
|
170
154
|
|
|
171
|
-
if ( this.clusterTemplateRevisionId ) {
|
|
172
|
-
qp.clusterTemplateRevision = this.clusterTemplateRevisionId;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
155
|
const path = addParams(`/c/${ escape(this.id) }/edit`, qp);
|
|
176
156
|
|
|
177
157
|
return path;
|
|
@@ -51,6 +51,12 @@ export default class Feature extends HybridModel {
|
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
toggleFeatureFlag(resources = this) {
|
|
54
|
-
this.$dispatch('
|
|
54
|
+
this.$dispatch('promptModal', {
|
|
55
|
+
component: 'FeatureFlagListDialog',
|
|
56
|
+
resources: !Array.isArray(resources) ? [resources] : resources,
|
|
57
|
+
modalWidth: '450',
|
|
58
|
+
height: 'auto',
|
|
59
|
+
styles: 'max-height: 100vh;'
|
|
60
|
+
});
|
|
55
61
|
}
|
|
56
62
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { COUNT, FLEET, NORMAN } from '@shell/config/types';
|
|
2
2
|
import { filterBy } from '@shell/utils/array';
|
|
3
3
|
import HybridModel from '@shell/plugins/steve/hybrid-class';
|
|
4
|
+
import { FLEET as FLEET_ANNOTATIONS } from '@shell/config/labels-annotations';
|
|
4
5
|
|
|
5
6
|
export default class Workspace extends HybridModel {
|
|
6
7
|
get isLocal() {
|
|
@@ -14,7 +15,8 @@ export default class Workspace extends HybridModel {
|
|
|
14
15
|
const out = {
|
|
15
16
|
clusterGroups: summary[FLEET.CLUSTER_GROUP]?.namespaces?.[name]?.count || 0,
|
|
16
17
|
clusters: summary[FLEET.CLUSTER]?.namespaces?.[name]?.count || 0,
|
|
17
|
-
gitRepos: summary[FLEET.GIT_REPO]?.namespaces?.[name]?.count || 0
|
|
18
|
+
gitRepos: summary[FLEET.GIT_REPO]?.namespaces?.[name]?.count || 0,
|
|
19
|
+
helmOps: summary[FLEET.HELM_OP]?.namespaces?.[name]?.count || 0
|
|
18
20
|
};
|
|
19
21
|
|
|
20
22
|
return out;
|
|
@@ -41,6 +43,13 @@ export default class Workspace extends HybridModel {
|
|
|
41
43
|
return forWorkspace;
|
|
42
44
|
}
|
|
43
45
|
|
|
46
|
+
get helmOps() {
|
|
47
|
+
const all = this.$getters['all'](FLEET.HELM_OP);
|
|
48
|
+
const forWorkspace = filterBy(all, 'namespace', this.id);
|
|
49
|
+
|
|
50
|
+
return forWorkspace;
|
|
51
|
+
}
|
|
52
|
+
|
|
44
53
|
get basicNorman() {
|
|
45
54
|
if (this.id) {
|
|
46
55
|
return this.$dispatch(`rancher/find`, { id: this.id, type: NORMAN.FLEET_WORKSPACES }, { root: true });
|
|
@@ -87,4 +96,8 @@ export default class Workspace extends HybridModel {
|
|
|
87
96
|
get confirmRemove() {
|
|
88
97
|
return true;
|
|
89
98
|
}
|
|
99
|
+
|
|
100
|
+
get systemAnnotations() {
|
|
101
|
+
return [FLEET_ANNOTATIONS.OCI_STORAGE_SECRET_DEFAULT];
|
|
102
|
+
}
|
|
90
103
|
}
|
|
@@ -4,37 +4,22 @@ import {
|
|
|
4
4
|
} from '@shell/config/types';
|
|
5
5
|
import { NAME as EXPLORER } from '@shell/config/product/explorer';
|
|
6
6
|
import { listNodeRoles } from '@shell/models/cluster/node';
|
|
7
|
-
import { insertAt } from '@shell/utils/array';
|
|
8
7
|
import { downloadUrl } from '@shell/utils/download';
|
|
9
8
|
import findLast from 'lodash/findLast';
|
|
10
9
|
import HybridModel from '@shell/plugins/steve/hybrid-class';
|
|
11
10
|
import { notOnlyOfRole } from '@shell/models/cluster.x-k8s.io.machine';
|
|
12
11
|
|
|
12
|
+
const RKE1_ALLOWED_ACTIONS = [
|
|
13
|
+
'goToViewYaml',
|
|
14
|
+
'download',
|
|
15
|
+
'viewInApi'
|
|
16
|
+
];
|
|
17
|
+
|
|
13
18
|
export default class MgmtNode extends HybridModel {
|
|
14
19
|
get _availableActions() {
|
|
15
20
|
const out = super._availableActions;
|
|
16
21
|
|
|
17
|
-
|
|
18
|
-
action: 'downloadKeys',
|
|
19
|
-
enabled: !!this.norman?.links?.nodeConfig,
|
|
20
|
-
icon: 'icon icon-fw icon-download',
|
|
21
|
-
label: this.t('node.actions.downloadNodeConfig'),
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
const scaleDown = {
|
|
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,
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
insertAt(out, 0, { divider: true });
|
|
34
|
-
insertAt(out, 0, downloadKeys);
|
|
35
|
-
insertAt(out, 0, scaleDown);
|
|
36
|
-
|
|
37
|
-
return out;
|
|
22
|
+
return out.filter((a) => a.divider || RKE1_ALLOWED_ACTIONS.includes(a.action));
|
|
38
23
|
}
|
|
39
24
|
|
|
40
25
|
get kubeNodeName() {
|
|
@@ -3,7 +3,19 @@ import { sortBy } from '@shell/utils/sort';
|
|
|
3
3
|
import HybridModel from '@shell/plugins/steve/hybrid-class';
|
|
4
4
|
import { notOnlyOfRole } from '@shell/models/cluster.x-k8s.io.machine';
|
|
5
5
|
|
|
6
|
+
const RKE1_ALLOWED_ACTIONS = [
|
|
7
|
+
'goToViewYaml',
|
|
8
|
+
'download',
|
|
9
|
+
'viewInApi'
|
|
10
|
+
];
|
|
11
|
+
|
|
6
12
|
export default class MgmtNodePool extends HybridModel {
|
|
13
|
+
get _availableActions() {
|
|
14
|
+
const out = super._availableActions;
|
|
15
|
+
|
|
16
|
+
return out.filter((a) => a.divider || RKE1_ALLOWED_ACTIONS.includes(a.action));
|
|
17
|
+
}
|
|
18
|
+
|
|
7
19
|
get nodeTemplateId() {
|
|
8
20
|
return (this.spec?.nodeTemplateName || '').replace(/:/, '/');
|
|
9
21
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import SteveModel from '@shell/plugins/steve/steve-class';
|
|
2
|
+
|
|
3
|
+
export default class OIDCClient extends SteveModel {
|
|
4
|
+
get details() {
|
|
5
|
+
return [
|
|
6
|
+
...this._details, {
|
|
7
|
+
label: this.t('oidcclient.redirectURIs.label'),
|
|
8
|
+
content: this.spec.redirectURIs?.join(', ')
|
|
9
|
+
}, {
|
|
10
|
+
label: this.t('oidcclient.refreshTokenExpirationSeconds.detailLabel'),
|
|
11
|
+
content: this.spec.refreshTokenExpirationSeconds
|
|
12
|
+
}, {
|
|
13
|
+
label: this.t('oidcclient.tokenExpirationSeconds.detailLabel'),
|
|
14
|
+
content: this.spec.tokenExpirationSeconds
|
|
15
|
+
}
|
|
16
|
+
];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -2,7 +2,6 @@ import { ALLOWED_SETTINGS } from '@shell/config/settings';
|
|
|
2
2
|
import HybridModel from '@shell/plugins/steve/hybrid-class';
|
|
3
3
|
import { isServerUrl } from '@shell/utils/validators/setting';
|
|
4
4
|
import { HARVESTER_NAME as HARVESTER } from '@shell/config/features';
|
|
5
|
-
import { harvester2cloud } from '@shell/utils/router'
|
|
6
5
|
import {
|
|
7
6
|
_EDIT,
|
|
8
7
|
_UNFLAG,
|
package/models/namespace.js
CHANGED
|
@@ -11,6 +11,11 @@ import { HARVESTER_NAME as HARVESTER } from '@shell/config/features';
|
|
|
11
11
|
import { hasPSALabels, getPSATooltipsDescription, getPSALabels } from '@shell/utils/pod-security-admission';
|
|
12
12
|
import { PSAIconsDisplay, PSALabelsNamespaceVersion } from '@shell/config/pod-security-admission';
|
|
13
13
|
|
|
14
|
+
/**
|
|
15
|
+
* obscure namespaces are reserved and have special meaning if they're also classed as `system`
|
|
16
|
+
*
|
|
17
|
+
* (by default hidden from user given by default `show dynamic namespaces` preference is disabled and `user namespaces` filter is on)
|
|
18
|
+
*/
|
|
14
19
|
const OBSCURE_NAMESPACE_PREFIX = [
|
|
15
20
|
'c-', // cluster namespace
|
|
16
21
|
|
|
@@ -73,7 +78,13 @@ export default class Namespace extends SteveModel {
|
|
|
73
78
|
}
|
|
74
79
|
|
|
75
80
|
move(resources = this) {
|
|
76
|
-
this.$dispatch('
|
|
81
|
+
this.$dispatch('promptModal', {
|
|
82
|
+
component: 'MoveNamespaceDialog',
|
|
83
|
+
resources: !Array.isArray(resources) ? [resources] : resources,
|
|
84
|
+
modalWidth: '440',
|
|
85
|
+
height: 'auto',
|
|
86
|
+
styles: 'max-height: 100vh;'
|
|
87
|
+
});
|
|
77
88
|
}
|
|
78
89
|
|
|
79
90
|
get isSystem() {
|
|
@@ -12,6 +12,15 @@ import { HARVESTER_NAME as HARVESTER } from '@shell/config/features';
|
|
|
12
12
|
import { CAPI as CAPI_ANNOTATIONS, NODE_ARCHITECTURE } from '@shell/config/labels-annotations';
|
|
13
13
|
import { KEV1 } from '@shell/models/management.cattle.io.kontainerdriver';
|
|
14
14
|
|
|
15
|
+
const RKE1_ALLOWED_ACTIONS = [
|
|
16
|
+
'promptRemove',
|
|
17
|
+
'openShell',
|
|
18
|
+
'downloadKubeConfig',
|
|
19
|
+
'copyKubeConfig',
|
|
20
|
+
'download',
|
|
21
|
+
'viewInApi'
|
|
22
|
+
];
|
|
23
|
+
|
|
15
24
|
/**
|
|
16
25
|
* Class representing Cluster resource.
|
|
17
26
|
* @extends SteveModel
|
|
@@ -41,17 +50,6 @@ export default class ProvCluster extends SteveModel {
|
|
|
41
50
|
},
|
|
42
51
|
].filter((x) => !!x.content);
|
|
43
52
|
|
|
44
|
-
// RKE Template details
|
|
45
|
-
const rkeTemplate = this.rkeTemplate;
|
|
46
|
-
|
|
47
|
-
if (rkeTemplate) {
|
|
48
|
-
out.push({
|
|
49
|
-
label: this.t('cluster.detail.rkeTemplate'),
|
|
50
|
-
formatter: 'RKETemplateName',
|
|
51
|
-
content: rkeTemplate,
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
|
|
55
53
|
if (!this.machineProvider) {
|
|
56
54
|
out.splice(1, 1);
|
|
57
55
|
|
|
@@ -87,6 +85,15 @@ export default class ProvCluster extends SteveModel {
|
|
|
87
85
|
};
|
|
88
86
|
}
|
|
89
87
|
|
|
88
|
+
get canEdit() {
|
|
89
|
+
// If the cluster is a KEV1 cluster or Harvester cluster then prevent edit
|
|
90
|
+
if (this.isKev1 || this.isHarvester) {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return super.canEdit;
|
|
95
|
+
}
|
|
96
|
+
|
|
90
97
|
get _availableActions() {
|
|
91
98
|
const out = super._availableActions;
|
|
92
99
|
const isLocal = this.mgmt?.isLocal;
|
|
@@ -103,18 +110,7 @@ export default class ProvCluster extends SteveModel {
|
|
|
103
110
|
|
|
104
111
|
const canEditRKE2cluster = this.isRke2 && ready && this.canUpdate;
|
|
105
112
|
|
|
106
|
-
const canSnapshot = ready &&
|
|
107
|
-
|
|
108
|
-
const clusterTemplatesSchema = this.$getters['schemaFor']('management.cattle.io.clustertemplate');
|
|
109
|
-
let canUpdateClusterTemplate = false;
|
|
110
|
-
|
|
111
|
-
if (clusterTemplatesSchema && (clusterTemplatesSchema.resourceMethods?.includes('blocked-PUT') || clusterTemplatesSchema.resourceMethods?.includes('PUT'))) {
|
|
112
|
-
canUpdateClusterTemplate = true;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
const normanClusterSaveTemplateAction = !!this.normanCluster?.actions?.saveAsTemplate;
|
|
116
|
-
|
|
117
|
-
const canSaveRKETemplate = this.isRke1 && this.mgmt?.status?.driver === 'rancherKubernetesEngine' && !this.mgmt?.spec?.clusterTemplateName && this.hasLink('update') && canUpdateClusterTemplate && normanClusterSaveTemplateAction;
|
|
113
|
+
const canSnapshot = ready && this.isRke2 && this.canUpdate;
|
|
118
114
|
|
|
119
115
|
const actions = [
|
|
120
116
|
// Note: Actions are not supported in the Steve API, so we check
|
|
@@ -158,12 +154,7 @@ export default class ProvCluster extends SteveModel {
|
|
|
158
154
|
action: 'rotateEncryptionKey',
|
|
159
155
|
label: this.$rootGetters['i18n/t']('nav.rotateEncryptionKeys'),
|
|
160
156
|
icon: 'icon icon-refresh',
|
|
161
|
-
enabled: canEditRKE2cluster
|
|
162
|
-
}, {
|
|
163
|
-
action: 'saveAsRKETemplate',
|
|
164
|
-
label: this.$rootGetters['i18n/t']('nav.saveAsRKETemplate'),
|
|
165
|
-
icon: 'icon icon-folder',
|
|
166
|
-
enabled: canSaveRKETemplate,
|
|
157
|
+
enabled: canEditRKE2cluster
|
|
167
158
|
}, { divider: true }];
|
|
168
159
|
|
|
169
160
|
// Harvester Cluster 1:1 Harvester Cloud Cred
|
|
@@ -181,8 +172,8 @@ export default class ProvCluster extends SteveModel {
|
|
|
181
172
|
|
|
182
173
|
const all = actions.concat(out);
|
|
183
174
|
|
|
184
|
-
// If the cluster is a KEV1 cluster then prevent edit
|
|
185
|
-
if (this.isKev1) {
|
|
175
|
+
// If the cluster is a KEV1 cluster or Harvester cluster then prevent edit
|
|
176
|
+
if (this.isKev1 || this.isHarvester) {
|
|
186
177
|
const edit = all.find((action) => action.action === 'goToEdit');
|
|
187
178
|
|
|
188
179
|
if (edit) {
|
|
@@ -190,6 +181,15 @@ export default class ProvCluster extends SteveModel {
|
|
|
190
181
|
}
|
|
191
182
|
}
|
|
192
183
|
|
|
184
|
+
// If RKE1, then remove most of the actions
|
|
185
|
+
if (this.isRke1) {
|
|
186
|
+
all.forEach((action) => {
|
|
187
|
+
if (!action.divider && !RKE1_ALLOWED_ACTIONS.includes(action.action)) {
|
|
188
|
+
action.enabled = false;
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
|
|
193
193
|
// If we have a helper that wants to modify the available actions, let it do it
|
|
194
194
|
if (this.customProvisionerHelper?.availableActions) {
|
|
195
195
|
// Provider can either modify the provided list or return one of its own
|
|
@@ -729,7 +729,7 @@ export default class ProvCluster extends SteveModel {
|
|
|
729
729
|
async copyKubeConfig() {
|
|
730
730
|
await this.mgmt?.copyKubeConfig();
|
|
731
731
|
|
|
732
|
-
this.$dispatch('growl/
|
|
732
|
+
this.$dispatch('growl/info', {
|
|
733
733
|
title: this.t('cluster.copiedConfig'),
|
|
734
734
|
timeout: 3000,
|
|
735
735
|
}, { root: true });
|
|
@@ -746,7 +746,7 @@ export default class ProvCluster extends SteveModel {
|
|
|
746
746
|
async snapshotAction() {
|
|
747
747
|
try {
|
|
748
748
|
await this.takeSnapshot();
|
|
749
|
-
this.$dispatch('growl/
|
|
749
|
+
this.$dispatch('growl/info', {
|
|
750
750
|
title: this.$rootGetters['i18n/t']('cluster.snapshot.successTitle', { name: this.nameDisplay }),
|
|
751
751
|
message: this.$rootGetters['i18n/t']('cluster.snapshot.successMessage', { name: this.nameDisplay })
|
|
752
752
|
}, { root: true });
|
|
@@ -766,7 +766,7 @@ export default class ProvCluster extends SteveModel {
|
|
|
766
766
|
const successful = res.filter( (x) => x.status === 'fulfilled').length;
|
|
767
767
|
|
|
768
768
|
if ( successful ) {
|
|
769
|
-
this.$dispatch('growl/
|
|
769
|
+
this.$dispatch('growl/info', {
|
|
770
770
|
title: this.$rootGetters['i18n/t']('cluster.snapshot.bulkSuccessTitle'),
|
|
771
771
|
message: this.$rootGetters['i18n/t']('cluster.snapshot.bulkSuccessMessage', { count: successful })
|
|
772
772
|
}, { root: true });
|
|
@@ -813,13 +813,6 @@ export default class ProvCluster extends SteveModel {
|
|
|
813
813
|
this.$dispatch('promptRestore', [resource]);
|
|
814
814
|
}
|
|
815
815
|
|
|
816
|
-
saveAsRKETemplate(cluster = this) {
|
|
817
|
-
this.$dispatch('promptModal', {
|
|
818
|
-
componentProps: { cluster },
|
|
819
|
-
component: 'SaveAsRKETemplateDialog'
|
|
820
|
-
});
|
|
821
|
-
}
|
|
822
|
-
|
|
823
816
|
rotateCertificates(cluster = this) {
|
|
824
817
|
this.$dispatch('promptModal', {
|
|
825
818
|
componentProps: { cluster },
|
|
@@ -839,62 +832,6 @@ export default class ProvCluster extends SteveModel {
|
|
|
839
832
|
return this._stateObj;
|
|
840
833
|
}
|
|
841
834
|
|
|
842
|
-
get rkeTemplate() {
|
|
843
|
-
if (!this.isRke1 || !this.mgmt) {
|
|
844
|
-
// Not an RKE! cluster or no management cluster available
|
|
845
|
-
return false;
|
|
846
|
-
}
|
|
847
|
-
|
|
848
|
-
if (!this.mgmt.spec?.clusterTemplateRevisionName) {
|
|
849
|
-
// Cluster does not use an RKE template
|
|
850
|
-
return false;
|
|
851
|
-
}
|
|
852
|
-
|
|
853
|
-
const clusterTemplateName = this.mgmt.spec.clusterTemplateName.replace(':', '/');
|
|
854
|
-
const clusterTemplateRevisionName = this.mgmt.spec.clusterTemplateRevisionName.replace(':', '/');
|
|
855
|
-
const template = this.$rootGetters['management/all'](MANAGEMENT.RKE_TEMPLATE).find((t) => t.id === clusterTemplateName);
|
|
856
|
-
const revision = this.$rootGetters['management/all'](MANAGEMENT.RKE_TEMPLATE_REVISION).find((t) => t.spec.enabled && t.id === clusterTemplateRevisionName);
|
|
857
|
-
|
|
858
|
-
if (!template || !revision) {
|
|
859
|
-
return false;
|
|
860
|
-
}
|
|
861
|
-
|
|
862
|
-
return {
|
|
863
|
-
displayName: `${ template.spec?.displayName }/${ revision.spec?.displayName }`,
|
|
864
|
-
upgrade: this.rkeTemplateUpgrade,
|
|
865
|
-
template,
|
|
866
|
-
revision,
|
|
867
|
-
};
|
|
868
|
-
}
|
|
869
|
-
|
|
870
|
-
get rkeTemplateUpgrade() {
|
|
871
|
-
if (!this.isRke1 || !this.mgmt) {
|
|
872
|
-
// Not an RKE! cluster or no management cluster available
|
|
873
|
-
return false;
|
|
874
|
-
}
|
|
875
|
-
|
|
876
|
-
if (!this.mgmt.spec?.clusterTemplateRevisionName) {
|
|
877
|
-
// Cluster does not use an RKE template
|
|
878
|
-
return false;
|
|
879
|
-
}
|
|
880
|
-
|
|
881
|
-
const clusterTemplateRevisionName = this.mgmt.spec.clusterTemplateRevisionName.replace(':', '/');
|
|
882
|
-
|
|
883
|
-
// Get all of the template revisions for this template
|
|
884
|
-
const revisions = this.$rootGetters['management/all'](MANAGEMENT.RKE_TEMPLATE_REVISION).filter((t) => t.spec.enabled && t.spec.clusterTemplateName === this.mgmt.spec.clusterTemplateName);
|
|
885
|
-
|
|
886
|
-
if (revisions.length <= 1) {
|
|
887
|
-
// Only one template revision
|
|
888
|
-
return false;
|
|
889
|
-
}
|
|
890
|
-
|
|
891
|
-
revisions.sort((a, b) => {
|
|
892
|
-
return parseInt(a.metadata.resourceVersion, 10) - parseInt(b.metadata.resourceVersion, 10);
|
|
893
|
-
}).reverse();
|
|
894
|
-
|
|
895
|
-
return revisions[0].id !== clusterTemplateRevisionName ? revisions[0].spec?.displayName : false;
|
|
896
|
-
}
|
|
897
|
-
|
|
898
835
|
get _stateObj() {
|
|
899
836
|
if (!this.isRke2) {
|
|
900
837
|
return this.mgmt?.stateObj || this.metadata?.state;
|
|
@@ -1057,6 +994,28 @@ export default class ProvCluster extends SteveModel {
|
|
|
1057
994
|
return null;
|
|
1058
995
|
}
|
|
1059
996
|
|
|
997
|
+
/**
|
|
998
|
+
* Gets the options for fields that should be commented out in the YAML representation
|
|
999
|
+
* of the model. This is particularly useful for conditionally commenting out certain
|
|
1000
|
+
* fields based on the model's configuration.
|
|
1001
|
+
*
|
|
1002
|
+
* @returns {null | Array.<{path: string, key: string}>}
|
|
1003
|
+
* - `path`: A dot-separated string indicating the path to the object containing the key.
|
|
1004
|
+
* - `key`: The specific key within the object at the given path that should be commented out.
|
|
1005
|
+
*/
|
|
1006
|
+
get commentFieldsOptions() {
|
|
1007
|
+
if ( this.isRke2 ) {
|
|
1008
|
+
return [
|
|
1009
|
+
{
|
|
1010
|
+
path: 'spec.rkeConfig.machineGlobalConfig',
|
|
1011
|
+
key: 'profile'
|
|
1012
|
+
}
|
|
1013
|
+
];
|
|
1014
|
+
}
|
|
1015
|
+
|
|
1016
|
+
return null;
|
|
1017
|
+
}
|
|
1018
|
+
|
|
1060
1019
|
// JSON Paths that should be folded in the YAML editor by default
|
|
1061
1020
|
get yamlFolding() {
|
|
1062
1021
|
return [
|
|
@@ -1088,4 +1047,8 @@ export default class ProvCluster extends SteveModel {
|
|
|
1088
1047
|
|
|
1089
1048
|
return expireData?.expired || expireData?.expiring;
|
|
1090
1049
|
}
|
|
1050
|
+
|
|
1051
|
+
get disableResourceDetailDrawerConfigTab() {
|
|
1052
|
+
return !!this.isHarvester;
|
|
1053
|
+
}
|
|
1091
1054
|
}
|