@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
package/store/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { BACK_TO } from '@shell/config/local-storage';
|
|
2
2
|
import { setBrand, setVendor } from '@shell/config/private-label';
|
|
3
3
|
import { NAME as EXPLORER } from '@shell/config/product/explorer';
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
LOGGED_OUT, IS_SSO, TIMED_OUT, UPGRADED, _FLAGGED
|
|
6
|
+
} from '@shell/config/query-params';
|
|
5
7
|
import { SETTING } from '@shell/config/settings';
|
|
6
8
|
import {
|
|
7
9
|
COUNT,
|
|
@@ -35,6 +37,7 @@ import { addParam } from '@shell/utils/url';
|
|
|
35
37
|
import semver from 'semver';
|
|
36
38
|
import { STORE, BLANK_CLUSTER } from '@shell/store/store-types';
|
|
37
39
|
import { isDevBuild } from '@shell/utils/version';
|
|
40
|
+
import { markRaw } from 'vue';
|
|
38
41
|
|
|
39
42
|
// Disables strict mode for all store instances to prevent warning about changing state outside of mutations
|
|
40
43
|
// because it's more efficient to do that sometimes.
|
|
@@ -144,7 +147,7 @@ const getReadOnlyActiveNamespaces = (namespaces, activeNamespaces) => {
|
|
|
144
147
|
};
|
|
145
148
|
|
|
146
149
|
/**
|
|
147
|
-
* Collect all the namespaces grouped by category, project or single pick
|
|
150
|
+
* Collect all the namespaces for the current cluster grouped by category, project or single pick
|
|
148
151
|
* @returns Record<string, true>
|
|
149
152
|
*/
|
|
150
153
|
const getActiveNamespaces = (state, getters, readonly = false) => {
|
|
@@ -238,11 +241,16 @@ export const state = () => {
|
|
|
238
241
|
error: null,
|
|
239
242
|
cameFromError: false,
|
|
240
243
|
pageActions: [],
|
|
244
|
+
pageActionHandler: null,
|
|
241
245
|
serverVersion: null,
|
|
242
246
|
systemNamespaces: [],
|
|
243
247
|
isSingleProduct: undefined,
|
|
244
248
|
isRancherInHarvester: false,
|
|
245
|
-
targetRoute: null
|
|
249
|
+
targetRoute: null,
|
|
250
|
+
rootProduct: undefined,
|
|
251
|
+
$router: markRaw(undefined),
|
|
252
|
+
$route: markRaw(undefined),
|
|
253
|
+
$plugin: markRaw(undefined),
|
|
246
254
|
};
|
|
247
255
|
};
|
|
248
256
|
|
|
@@ -305,6 +313,13 @@ export const getters = {
|
|
|
305
313
|
return out;
|
|
306
314
|
},
|
|
307
315
|
|
|
316
|
+
// Get the root product - this is either the current product or the current product's root (if set)
|
|
317
|
+
// Used for navigation and other areas that don't want to re-evaluate when the product changes, but is still within
|
|
318
|
+
// a common root product
|
|
319
|
+
rootProduct(state) {
|
|
320
|
+
return state.rootProduct;
|
|
321
|
+
},
|
|
322
|
+
|
|
308
323
|
getStoreNameByProductId(state) {
|
|
309
324
|
const products = state['type-map']?.products;
|
|
310
325
|
|
|
@@ -328,13 +343,9 @@ export const getters = {
|
|
|
328
343
|
},
|
|
329
344
|
|
|
330
345
|
isExplorer(state, getters) {
|
|
331
|
-
const product = getters.
|
|
332
|
-
|
|
333
|
-
if ( !product ) {
|
|
334
|
-
return false;
|
|
335
|
-
}
|
|
346
|
+
const product = getters.rootProduct;
|
|
336
347
|
|
|
337
|
-
return product
|
|
348
|
+
return product?.name === EXPLORER;
|
|
338
349
|
},
|
|
339
350
|
|
|
340
351
|
defaultClusterId(state, getters) {
|
|
@@ -394,6 +405,9 @@ export const getters = {
|
|
|
394
405
|
return !filters[0].startsWith(NAMESPACE_FILTER_NS_FULL_PREFIX);
|
|
395
406
|
},
|
|
396
407
|
|
|
408
|
+
/**
|
|
409
|
+
* Namespace/Project filter for the current cluster
|
|
410
|
+
*/
|
|
397
411
|
namespaceFilters(state) {
|
|
398
412
|
const filters = state.namespaceFilters.filter((x) => !!x && !`${ x }`.startsWith(NAMESPACED_PREFIX));
|
|
399
413
|
|
|
@@ -446,6 +460,9 @@ export const getters = {
|
|
|
446
460
|
return state.namespaceFilters;
|
|
447
461
|
},
|
|
448
462
|
|
|
463
|
+
/**
|
|
464
|
+
* All namespaces in the current cluster
|
|
465
|
+
*/
|
|
449
466
|
allNamespaces(state) {
|
|
450
467
|
return state.allNamespaces;
|
|
451
468
|
},
|
|
@@ -577,7 +594,7 @@ export const getters = {
|
|
|
577
594
|
},
|
|
578
595
|
|
|
579
596
|
releaseNotesUrl(state, getters) {
|
|
580
|
-
const version = getters['management/byId'](MANAGEMENT.SETTING,
|
|
597
|
+
const version = getters['management/byId'](MANAGEMENT.SETTING, SETTING.VERSION_RANCHER)?.value;
|
|
581
598
|
|
|
582
599
|
const base = 'https://github.com/rancher/rancher/releases';
|
|
583
600
|
|
|
@@ -592,6 +609,14 @@ export const getters = {
|
|
|
592
609
|
};
|
|
593
610
|
|
|
594
611
|
export const mutations = {
|
|
612
|
+
pageActionHandler(state, handler) {
|
|
613
|
+
if (handler && typeof handler === 'function') {
|
|
614
|
+
state.pageActionHandler = handler;
|
|
615
|
+
}
|
|
616
|
+
},
|
|
617
|
+
clearPageActionHandler(state) {
|
|
618
|
+
state.pageActionHandler = null;
|
|
619
|
+
},
|
|
595
620
|
managementChanged(state, { ready, isRancher }) {
|
|
596
621
|
state.managementReady = ready;
|
|
597
622
|
state.isRancher = isRancher;
|
|
@@ -604,15 +629,19 @@ export const mutations = {
|
|
|
604
629
|
state.isRancherInHarvester = neu;
|
|
605
630
|
},
|
|
606
631
|
|
|
607
|
-
|
|
632
|
+
/**
|
|
633
|
+
* Updates cluster specific ns settings, including the selected ns cache `activeNamespaceCache`
|
|
634
|
+
*/
|
|
635
|
+
updateNamespaces(state, { filters, all, getters: optGetters }) {
|
|
608
636
|
state.namespaceFilters = filters.filter((x) => !!x);
|
|
609
637
|
|
|
610
638
|
if ( all ) {
|
|
611
639
|
state.allNamespaces = all;
|
|
612
640
|
}
|
|
613
|
-
// Create map that can be used to efficiently check if a
|
|
614
|
-
//
|
|
615
|
-
|
|
641
|
+
// - Create map that can be used to efficiently check if a resource should be displayed.
|
|
642
|
+
// - The 'getters' parameter is required to preserve compatibility with older Harvester's versions in embedded mode.
|
|
643
|
+
// see https://github.com/rancher/dashboard/issues/10647
|
|
644
|
+
getActiveNamespaces(state, optGetters || getters);
|
|
616
645
|
},
|
|
617
646
|
|
|
618
647
|
changeAllNamespaces(state, namespace) {
|
|
@@ -650,8 +679,20 @@ export const mutations = {
|
|
|
650
679
|
state.clusterId = neu;
|
|
651
680
|
},
|
|
652
681
|
|
|
653
|
-
setProduct(state,
|
|
654
|
-
state.productId =
|
|
682
|
+
setProduct(state, value) {
|
|
683
|
+
state.productId = value;
|
|
684
|
+
|
|
685
|
+
// Update rootProduct ONLY if the root product has changed as a result of the product change
|
|
686
|
+
const newProduct = this.getters['type-map/productByName'](value);
|
|
687
|
+
let newRootProduct = newProduct;
|
|
688
|
+
|
|
689
|
+
if (newProduct?.rootProduct) {
|
|
690
|
+
newRootProduct = this.getters['type-map/productByName'](newProduct.rootProduct) || newProduct;
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
if (newRootProduct?.name !== state.rootProduct?.name) {
|
|
694
|
+
state.rootProduct = newRootProduct;
|
|
695
|
+
}
|
|
655
696
|
},
|
|
656
697
|
|
|
657
698
|
setError(state, { error: obj, locationError }) {
|
|
@@ -685,10 +726,27 @@ export const mutations = {
|
|
|
685
726
|
|
|
686
727
|
targetRoute(state, route) {
|
|
687
728
|
state.targetRoute = route;
|
|
729
|
+
},
|
|
730
|
+
|
|
731
|
+
setRouter(state, router) {
|
|
732
|
+
state.$router = markRaw(router);
|
|
733
|
+
},
|
|
734
|
+
|
|
735
|
+
setRoute(state, route) {
|
|
736
|
+
state.$route = markRaw(route);
|
|
737
|
+
},
|
|
738
|
+
|
|
739
|
+
setPlugin(state, pluginDefinition) {
|
|
740
|
+
state.$plugin = markRaw(pluginDefinition);
|
|
688
741
|
}
|
|
689
742
|
};
|
|
690
743
|
|
|
691
744
|
export const actions = {
|
|
745
|
+
handlePageAction({ state }, action) {
|
|
746
|
+
if (state.pageActionHandler) {
|
|
747
|
+
state.pageActionHandler(action);
|
|
748
|
+
}
|
|
749
|
+
},
|
|
692
750
|
async loadManagement({
|
|
693
751
|
getters, state, commit, dispatch, rootGetters
|
|
694
752
|
}) {
|
|
@@ -711,14 +769,24 @@ export const actions = {
|
|
|
711
769
|
rancherSchemas: dispatch('rancher/loadSchemas', true),
|
|
712
770
|
});
|
|
713
771
|
|
|
772
|
+
// Note - why aren't we watching anything fetched in the `promises` object?
|
|
773
|
+
// To watch we need feature flags to know that the vai cache is enabled.
|
|
774
|
+
// So to work around this we won't watch anything initially... and then watch once we have feature flags
|
|
775
|
+
// The alternative is simpler (fetch features up front) but would add another blocking request in
|
|
776
|
+
|
|
714
777
|
const promises = {
|
|
715
778
|
// Clusters guaranteed always available or your money back
|
|
716
|
-
clusters: dispatch('management/findAll', { type: MANAGEMENT.CLUSTER }),
|
|
779
|
+
clusters: dispatch('management/findAll', { type: MANAGEMENT.CLUSTER, opt: { watch: false } }),
|
|
717
780
|
|
|
718
781
|
// Features checks on its own if they are available
|
|
719
782
|
features: dispatch('features/loadServer'),
|
|
720
783
|
};
|
|
721
784
|
|
|
785
|
+
const toWatch = [
|
|
786
|
+
MANAGEMENT.CLUSTER,
|
|
787
|
+
MANAGEMENT.FEATURE,
|
|
788
|
+
];
|
|
789
|
+
|
|
722
790
|
const isRancher = res.rancherSchemas.status === 'fulfilled' && !!getters['management/schemaFor'](MANAGEMENT.PROJECT);
|
|
723
791
|
|
|
724
792
|
if ( isRancher ) {
|
|
@@ -727,25 +795,34 @@ export const actions = {
|
|
|
727
795
|
}
|
|
728
796
|
|
|
729
797
|
if ( getters['management/schemaFor'](COUNT) ) {
|
|
730
|
-
promises['counts'] = dispatch('management/findAll', { type: COUNT });
|
|
798
|
+
promises['counts'] = dispatch('management/findAll', { type: COUNT, opt: { watch: false } });
|
|
799
|
+
toWatch.push(COUNT);
|
|
731
800
|
}
|
|
732
801
|
|
|
733
802
|
if ( getters['management/canList'](MANAGEMENT.SETTING) ) {
|
|
734
|
-
promises['settings'] = dispatch('management/findAll', { type: MANAGEMENT.SETTING });
|
|
803
|
+
promises['settings'] = dispatch('management/findAll', { type: MANAGEMENT.SETTING, opt: { watch: false } });
|
|
804
|
+
toWatch.push(MANAGEMENT.SETTING);
|
|
735
805
|
}
|
|
736
806
|
|
|
737
807
|
if ( getters['management/schemaFor'](NAMESPACE) ) {
|
|
738
|
-
promises['namespaces'] = dispatch('management/findAll', { type: NAMESPACE });
|
|
808
|
+
promises['namespaces'] = dispatch('management/findAll', { type: NAMESPACE, opt: { watch: false } });
|
|
809
|
+
toWatch.push(NAMESPACE);
|
|
739
810
|
}
|
|
740
811
|
|
|
741
812
|
const fleetSchema = getters['management/schemaFor'](FLEET.WORKSPACE);
|
|
742
813
|
|
|
743
814
|
if (fleetSchema?.links?.collection) {
|
|
744
|
-
promises['workspaces'] = dispatch('management/findAll', { type: FLEET.WORKSPACE });
|
|
815
|
+
promises['workspaces'] = dispatch('management/findAll', { type: FLEET.WORKSPACE, opt: { watch: false } });
|
|
816
|
+
toWatch.push(FLEET.WORKSPACE);
|
|
745
817
|
}
|
|
746
818
|
|
|
747
819
|
res = await allHash(promises);
|
|
748
|
-
|
|
820
|
+
|
|
821
|
+
// See comment above. Now that we have feature flags we can watch resources
|
|
822
|
+
toWatch.forEach((type) => {
|
|
823
|
+
dispatch('management/watch', { type });
|
|
824
|
+
});
|
|
825
|
+
|
|
749
826
|
const isMultiCluster = getters['isMultiCluster'];
|
|
750
827
|
|
|
751
828
|
// If the local cluster is a Harvester cluster and 'rancher-manager-support' is true, it means that the embedded Rancher is being used.
|
|
@@ -793,6 +870,9 @@ export const actions = {
|
|
|
793
870
|
console.log(`Done loading management; isRancher=${ isRancher }; isMultiCluster=${ isMultiCluster }`); // eslint-disable-line no-console
|
|
794
871
|
},
|
|
795
872
|
|
|
873
|
+
// Note:
|
|
874
|
+
// - state.clusterId is the old cluster id (or undefined)
|
|
875
|
+
// - id is the new cluster id (or undefined)
|
|
796
876
|
async loadCluster({
|
|
797
877
|
state, commit, dispatch, getters
|
|
798
878
|
}, {
|
|
@@ -801,10 +881,14 @@ export const actions = {
|
|
|
801
881
|
commit('targetRoute', targetRoute);
|
|
802
882
|
const sameCluster = state.clusterId && state.clusterId === id;
|
|
803
883
|
const samePackage = oldPkg?.name === newPkg?.name;
|
|
884
|
+
const sameProduct = oldProduct === product;
|
|
804
885
|
const isMultiCluster = getters['isMultiCluster'];
|
|
805
886
|
|
|
806
|
-
|
|
807
|
-
|
|
887
|
+
const productConfig = state['type-map']?.products?.find((p) => p.name === product);
|
|
888
|
+
const oldProductConfig = state['type-map']?.products?.find((p) => p.name === oldProduct);
|
|
889
|
+
|
|
890
|
+
// Are we in the same cluster and package or product or root product?
|
|
891
|
+
if (sameCluster && (samePackage || sameProduct || (productConfig?.rootProduct === oldProductConfig?.rootProduct))) {
|
|
808
892
|
// Do nothing, we're already connected/connecting to this cluster
|
|
809
893
|
return;
|
|
810
894
|
}
|
|
@@ -817,8 +901,11 @@ export const actions = {
|
|
|
817
901
|
(s) => getters[`${ s.storeName }/isClusterStore`]
|
|
818
902
|
)?.storeName;
|
|
819
903
|
|
|
820
|
-
|
|
821
|
-
|
|
904
|
+
// Forget the cluster if we had a cluster and we have a new cluster OR if the store changed between the old and new products OR if the pkg store changed
|
|
905
|
+
// Package stores are only there for UI Extensions that have their own stores (normal case is this is undefined)
|
|
906
|
+
const forgetCurrentCluster = ((state.clusterId && id) ||
|
|
907
|
+
(productConfig?.inStore && productConfig.inStore !== oldProductConfig?.inStore)) ||
|
|
908
|
+
(oldPkgClusterStore !== newPkgClusterStore);
|
|
822
909
|
|
|
823
910
|
// Should we leave/forget the current cluster? Only if we're going from an existing cluster to a new cluster, or the package has changed
|
|
824
911
|
// (latter catches cases like nav from explorer cluster A to epinio cluster A)
|
|
@@ -829,7 +916,6 @@ export const actions = {
|
|
|
829
916
|
// so that the nav and header stay the same when going to things like prefs
|
|
830
917
|
commit('clusterReady', false);
|
|
831
918
|
commit('clusterId', undefined);
|
|
832
|
-
|
|
833
919
|
await dispatch('cluster/unsubscribe');
|
|
834
920
|
commit('cluster/reset');
|
|
835
921
|
|
|
@@ -856,6 +942,13 @@ export const actions = {
|
|
|
856
942
|
|
|
857
943
|
// Use a pseudo cluster ID to pretend we have a cluster... to ensure some screens that don't care about a cluster but 'require' one to show
|
|
858
944
|
if (id === BLANK_CLUSTER) {
|
|
945
|
+
// Remove previous cluster context from cached namespaces
|
|
946
|
+
commit('updateNamespaces', {
|
|
947
|
+
filters: [],
|
|
948
|
+
all: [],
|
|
949
|
+
getters
|
|
950
|
+
});
|
|
951
|
+
|
|
859
952
|
commit('clusterReady', true);
|
|
860
953
|
|
|
861
954
|
return;
|
|
@@ -958,6 +1051,7 @@ export const actions = {
|
|
|
958
1051
|
commit('updateNamespaces', {
|
|
959
1052
|
filters: filters || [ALL_USER],
|
|
960
1053
|
all: allNamespaces,
|
|
1054
|
+
getters
|
|
961
1055
|
});
|
|
962
1056
|
|
|
963
1057
|
if (getters['currentCluster'] && getters['currentCluster'].isHarvester) {
|
|
@@ -980,7 +1074,7 @@ export const actions = {
|
|
|
980
1074
|
}
|
|
981
1075
|
});
|
|
982
1076
|
|
|
983
|
-
commit('updateNamespaces', { filters: ids });
|
|
1077
|
+
commit('updateNamespaces', { filters: ids, getters });
|
|
984
1078
|
},
|
|
985
1079
|
|
|
986
1080
|
async cleanNamespaces({ getters, dispatch }) {
|
|
@@ -1048,35 +1142,32 @@ export const actions = {
|
|
|
1048
1142
|
if ( route.name === 'index' ) {
|
|
1049
1143
|
router.replace('/auth/login');
|
|
1050
1144
|
} else {
|
|
1051
|
-
|
|
1052
|
-
const backTo = window.localStorage.getItem(BACK_TO);
|
|
1145
|
+
const backTo = window.localStorage.getItem(BACK_TO);
|
|
1053
1146
|
|
|
1054
|
-
|
|
1055
|
-
|
|
1147
|
+
const isLogin = route.name === 'auth-login' || route.path === '/login'; // Cover dashboard and case of log out from ember;
|
|
1148
|
+
const isLogout = route.name === 'auth-logout';
|
|
1056
1149
|
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
}
|
|
1150
|
+
if (!backTo && !isLogin && !isLogout) {
|
|
1151
|
+
window.localStorage.setItem(BACK_TO, window.location.href);
|
|
1060
1152
|
}
|
|
1061
1153
|
|
|
1062
|
-
|
|
1154
|
+
let QUERY = (LOGGED_OUT in route.query) ? LOGGED_OUT : TIMED_OUT;
|
|
1063
1155
|
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
},
|
|
1156
|
+
// adds IS_SSO query param to login route if logout came with an auth provider enabled
|
|
1157
|
+
QUERY += (IS_SSO in route.query) ? `&${ IS_SSO }` : '';
|
|
1067
1158
|
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1159
|
+
// Go back to login and force a full page reload, this ensures we unload any dangling resources the user is no longer authorized to use (like extensions).
|
|
1160
|
+
// We use document instead of router because router does a clunky job of visiting a new page and reloading. In this case it would cause the login page to flash before actually reloading.
|
|
1161
|
+
const base = process.env.routerBase || '/';
|
|
1162
|
+
|
|
1163
|
+
document.location.href = `${ base }auth/login?${ QUERY }`;
|
|
1164
|
+
}
|
|
1073
1165
|
},
|
|
1074
1166
|
|
|
1075
|
-
nuxtClientInit({ dispatch, rootState }, nuxt) {
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
Object.defineProperty(this, '$plugin', { value: nuxt.app.$plugin });
|
|
1167
|
+
nuxtClientInit({ dispatch, commit, rootState }, nuxt) {
|
|
1168
|
+
commit('setRouter', nuxt.app.router);
|
|
1169
|
+
commit('setRoute', nuxt.route);
|
|
1170
|
+
commit('setPlugin', nuxt.app.$plugin);
|
|
1080
1171
|
|
|
1081
1172
|
dispatch('management/rehydrateSubscribe');
|
|
1082
1173
|
dispatch('cluster/rehydrateSubscribe');
|
package/store/plugins.js
CHANGED
|
@@ -165,16 +165,18 @@ export const getters = {
|
|
|
165
165
|
},
|
|
166
166
|
|
|
167
167
|
fieldNamesForDriver(state, getters) {
|
|
168
|
-
return (name) => {
|
|
168
|
+
return async(name) => {
|
|
169
169
|
const schema = getters.schemaForDriver(name);
|
|
170
170
|
|
|
171
|
+
await schema.fetchResourceFields();
|
|
172
|
+
|
|
171
173
|
if ( !schema ) {
|
|
172
174
|
// eslint-disable-next-line no-console
|
|
173
175
|
console.error(`Machine Driver Config schema not found for ${ name }`);
|
|
174
176
|
|
|
175
177
|
return [];
|
|
176
178
|
}
|
|
177
|
-
|
|
179
|
+
// This is used in places where `createPopulated` has been called, which has called fetchResourceFields to populate resourceFields
|
|
178
180
|
const out = Object.keys(schema?.resourceFields || {});
|
|
179
181
|
|
|
180
182
|
removeObjects(out, ['apiVersion', 'dockerPort', 'kind', 'metadata']);
|
|
@@ -184,9 +186,11 @@ export const getters = {
|
|
|
184
186
|
},
|
|
185
187
|
|
|
186
188
|
fieldsForDriver(state, getters) {
|
|
187
|
-
return (name) => {
|
|
189
|
+
return async(name) => {
|
|
188
190
|
const schema = getters.schemaForDriver(name);
|
|
189
|
-
|
|
191
|
+
|
|
192
|
+
await schema.fetchResourceFields();
|
|
193
|
+
const names = await getters.fieldNamesForDriver(name);
|
|
190
194
|
|
|
191
195
|
const out = {};
|
|
192
196
|
|
package/store/prefs.js
CHANGED
|
@@ -112,9 +112,6 @@ export const _RKE1 = 'rke1';
|
|
|
112
112
|
export const _RKE2 = 'rke2';
|
|
113
113
|
export const PROVISIONER = create('provisioner', _RKE2, { options: [_RKE1, _RKE2] });
|
|
114
114
|
|
|
115
|
-
// Promo for Pod Security Policies (PSPs) being deprecated on kube version 1.25 on Cluster Dashboard page
|
|
116
|
-
export const PSP_DEPRECATION_BANNER = create('hide-psp-deprecation-banner', false, { parseJSON });
|
|
117
|
-
|
|
118
115
|
// Maximum number of clusters to show in the slide-in menu
|
|
119
116
|
export const MENU_MAX_CLUSTERS = 10;
|
|
120
117
|
// Prompt for confirm when scaling down node pool in GUI and save the pref
|
|
@@ -348,46 +345,44 @@ export const actions = {
|
|
|
348
345
|
commit('cookiesLoaded');
|
|
349
346
|
},
|
|
350
347
|
|
|
351
|
-
loadTheme({
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
348
|
+
loadTheme({ dispatch }) {
|
|
349
|
+
const watchDark = window.matchMedia('(prefers-color-scheme: dark)');
|
|
350
|
+
const watchLight = window.matchMedia('(prefers-color-scheme: light)');
|
|
351
|
+
const watchNone = window.matchMedia('(prefers-color-scheme: no-preference)');
|
|
352
|
+
|
|
353
|
+
const interval = 30 * 60 * 1000;
|
|
354
|
+
const nextHalfHour = interval - Math.round(new Date().getTime()) % interval;
|
|
355
|
+
|
|
356
|
+
setTimeout(() => {
|
|
357
|
+
dispatch('loadTheme');
|
|
358
|
+
}, nextHalfHour);
|
|
359
|
+
// console.log('Update theme in', nextHalfHour, 'ms');
|
|
360
|
+
|
|
361
|
+
if ( watchDark.matches ) {
|
|
362
|
+
changed('dark');
|
|
363
|
+
} else if ( watchLight.matches ) {
|
|
364
|
+
changed('light');
|
|
365
|
+
} else {
|
|
366
|
+
changed(fromClock());
|
|
367
|
+
}
|
|
364
368
|
|
|
365
|
-
|
|
369
|
+
watchDark.addListener((e) => {
|
|
370
|
+
if ( e.matches ) {
|
|
366
371
|
changed('dark');
|
|
367
|
-
} else if ( watchLight.matches ) {
|
|
368
|
-
changed('light');
|
|
369
|
-
} else {
|
|
370
|
-
changed(fromClock());
|
|
371
372
|
}
|
|
373
|
+
});
|
|
372
374
|
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
watchLight.addListener((e) => {
|
|
380
|
-
if ( e.matches ) {
|
|
381
|
-
changed('light');
|
|
382
|
-
}
|
|
383
|
-
});
|
|
375
|
+
watchLight.addListener((e) => {
|
|
376
|
+
if ( e.matches ) {
|
|
377
|
+
changed('light');
|
|
378
|
+
}
|
|
379
|
+
});
|
|
384
380
|
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
}
|
|
381
|
+
watchNone.addListener((e) => {
|
|
382
|
+
if ( e.matches ) {
|
|
383
|
+
changed(fromClock());
|
|
384
|
+
}
|
|
385
|
+
});
|
|
391
386
|
|
|
392
387
|
function changed(value) {
|
|
393
388
|
// console.log('Prefers Theme:', value);
|