@rancher/shell 0.5.3 → 2.0.0
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 +2 -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 +296 -58
- package/assets/translations/zh-hans.yaml +5 -27
- package/babel.config.js +1 -1
- package/chart/__tests__/S3.test.ts +9 -2
- package/chart/monitoring/grafana/index.vue +6 -2
- package/chart/monitoring/prometheus/index.vue +2 -2
- package/chart/rancher-backup/S3.vue +11 -9
- package/chart/rancher-backup/index.vue +15 -5
- package/cloud-credential/__tests__/harvester.test.ts +18 -0
- package/cloud-credential/generic.vue +18 -9
- package/cloud-credential/harvester.vue +11 -3
- package/components/AppModal.vue +167 -0
- package/components/AssignTo.vue +7 -4
- package/components/AsyncButton.vue +18 -5
- package/components/BackLink.vue +4 -4
- package/components/BannerGraphic.vue +1 -0
- package/components/BrandImage.vue +47 -1
- package/components/Carousel.vue +14 -8
- package/components/Certificates.vue +8 -11
- package/components/ClusterBadge.vue +12 -3
- package/components/ClusterIconMenu.vue +44 -16
- package/components/ClusterProviderIcon.vue +14 -3
- package/components/CodeMirror.vue +73 -38
- package/components/CommunityLinks.vue +12 -8
- package/components/CreateDriver.vue +81 -0
- package/components/CruResource.vue +51 -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/ExplorerMembers.vue +3 -3
- package/components/ExplorerProjectsNamespaces.vue +6 -6
- package/components/FixedBanner.vue +47 -36
- package/components/GlobalRoleBindings.vue +26 -0
- package/components/Import.vue +10 -6
- package/components/Inactivity.vue +1 -5
- package/components/KeyValueView.vue +14 -10
- 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 +11 -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 +18 -2
- package/components/ResourceCancelModal.vue +34 -29
- package/components/ResourceDetail/Masthead.vue +23 -7
- package/components/ResourceDetail/index.vue +5 -0
- package/components/ResourceList/Masthead.vue +28 -10
- package/components/ResourceList/index.vue +65 -14
- package/components/ResourceTable.vue +73 -19
- package/components/ResourceYaml.vue +1 -0
- package/components/SelectIconGrid.vue +3 -3
- package/components/SideNav.vue +15 -37
- package/components/SingleClusterInfo.vue +4 -4
- package/components/SortableTable/THead.vue +26 -12
- package/components/SortableTable/filtering.js +9 -1
- package/components/SortableTable/grouping.js +8 -1
- package/components/SortableTable/index.vue +142 -42
- package/components/SortableTable/paging.js +36 -7
- package/components/SortableTable/selection.js +2 -1
- package/components/SortableTable/sorting.js +24 -7
- package/components/TabTitle.vue +84 -0
- package/components/Tabbed/index.vue +6 -1
- package/components/TableDataUserIcon.vue +47 -0
- package/components/TypeDescription.vue +1 -0
- package/components/Wizard.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.spec.ts → CodeMirror.test.ts} +5 -17
- 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/FleetClusters.vue +9 -9
- package/components/fleet/FleetIntro.vue +11 -17
- package/components/fleet/FleetNoWorkspaces.vue +2 -2
- package/components/fleet/FleetRepos.vue +1 -0
- package/components/fleet/ForceDirectedTreeChart/index.vue +9 -3
- package/components/form/ArrayList.vue +30 -19
- package/components/form/ArrayListSelect.vue +9 -4
- package/components/form/ClusterAppearance.vue +132 -0
- package/components/form/ColorInput.vue +1 -0
- package/components/form/Error.vue +3 -3
- package/components/form/Footer.vue +2 -2
- package/components/form/GitPicker.vue +83 -38
- package/components/form/KeyValue.vue +67 -48
- package/components/form/LabeledSelect.vue +143 -43
- package/components/form/Labels.vue +3 -1
- package/components/form/NameNsDescription.vue +26 -9
- 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/Select.vue +1 -1
- package/components/form/SelectOrCreateAuthSecret.vue +135 -62
- package/components/form/SimpleSecretSelector.vue +88 -28
- package/components/form/__tests__/BannerSettings.test.ts +53 -0
- package/components/form/__tests__/KeyValue.test.ts +121 -12
- package/components/form/__tests__/LabeledSelect.test.ts +0 -18
- package/components/form/__tests__/NameNsDescription.test.ts +25 -15
- 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/CloudCredPublicData.vue +30 -0
- package/components/formatter/ClusterLink.vue +2 -2
- package/components/formatter/FleetSummaryGraph.vue +2 -1
- 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/LiveDate.vue +16 -0
- package/components/formatter/PrincipalGroupBindings.vue +2 -2
- package/components/formatter/SecretType.vue +2 -2
- package/components/formatter/VirtualServiceGateways.vue +2 -2
- package/components/formatter/__tests__/LinkDetail.test.ts +5 -5
- package/components/nav/Group.vue +7 -5
- package/components/nav/Header.vue +82 -43
- package/components/nav/NamespaceFilter.vue +8 -1
- package/components/nav/TopLevelMenu.vue +336 -125
- package/components/nav/Type.vue +58 -102
- package/components/nav/__tests__/TopLevelMenu.test.ts +370 -9
- package/components/nav/__tests__/Type.test.ts +321 -126
- package/components/nuxt/nuxt-child.js +0 -5
- package/components/nuxt/nuxt-error.vue +1 -1
- package/components/nuxt/nuxt-link.client.js +13 -95
- package/components/templates/default.vue +3 -3
- package/components/templates/error.vue +6 -10
- package/components/templates/standalone.vue +0 -4
- package/components/templates/unauthenticated.vue +1 -2
- package/components/user.retention/user-retention-header.vue +34 -0
- package/composables/useCompactInput.test.ts +36 -0
- package/composables/useCompactInput.ts +2 -2
- package/composables/useI18n.ts +26 -0
- package/composables/useLabeledFormElement.test.ts +135 -0
- package/composables/useStore.ts +16 -0
- package/config/home-links.js +32 -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 +1 -3
- package/config/product/auth.js +1 -0
- package/config/product/explorer.js +167 -46
- package/config/product/legacy.js +3 -95
- package/config/product/manager.js +44 -11
- package/config/query-params.js +1 -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/index.js +15 -0
- package/config/router/navigation-guards/load-initial-settings.js +15 -0
- package/config/router/routes.js +487 -0
- package/config/settings.ts +38 -2
- package/config/store.js +7 -3
- package/config/table-headers.js +46 -1
- package/config/types.js +36 -16
- package/config/uiplugins.js +10 -5
- package/core/plugin-helpers.js +1 -1
- package/core/plugin.ts +2 -1
- package/core/plugins.js +289 -282
- package/creators/app/files/.eslintignore +0 -2
- package/creators/app/files/.vscode/settings.json +0 -1
- 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__/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.gitrepo.vue +15 -9
- package/detail/namespace.vue +2 -2
- package/detail/networking.k8s.io.ingress.vue +52 -19
- package/detail/node.vue +20 -43
- package/detail/pod.vue +1 -68
- package/detail/provisioning.cattle.io.cluster.vue +2 -1
- package/detail/service.vue +1 -1
- package/detail/workload/index.vue +2 -15
- package/dialog/AddCustomBadgeDialog.vue +318 -161
- package/dialog/DeactivateDriverDialog.vue +118 -0
- package/dialog/RollbackWorkloadDialog.vue +2 -2
- package/dialog/RotateCertificatesDialog.vue +0 -21
- 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 +1 -5
- 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 +5 -18
- 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 +175 -20
- package/edit/cis.cattle.io.clusterscan.vue +5 -2
- package/edit/cis.cattle.io.clusterscanbenchmark.vue +41 -9
- package/edit/cloudcredential.vue +26 -4
- package/edit/configmap.vue +10 -4
- package/edit/fleet.cattle.io.gitrepo.vue +7 -4
- 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 +2 -1
- package/edit/management.cattle.io.setting.vue +20 -0
- 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/pagerduty.vue +1 -0
- package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +3 -0
- package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +2 -0
- 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} +45 -6
- package/edit/networking.k8s.io.networkpolicy/__tests__/utils/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 +18 -9
- package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +165 -1
- package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +1 -1
- package/edit/provisioning.cattle.io.cluster/__tests__/CustomCommand.test.ts +0 -3
- package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +228 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +70 -12
- package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +5 -0
- package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
- package/edit/provisioning.cattle.io.cluster/index.vue +21 -15
- package/edit/provisioning.cattle.io.cluster/rke2.vue +185 -114
- package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +67 -7
- package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +19 -6
- package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +132 -0
- package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +7 -0
- package/edit/provisioning.cattle.io.cluster/tabs/etcd/S3Config.vue +1 -0
- package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +1 -0
- package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +3 -0
- package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +1 -0
- package/edit/resources.cattle.io.backup.vue +139 -124
- package/edit/resources.cattle.io.restore.vue +146 -126
- package/edit/service.vue +1 -0
- package/edit/serviceaccount.vue +46 -4
- package/edit/workload/__tests__/Job.test.ts +1 -3
- package/edit/workload/__tests__/Upgrading.test.ts +2 -2
- package/edit/workload/mixins/workload.js +34 -1
- 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 +549 -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/cis.cattle.io.clusterscan.vue +16 -10
- package/list/group.principal.vue +2 -2
- package/list/management.cattle.io.feature.vue +11 -7
- package/list/management.cattle.io.user.vue +36 -3
- package/list/networking.k8s.io.ingress.vue +36 -0
- package/list/node.vue +211 -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 +162 -59
- package/machine-config/amazonec2.vue +1 -1
- package/machine-config/azure.vue +38 -21
- package/machine-config/generic.vue +11 -15
- package/machine-config/vmwarevsphere-pool-config-merge.ts +25 -0
- package/machine-config/vmwarevsphere.vue +20 -11
- package/middleware/authenticated.js +9 -361
- package/mixins/__tests__/chart.test.ts +48 -6
- package/mixins/__tests__/create-edit-view.test.ts +2 -3
- package/mixins/auth-config.js +3 -2
- package/mixins/brand.js +75 -57
- 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 +21 -1
- 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__/schema.tests.ts +24 -0
- package/models/__tests__/steve-schema.test.ts +73 -0
- package/models/__tests__/workload.test.ts +1 -1
- 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 +4 -0
- package/models/cluster/schema.js +6 -0
- package/models/cluster.js +33 -0
- package/models/driver.js +62 -0
- package/models/fleet.cattle.io.cluster.js +23 -11
- package/models/fleet.cattle.io.gitrepo.js +10 -0
- package/models/helm.cattle.io.projecthelmchart.js +1 -1
- package/models/kontainerdriver.js +68 -0
- package/models/management/schema.js +6 -0
- package/models/management.cattle.io.authconfig.js +3 -2
- package/models/management.cattle.io.cluster.js +5 -4
- package/models/management.cattle.io.globalrole.js +2 -0
- package/models/management.cattle.io.user.js +67 -2
- package/models/monitoring.coreos.com.receiver.js +3 -1
- package/models/monitoring.coreos.com.route.js +1 -1
- package/models/networking.k8s.io.ingress.js +2 -1
- package/models/nodedriver.js +68 -0
- package/models/provisioning.cattle.io.cluster.js +34 -1
- package/models/schema.js +28 -7
- package/models/service.js +2 -0
- package/models/steve-schema.ts +254 -0
- package/models/workload.js +1 -0
- package/package.json +6 -5
- package/pages/about.vue +12 -5
- package/pages/account/index.vue +7 -2
- package/pages/auth/login.vue +106 -102
- package/pages/auth/logout.vue +2 -2
- package/pages/auth/setup.vue +57 -64
- package/pages/auth/verify.vue +17 -17
- package/pages/c/_cluster/apps/charts/chart.vue +54 -9
- package/pages/c/_cluster/apps/charts/index.vue +37 -13
- package/pages/c/_cluster/apps/charts/install.vue +4 -4
- 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/auth/user.retention/index.vue +384 -0
- 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 +231 -72
- package/pages/c/_cluster/explorer/tools/__tests__/index.test.ts +69 -0
- package/pages/c/_cluster/explorer/tools/index.vue +12 -176
- package/pages/c/_cluster/fleet/index.vue +88 -93
- 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 +94 -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 +63 -0
- package/pages/c/_cluster/manager/jwt.authentication/index.vue +235 -0
- package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +4 -0
- package/pages/c/_cluster/monitoring/index.vue +1 -17
- 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 -8
- package/pages/c/_cluster/settings/brand.vue +258 -36
- package/pages/c/_cluster/settings/index.vue +4 -4
- package/pages/c/_cluster/settings/links.vue +5 -3
- package/pages/c/_cluster/settings/performance.vue +71 -2
- package/pages/c/_cluster/uiplugins/AddExtensionRepos.vue +5 -2
- package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +10 -7
- package/pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue +9 -6
- package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +11 -5
- package/pages/c/_cluster/uiplugins/InstallDialog.vue +53 -18
- 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 -52
- package/pages/diagnostic.vue +1 -0
- package/pages/fail-whale.vue +103 -41
- package/pages/home.vue +81 -24
- package/pages/prefs.vue +8 -3
- package/pages/support/index.vue +12 -2
- package/plugins/clean-html-directive.js +5 -12
- package/plugins/clean-tooltip-directive.js +6 -31
- package/plugins/codemirror.js +0 -9
- package/plugins/dashboard-store/__tests__/mutations.test.ts +296 -313
- package/plugins/dashboard-store/actions.js +140 -32
- package/plugins/dashboard-store/getters.js +86 -39
- package/plugins/dashboard-store/index.js +0 -99
- package/plugins/dashboard-store/mutations.js +150 -48
- package/plugins/dashboard-store/resource-class.js +14 -109
- package/plugins/directives.js +6 -39
- package/plugins/ember-cookie.js +13 -0
- package/plugins/global-formatters.js +26 -5
- package/plugins/i18n.js +90 -56
- 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} +124 -31
- package/plugins/steve/__tests__/mutations.test.ts +49 -0
- package/plugins/steve/__tests__/subscribe.spec.ts +109 -0
- package/plugins/steve/__tests__/utils/mutation.test.helpers.ts +105 -0
- package/plugins/steve/accept-or-reject-socket-message.ts +103 -0
- package/plugins/steve/actions.js +0 -1
- package/plugins/steve/getters.js +183 -63
- package/plugins/steve/hybrid-class.js +5 -1
- package/plugins/steve/mutations.js +29 -5
- package/plugins/steve/norman-class.js +123 -2
- package/{utils → plugins/steve}/projectAndNamespaceFiltering.utils.ts +28 -10
- package/plugins/steve/schema.d.ts +22 -0
- package/plugins/steve/steve-pagination-utils.ts +368 -0
- package/plugins/steve/subscribe.js +37 -75
- package/plugins/trim-whitespace.js +6 -34
- package/plugins/vue-js-modal.js +1 -1
- package/public/index.html +1 -0
- package/rancher-components/Accordion/Accordion.vue +3 -2
- 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 +1 -1
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +66 -30
- 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 +7 -5
- package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
- package/rancher-components/StringList/StringList.vue +8 -8
- package/rancher-components/components/Accordion/Accordion.vue +3 -2
- package/rancher-components/components/BadgeState/BadgeState.vue +3 -3
- package/rancher-components/components/Banner/Banner.test.ts +1 -5
- package/rancher-components/components/Banner/Banner.vue +2 -2
- package/rancher-components/components/Card/Card.vue +4 -4
- package/rancher-components/components/Form/Checkbox/Checkbox.vue +4 -3
- package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +1 -1
- package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +66 -30
- package/rancher-components/components/Form/Radio/RadioButton.test.ts +1 -3
- package/rancher-components/components/Form/Radio/RadioButton.vue +13 -7
- package/rancher-components/components/Form/Radio/RadioGroup.vue +4 -3
- package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +7 -5
- package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
- package/rancher-components/components/LabeledTooltip/LabeledTooltip.vue +9 -4
- package/rancher-components/components/StringList/StringList.vue +8 -8
- package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +27 -8
- package/scripts/clean +1 -1
- 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/patch +27 -0
- package/scripts/extension/publish +6 -6
- package/scripts/serve-pkgs +0 -2
- package/scripts/test-plugins-build.sh +6 -6
- package/scripts/vue-migrate.js +683 -0
- package/store/__tests__/catalog.test.ts +224 -0
- package/store/auth.js +23 -4
- package/store/aws.js +53 -6
- package/store/catalog.js +21 -5
- package/store/cru-resource.ts +26 -0
- package/store/customisation.js +35 -0
- package/store/features.js +6 -4
- package/store/index.js +132 -39
- package/store/plugins.js +8 -4
- package/store/type-map.js +143 -143
- package/store/type-map.utils.ts +226 -0
- package/tsconfig.json +0 -1
- package/tsconfig.paths.json +4 -1
- 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 +996 -782
- 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 +92 -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 -2
- package/utils/banners.js +103 -0
- package/utils/cluster.js +1 -1
- package/utils/config.js +4 -0
- package/utils/create-yaml.js +54 -27
- package/utils/error.js +25 -0
- package/utils/formatter.js +5 -3
- package/utils/git.ts +1 -1
- package/utils/install-redirect.js +1 -1
- package/utils/kontainer.ts +186 -0
- package/utils/monitoring.js +2 -37
- 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/socket.js +1 -0
- package/utils/time.js +1 -0
- package/utils/title.ts +3 -0
- package/utils/unit-tests/ChildRenderingRouterLinkStub.ts +36 -0
- package/utils/validators/formRules/__tests__/index.test.ts +21 -0
- package/utils/validators/formRules/index.ts +3 -0
- package/utils/validators/index.js +1 -0
- package/vue.config.js +376 -421
- package/assets/styles/vendor/vue-js-modal.scss +0 -16
- package/chart/monitoring/steps/uninstall-v1.vue +0 -135
- package/components/EventsTable.vue +0 -67
- package/components/TabbedLinks/index.vue +0 -94
- package/components/nuxt/nuxt-link.server.js +0 -16
- package/components/nuxt/nuxt.js +0 -101
- package/config/router.js +0 -425
- package/initialize/App.js +0 -152
- package/initialize/client.js +0 -734
- package/initialize/index.js +0 -287
- package/middleware/i18n.js +0 -10
- package/middleware/unauthenticated.js +0 -22
- package/mixins/v1-workload-metrics.js +0 -43
- package/pages/c/_cluster/apps/index.vue +0 -15
- package/pages/c/_cluster/auth/index.vue +0 -17
- package/pages/c/_cluster/index.vue +0 -15
- 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/plugins/dashboard-store/rehydrate-all.js +0 -44
- package/plugins/index.js +0 -11
- 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/v-select.js +0 -4
- package/utils/group.js +0 -70
- package/utils/nuxt.js +0 -638
- package/utils/router.scrollBehavior.js +0 -78
- /package/components/__tests__/{Collapse.spec.ts → Collapse.test.ts} +0 -0
- /package/models/__tests__/{node.ts → node.test.ts} +0 -0
- /package/plugins/steve/__tests__/{header-warnings.spec.ts → header-warnings.test.ts} +0 -0
- /package/plugins/steve/__tests__/{steve-class.spec.ts → steve-class.test.ts} +0 -0
- /package/rancher-components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
- /package/rancher-components/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
|
},
|
|
@@ -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
|
}, {
|
|
@@ -804,11 +884,15 @@ export const actions = {
|
|
|
804
884
|
const sameProduct = oldProduct === product;
|
|
805
885
|
const isMultiCluster = getters['isMultiCluster'];
|
|
806
886
|
|
|
807
|
-
|
|
808
|
-
|
|
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))) {
|
|
809
892
|
// Do nothing, we're already connected/connecting to this cluster
|
|
810
893
|
return;
|
|
811
894
|
}
|
|
895
|
+
|
|
812
896
|
const oldPkgClusterStore = oldPkg?.stores.find(
|
|
813
897
|
(s) => getters[`${ s.storeName }/isClusterStore`]
|
|
814
898
|
)?.storeName;
|
|
@@ -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)
|
|
@@ -855,6 +942,13 @@ export const actions = {
|
|
|
855
942
|
|
|
856
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
|
|
857
944
|
if (id === BLANK_CLUSTER) {
|
|
945
|
+
// Remove previous cluster context from cached namespaces
|
|
946
|
+
commit('updateNamespaces', {
|
|
947
|
+
filters: [],
|
|
948
|
+
all: [],
|
|
949
|
+
getters
|
|
950
|
+
});
|
|
951
|
+
|
|
858
952
|
commit('clusterReady', true);
|
|
859
953
|
|
|
860
954
|
return;
|
|
@@ -1057,24 +1151,23 @@ export const actions = {
|
|
|
1057
1151
|
window.localStorage.setItem(BACK_TO, window.location.href);
|
|
1058
1152
|
}
|
|
1059
1153
|
|
|
1060
|
-
|
|
1154
|
+
let QUERY = (LOGGED_OUT in route.query) ? LOGGED_OUT : TIMED_OUT;
|
|
1061
1155
|
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
},
|
|
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 }` : '';
|
|
1065
1158
|
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
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
|
+
}
|
|
1071
1165
|
},
|
|
1072
1166
|
|
|
1073
|
-
nuxtClientInit({ dispatch, rootState }, nuxt) {
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
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);
|
|
1078
1171
|
|
|
1079
1172
|
dispatch('management/rehydrateSubscribe');
|
|
1080
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
|
|