@rancher/shell 3.0.5-rc.5 → 3.0.5-rc.7
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 +1 -0
- package/assets/images/key.svg +17 -0
- package/assets/styles/base/_spacing.scss +2 -2
- package/assets/styles/base/_variables.scss +17 -11
- package/assets/styles/global/_form.scss +1 -1
- package/assets/styles/global/_labeled-input.scss +1 -1
- package/assets/styles/themes/_dark.scss +5 -0
- package/assets/styles/themes/_light.scss +11 -2
- package/assets/styles/vendor/vue-select.scss +1 -1
- package/assets/translations/en-us.yaml +426 -64
- package/assets/translations/zh-hans.yaml +3 -4
- package/cloud-credential/gcp.vue +9 -1
- package/components/AppModal.vue +2 -0
- package/components/CodeMirror.vue +2 -2
- package/components/ConfigMapSettings/Settings.vue +377 -0
- package/components/ConfigMapSettings/index.vue +354 -0
- package/components/CruResource.vue +1 -2
- package/components/DetailText.vue +61 -11
- package/components/Drawer/Chrome.vue +115 -0
- package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +61 -0
- package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +48 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/ConfigTab.test.ts +54 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/YamlTab.test.ts +80 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/composables.test.ts +106 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/helpers.test.ts +42 -0
- package/components/Drawer/ResourceDetailDrawer/composables.ts +53 -0
- package/components/Drawer/ResourceDetailDrawer/helpers.ts +10 -0
- package/components/Drawer/ResourceDetailDrawer/index.vue +111 -0
- package/components/GrowlManager.vue +16 -15
- package/components/IconOrSvg.vue +5 -0
- package/components/KeyValueView.vue +1 -1
- package/components/Loading.vue +1 -1
- package/components/LocaleSelector.vue +9 -1
- package/components/PaginatedResourceTable.vue +46 -1
- package/components/ProgressBarMulti.vue +1 -0
- package/components/PromptModal.vue +6 -1
- package/components/PromptRestore.vue +22 -44
- package/components/RelatedResources.vue +4 -12
- package/components/Resource/Detail/Additional.vue +46 -0
- package/components/Resource/Detail/Metadata/Annotations/__tests__/index.test.ts +1 -1
- package/components/Resource/Detail/Metadata/Annotations/index.vue +5 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +223 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/composable.ts +47 -256
- package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +317 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +34 -5
- package/components/Resource/Detail/Metadata/KeyValue.vue +32 -22
- package/components/Resource/Detail/Metadata/Labels/__tests__/index.test.ts +1 -1
- package/components/Resource/Detail/Metadata/Labels/index.vue +4 -0
- package/components/Resource/Detail/Metadata/Rectangle.vue +3 -1
- package/components/Resource/Detail/Metadata/__tests__/KeyValue.test.ts +1 -1
- package/components/Resource/Detail/Metadata/__tests__/Rectangle.test.ts +1 -1
- package/components/Resource/Detail/Metadata/__tests__/composables.test.ts +75 -0
- package/components/Resource/Detail/Metadata/composables.ts +60 -11
- package/components/Resource/Detail/Metadata/index.vue +12 -5
- package/components/Resource/Detail/Page.vue +15 -0
- package/components/Resource/Detail/ResourceRow.vue +37 -18
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/composables.test.ts +29 -0
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/index.test.ts +48 -0
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/composables.ts +31 -0
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/index.vue +50 -0
- package/components/Resource/Detail/ResourceTabs/KnownHostsTab/__tests__/composables.test.ts +66 -0
- package/components/Resource/Detail/ResourceTabs/KnownHostsTab/composables.ts +21 -0
- package/components/Resource/Detail/ResourceTabs/KnownHostsTab/index.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Basic.vue +45 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/BasicAuth.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Certificate.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Registry.vue +22 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/ServiceAccountToken.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Ssh.vue +32 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Basic.test.ts +40 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/BasicAuth.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Certificate.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Registry.test.ts +27 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/ServiceAccountToken.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Ssh.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/auth-types.test.ts +186 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/composables.test.ts +102 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/auth-types.ts +109 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/composeables.ts +52 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/index.vue +71 -0
- package/components/Resource/Detail/SpacedRow.vue +1 -1
- package/components/Resource/Detail/TitleBar/Title.vue +2 -1
- package/components/Resource/Detail/TitleBar/__tests__/Title.test.ts +1 -1
- package/components/Resource/Detail/TitleBar/__tests__/Top.test.ts +1 -1
- package/components/Resource/Detail/TitleBar/__tests__/composables.test.ts +63 -0
- package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +1 -1
- package/components/Resource/Detail/TitleBar/composables.ts +45 -0
- package/components/Resource/Detail/TitleBar/index.vue +85 -13
- package/components/Resource/Detail/composables.ts +45 -0
- package/components/ResourceDetail/Masthead/__tests__/index.test.ts +70 -0
- package/components/ResourceDetail/{__tests__/Masthead.test.ts → Masthead/__tests__/legacy.test.ts} +3 -3
- package/components/ResourceDetail/Masthead/index.vue +65 -0
- package/components/ResourceDetail/Masthead/latest.vue +44 -0
- package/components/ResourceDetail/{Masthead.vue → Masthead/legacy.vue} +1 -1
- package/components/ResourceDetail/__tests__/index.test.ts +26 -5
- package/components/ResourceDetail/index.vue +33 -17
- package/components/ResourceDetail/legacy.vue +18 -1
- package/components/ResourceList/Masthead.vue +6 -0
- package/components/ResourceList/index.vue +1 -0
- package/components/ResourceTable.vue +6 -1
- package/components/ResourceYaml.vue +15 -2
- package/components/RichTranslation.vue +106 -0
- package/components/SlideInPanelManager.vue +46 -11
- package/components/SortableTable/index.vue +1 -1
- package/components/SortableTable/selection.js +0 -1
- package/components/StateDot/index.vue +28 -0
- package/components/Tabbed/index.vue +17 -16
- package/components/Wizard.vue +4 -2
- package/components/__tests__/ConfigMapSettings.test.ts +376 -0
- package/components/__tests__/GrowlManager.test.ts +0 -25
- package/components/__tests__/PromptRestore.test.ts +1 -65
- package/components/__tests__/RichTranslation.test.ts +115 -0
- package/components/auth/login/ldap.vue +1 -1
- package/components/fleet/FleetApplications.vue +0 -7
- package/components/fleet/FleetClusterTargets/TargetsList.vue +66 -0
- package/components/fleet/FleetClusterTargets/index.vue +455 -0
- package/components/fleet/FleetClusters.vue +25 -6
- package/components/fleet/FleetGitRepoPaths.vue +476 -0
- package/components/fleet/FleetHelmOps.vue +8 -0
- package/components/fleet/FleetRepos.vue +1 -6
- package/components/fleet/FleetResources.vue +4 -5
- package/components/fleet/FleetValuesFrom.vue +295 -0
- package/components/fleet/__tests__/FleetClusterTargets.test.ts +1224 -0
- package/components/fleet/__tests__/FleetGitRepoPaths.test.ts +265 -0
- package/components/fleet/__tests__/FleetOCIStorageSecret.test.ts +13 -13
- package/components/fleet/__tests__/FleetValuesFrom.test.ts +300 -0
- package/components/fleet/dashboard/ResourceCard.vue +1 -0
- package/components/fleet/dashboard/ResourceCardSummary.vue +1 -5
- package/components/fleet/dashboard/ResourceDetails.vue +8 -10
- package/components/fleet/dashboard/ResourcePanel.vue +17 -9
- package/components/form/ArrayList.vue +13 -2
- package/components/form/ChangePassword.vue +3 -1
- package/components/form/FileImageSelector.vue +1 -1
- package/components/form/Footer.vue +10 -4
- package/components/form/KeyValue.vue +81 -43
- package/components/form/LabeledSelect.vue +56 -16
- package/components/form/Labels.vue +90 -17
- package/components/form/MatchExpressions.vue +46 -5
- package/components/form/NameNsDescription.vue +2 -1
- package/components/form/Networking.vue +24 -19
- package/components/form/ResourceLabeledSelect.vue +4 -3
- package/components/form/ResourceSelector.vue +1 -0
- package/components/form/ResourceTabs/index.vue +5 -0
- package/components/form/SecretSelector.vue +9 -2
- package/components/form/Select.vue +57 -19
- package/components/form/SelectOrCreateAuthSecret.vue +6 -3
- package/components/form/SimpleSecretSelector.vue +9 -2
- package/components/form/Taints.vue +21 -2
- package/components/form/UnitInput.vue +8 -0
- package/components/form/ValueFromResource.vue +1 -1
- package/components/form/__tests__/LabeledSelect.test.ts +8 -4
- package/components/form/__tests__/Labels.test.ts +360 -0
- package/components/form/__tests__/MatchExpressions.test.ts +16 -13
- package/components/form/__tests__/Networking.test.ts +116 -0
- package/components/form/__tests__/Select.test.ts +5 -2
- package/components/formatter/FleetApplicationSource.vue +1 -1
- package/components/formatter/PodImages.vue +1 -1
- package/components/formatter/WorkloadHealthScale.vue +1 -1
- package/components/formatter/__tests__/LiveDate.test.ts +10 -2
- package/components/google/AccountAccess.vue +209 -0
- package/components/google/types/gcp.d.ts +136 -0
- package/components/google/types/index.d.ts +101 -0
- package/components/google/util/__mocks__/gcp.ts +465 -0
- package/components/google/util/formatter.ts +82 -0
- package/components/google/util/gcp.ts +134 -0
- package/components/google/util/index.d.ts +11 -0
- package/components/nav/Favorite.vue +1 -1
- package/components/nav/Group.vue +71 -45
- package/components/nav/Header.vue +5 -1
- package/components/nav/NamespaceFilter.vue +13 -1
- package/components/nav/NotificationCenter/Notification.vue +510 -0
- package/components/nav/NotificationCenter/NotificationHeader.vue +112 -0
- package/components/nav/NotificationCenter/index.vue +148 -0
- package/composables/drawer.ts +26 -0
- package/composables/resources.test.ts +63 -0
- package/composables/resources.ts +38 -0
- package/composables/useIsNewDetailPageEnabled.ts +17 -0
- package/config/labels-annotations.js +8 -0
- package/config/pagination-table-headers.js +8 -1
- package/config/product/auth.js +16 -1
- package/config/product/{cis.js → compliance.js} +23 -26
- package/config/product/explorer.js +32 -3
- package/config/product/fleet.js +7 -0
- package/config/product/manager.js +0 -1
- package/config/product/settings.js +22 -11
- package/config/query-params.js +13 -0
- package/config/roles.ts +1 -1
- package/config/router/navigation-guards/authentication.js +51 -2
- package/config/router/routes.js +47 -31
- package/config/settings.ts +21 -3
- package/config/store.js +2 -0
- package/config/system-namespaces.js +1 -1
- package/config/table-headers.js +32 -3
- package/config/types.js +16 -7
- package/config/version.js +1 -1
- package/core/plugin.ts +32 -7
- package/core/types.ts +18 -1
- package/detail/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +22 -18
- package/detail/management.cattle.io.fleetworkspace.vue +18 -27
- package/detail/management.cattle.io.oidcclient.vue +369 -0
- package/detail/node.vue +2 -2
- package/detail/pod.vue +2 -2
- package/detail/provisioning.cattle.io.cluster.vue +3 -47
- package/detail/service.vue +10 -1
- package/detail/workload/index.vue +8 -2
- package/dialog/ExtensionCatalogUninstallDialog.vue +7 -4
- package/dialog/GenericPrompt.vue +1 -1
- package/dialog/ImportDialog.vue +8 -8
- package/dialog/OidcClientSecretDialog.vue +117 -0
- package/dialog/RotateEncryptionKeyDialog.vue +10 -30
- package/edit/__tests__/cis.cattle.io.clusterscan.test.ts +3 -3
- package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +5 -2
- package/edit/auth/ldap/__tests__/config.test.ts +14 -0
- package/edit/auth/ldap/config.vue +24 -0
- package/edit/autoscaling.horizontalpodautoscaler/index.vue +4 -1
- package/edit/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +30 -31
- package/edit/{cis.cattle.io.clusterscanbenchmark.vue → compliance.cattle.io.clusterscanbenchmark.vue} +4 -4
- package/edit/{cis.cattle.io.clusterscanprofile.vue → compliance.cattle.io.clusterscanprofile.vue} +5 -5
- package/edit/configmap.vue +8 -2
- package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
- package/edit/fleet.cattle.io.gitrepo.vue +44 -222
- package/edit/fleet.cattle.io.helmop.vue +44 -269
- package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
- package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
- package/edit/logging-flow/index.vue +1 -0
- package/edit/logging.banzaicloud.io.output/index.vue +1 -0
- package/edit/management.cattle.io.fleetworkspace.vue +1 -0
- package/edit/management.cattle.io.oidcclient.vue +162 -0
- package/edit/management.cattle.io.project.vue +4 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +5 -0
- package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
- package/edit/monitoring.coreos.com.receiver/auth.vue +30 -30
- package/edit/monitoring.coreos.com.receiver/index.vue +1 -0
- package/edit/monitoring.coreos.com.receiver/types/email.vue +1 -1
- package/edit/monitoring.coreos.com.route.vue +1 -0
- package/edit/namespace.vue +1 -0
- package/edit/networking.istio.io.destinationrule/index.vue +4 -1
- package/edit/networking.k8s.io.ingress/Certificate.vue +12 -12
- package/edit/networking.k8s.io.ingress/__tests__/Certificate.test.ts +165 -0
- package/edit/networking.k8s.io.ingress/index.vue +4 -1
- package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +7 -2
- package/edit/networking.k8s.io.networkpolicy/index.vue +6 -2
- package/edit/node.vue +1 -0
- package/edit/persistentvolume/index.vue +4 -1
- package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +3 -2
- package/edit/provisioning.cattle.io.cluster/rke2.vue +516 -426
- package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +48 -39
- package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +5 -0
- package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +2 -2
- package/edit/resources.cattle.io.restore.vue +1 -1
- package/edit/secret/basic.vue +1 -0
- package/edit/secret/index.vue +127 -15
- package/edit/service.vue +4 -1
- package/edit/serviceaccount.vue +4 -1
- package/edit/storage.k8s.io.storageclass/index.vue +4 -1
- package/edit/workload/index.vue +5 -0
- package/list/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +2 -2
- package/list/management.cattle.io.oidcclient.vue +108 -0
- package/list/node.vue +2 -0
- package/list/projectsecret.vue +345 -0
- package/list/secret.vue +109 -0
- package/machine-config/amazonec2.vue +3 -24
- package/machine-config/components/GCEImage.vue +374 -0
- package/machine-config/google.vue +617 -0
- package/mixins/__tests__/brand.spec.ts +170 -0
- package/mixins/brand.js +16 -17
- package/mixins/create-edit-view/impl.js +10 -1
- package/mixins/create-edit-view/index.js +5 -0
- package/mixins/resource-fetch-api-pagination.js +24 -8
- package/mixins/resource-fetch.js +3 -1
- package/mixins/vue-select-overrides.js +1 -0
- package/models/cluster.x-k8s.io.machinedeployment.js +11 -2
- package/models/{cis.cattle.io.clusterscan.js → compliance.cattle.io.clusterscan.js} +8 -8
- package/models/{cis.cattle.io.clusterscanbenchmark.js → compliance.cattle.io.clusterscanbenchmark.js} +1 -1
- package/models/{cis.cattle.io.clusterscanprofile.js → compliance.cattle.io.clusterscanprofile.js} +5 -5
- package/models/{cis.cattle.io.clusterscanreport.js → compliance.cattle.io.clusterscanreport.js} +1 -1
- package/models/fleet-application.js +8 -79
- package/models/fleet.cattle.io.cluster.js +13 -2
- package/models/fleet.cattle.io.gitrepo.js +2 -2
- package/models/fleet.cattle.io.helmop.js +9 -39
- package/models/management.cattle.io.fleetworkspace.js +2 -1
- package/models/management.cattle.io.oidcclient.js +18 -0
- package/models/management.cattle.io.registration.js +3 -0
- package/models/provisioning.cattle.io.cluster.js +29 -33
- package/models/secret.js +157 -2
- package/models/service.js +4 -0
- package/models/workload.js +5 -0
- package/package.json +2 -2
- package/pages/about.vue +4 -58
- package/pages/auth/login.vue +1 -1
- package/pages/c/_cluster/apps/charts/AddRepoLink.vue +0 -1
- package/pages/c/_cluster/apps/charts/index.vue +296 -81
- package/pages/c/_cluster/auth/user.retention/index.vue +87 -78
- package/pages/c/_cluster/explorer/index.vue +3 -3
- package/pages/c/_cluster/explorer/projectsecret.vue +34 -0
- package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -1
- package/pages/c/_cluster/fleet/application/create.vue +3 -2
- package/pages/c/_cluster/fleet/index.vue +94 -57
- package/pages/c/_cluster/fleet/settings/index.vue +229 -0
- package/pages/c/_cluster/longhorn/index.vue +5 -2
- package/pages/c/_cluster/uiplugins/CatalogList/index.vue +16 -1
- package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +2 -2
- package/pages/explorer/resource/detail/configmap.vue +30 -7
- package/pages/explorer/resource/detail/projectsecret.vue +9 -0
- package/pages/explorer/resource/detail/secret.vue +63 -0
- package/pages/home.vue +9 -55
- package/pages/support/index.vue +4 -6
- package/plugins/dashboard-store/__tests__/normalize.test.ts +223 -0
- package/plugins/dashboard-store/__tests__/resource-class.test.ts +191 -0
- package/plugins/dashboard-store/__tests__/utils/normalize-usecases.ts +1526 -0
- package/plugins/dashboard-store/actions.js +19 -5
- package/plugins/dashboard-store/getters.js +4 -0
- package/plugins/dashboard-store/normalize.js +29 -17
- package/plugins/dashboard-store/resource-class.js +68 -19
- package/plugins/steve/steve-pagination-utils.ts +38 -19
- package/plugins/steve/subscribe.js +6 -1
- package/rancher-components/Banner/Banner.vue +13 -0
- package/rancher-components/Form/Checkbox/Checkbox.vue +9 -4
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +1 -1
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +1 -0
- package/rancher-components/RcItemCard/RcItemCard.vue +8 -3
- package/store/auth.js +2 -0
- package/store/catalog.js +23 -1
- package/store/growl.js +97 -8
- package/store/index.js +6 -0
- package/store/notifications.ts +426 -0
- package/store/prefs.js +0 -1
- package/store/type-map.js +19 -16
- package/store/uiplugins.ts +15 -1
- package/types/fleet.d.ts +24 -0
- package/types/kube/kube-api.ts +12 -0
- package/types/notifications/index.ts +74 -0
- package/types/shell/index.d.ts +661 -589
- package/types/store/dashboard-store.types.ts +16 -0
- package/types/store/pagination.types.ts +16 -6
- package/utils/__tests__/create-yaml.test.ts +235 -0
- package/utils/__tests__/fleet.test.ts +148 -0
- package/utils/__tests__/object.test.ts +54 -1
- package/utils/__tests__/string.test.ts +273 -1
- package/utils/__tests__/time.test.ts +31 -0
- package/utils/auth.js +9 -2
- package/utils/create-yaml.js +103 -9
- package/utils/crypto/encryption.ts +103 -0
- package/utils/cspAdaptor.ts +51 -0
- package/utils/fleet.ts +54 -65
- package/utils/object.js +36 -0
- package/utils/pagination-utils.ts +19 -1
- package/utils/release-notes.ts +48 -0
- package/utils/selector-typed.ts +7 -2
- package/utils/string.js +24 -0
- package/utils/{time.js → time.ts} +25 -6
- package/utils/uiplugins.ts +22 -0
- package/utils/validators/formRules/index.ts +3 -0
- package/components/Resource/Detail/TitleBar/composable.ts +0 -31
- package/config/product/legacy.js +0 -62
- package/models/etcdbackup.js +0 -45
- package/pages/c/_cluster/legacy/pages/_page.vue +0 -29
- package/pages/c/_cluster/legacy/project/_page.vue +0 -57
- package/pages/c/_cluster/legacy/project/index.vue +0 -32
- package/pages/c/_cluster/legacy/project/pipelines.vue +0 -96
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DSL } from '@shell/store/type-map';
|
|
2
|
-
import { MANAGEMENT, HELM } from '@shell/config/types';
|
|
2
|
+
import { FLEET, MANAGEMENT, HELM } from '@shell/config/types';
|
|
3
3
|
import {
|
|
4
4
|
STATE,
|
|
5
5
|
FEATURE_DESCRIPTION,
|
|
@@ -35,7 +35,7 @@ export function init(store) {
|
|
|
35
35
|
labelKey: 'advancedSettings.label',
|
|
36
36
|
name: 'settings',
|
|
37
37
|
namespaced: false,
|
|
38
|
-
weight:
|
|
38
|
+
weight: 101,
|
|
39
39
|
icon: 'folder',
|
|
40
40
|
route: {
|
|
41
41
|
name: 'c-cluster-product-resource',
|
|
@@ -51,7 +51,7 @@ export function init(store) {
|
|
|
51
51
|
labelKey: 'featureFlags.label',
|
|
52
52
|
name: 'features',
|
|
53
53
|
namespaced: false,
|
|
54
|
-
weight:
|
|
54
|
+
weight: 100,
|
|
55
55
|
icon: 'folder',
|
|
56
56
|
route: {
|
|
57
57
|
name: 'c-cluster-product-resource',
|
|
@@ -64,22 +64,22 @@ export function init(store) {
|
|
|
64
64
|
|
|
65
65
|
virtualType({
|
|
66
66
|
ifHaveType: MANAGEMENT.SETTING,
|
|
67
|
-
labelKey: '
|
|
68
|
-
name: '
|
|
67
|
+
labelKey: 'banner.settingName',
|
|
68
|
+
name: 'banners',
|
|
69
69
|
namespaced: false,
|
|
70
|
-
weight:
|
|
70
|
+
weight: 99,
|
|
71
71
|
icon: 'folder',
|
|
72
|
-
route: { name: 'c-cluster-settings-
|
|
72
|
+
route: { name: 'c-cluster-settings-banners' }
|
|
73
73
|
});
|
|
74
74
|
|
|
75
75
|
virtualType({
|
|
76
76
|
ifHaveType: MANAGEMENT.SETTING,
|
|
77
|
-
labelKey: '
|
|
78
|
-
name: '
|
|
77
|
+
labelKey: 'branding.label',
|
|
78
|
+
name: 'brand',
|
|
79
79
|
namespaced: false,
|
|
80
80
|
weight: 98,
|
|
81
81
|
icon: 'folder',
|
|
82
|
-
route: { name: 'c-cluster-settings-
|
|
82
|
+
route: { name: 'c-cluster-settings-brand' }
|
|
83
83
|
});
|
|
84
84
|
|
|
85
85
|
virtualType({
|
|
@@ -102,13 +102,24 @@ export function init(store) {
|
|
|
102
102
|
route: { name: 'c-cluster-settings-links' }
|
|
103
103
|
});
|
|
104
104
|
|
|
105
|
+
virtualType({
|
|
106
|
+
ifHaveType: FLEET.GIT_REPO,
|
|
107
|
+
labelKey: 'fleet.settings.label',
|
|
108
|
+
name: 'fleet-settings',
|
|
109
|
+
namespaced: false,
|
|
110
|
+
weight: 95,
|
|
111
|
+
icon: 'folder',
|
|
112
|
+
route: { name: 'c-cluster-settings-fleet' }
|
|
113
|
+
});
|
|
114
|
+
|
|
105
115
|
basicType([
|
|
106
116
|
'settings',
|
|
107
117
|
'features',
|
|
108
118
|
'brand',
|
|
109
119
|
'banners',
|
|
110
120
|
'performance',
|
|
111
|
-
'links'
|
|
121
|
+
'links',
|
|
122
|
+
'fleet-settings'
|
|
112
123
|
]);
|
|
113
124
|
|
|
114
125
|
configureType(MANAGEMENT.SETTING, {
|
package/config/query-params.js
CHANGED
|
@@ -79,3 +79,16 @@ export const CLOUD_CREDENTIAL = 'cloud';
|
|
|
79
79
|
// NAMESPACE/PROJECT
|
|
80
80
|
export const PROJECT_ID = 'projectId';
|
|
81
81
|
export const FLAT_VIEW = 'flatView';
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Used on the secret create/edit page to determine
|
|
85
|
+
* 1. if the user is creating a normal secret, or a project scoped secret
|
|
86
|
+
* 2. where to return the user on cancel/save
|
|
87
|
+
*/
|
|
88
|
+
export const SECRET_QUERY_PARAMS = {
|
|
89
|
+
NAMESPACED: 'namespaced',
|
|
90
|
+
PROJECT_SCOPED: 'project-scoped'
|
|
91
|
+
};
|
|
92
|
+
export const SECRET_SCOPE = 'scope';
|
|
93
|
+
// RANCHER OIDC CLIENT
|
|
94
|
+
export const RANCHER_AS_OIDC_QUERY_PARAMS = ['scope', 'client_id', 'redirect_uri', 'response_type'];
|
package/config/roles.ts
CHANGED
|
@@ -1,12 +1,58 @@
|
|
|
1
1
|
import { routeRequiresAuthentication } from '@shell/utils/router';
|
|
2
2
|
import { isLoggedIn, notLoggedIn, noAuth, findMe } from '@shell/utils/auth';
|
|
3
|
+
import { RANCHER_AS_OIDC_QUERY_PARAMS } from '@shell/config/query-params';
|
|
4
|
+
|
|
5
|
+
const R_OIDC_PROV_PARAMS = 'rancher-as-oidc-prov-params';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Detect if we've come from an OIDC client
|
|
9
|
+
*/
|
|
10
|
+
function isRancherOidcProviderLogin(queryParams) {
|
|
11
|
+
return queryParams && Object.keys(queryParams).length && RANCHER_AS_OIDC_QUERY_PARAMS.every((item) => Object.keys(queryParams).includes(item));
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* If we've logged in on a request from an OIDC client return to it
|
|
16
|
+
*/
|
|
17
|
+
function handleOidcRedirectToCallbackUrl() {
|
|
18
|
+
const rancherAsOidcProvider = sessionStorage.getItem(R_OIDC_PROV_PARAMS);
|
|
19
|
+
|
|
20
|
+
if (rancherAsOidcProvider) {
|
|
21
|
+
window.location.href = `${ window.location.origin }/oidc/authorize${ rancherAsOidcProvider }&code_challenge_method=S256`;
|
|
22
|
+
sessionStorage.removeItem(R_OIDC_PROV_PARAMS);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
3
25
|
|
|
4
26
|
export function install(router, context) {
|
|
5
27
|
router.beforeEach(async(to, from, next) => await authenticate(to, from, next, context));
|
|
6
28
|
}
|
|
7
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Generate an object that includes both the v3User and the me data
|
|
32
|
+
* @param {*} v3User V3 user information
|
|
33
|
+
* @param {*} me Me user data
|
|
34
|
+
* @returns User info to be passed to `isLoggedIn`
|
|
35
|
+
*/
|
|
36
|
+
function getUserObject(v3User, me) {
|
|
37
|
+
return {
|
|
38
|
+
id: me.id,
|
|
39
|
+
me,
|
|
40
|
+
v3User,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
|
|
8
44
|
export async function authenticate(to, from, next, { store }) {
|
|
9
45
|
if (!routeRequiresAuthentication(to)) {
|
|
46
|
+
if (to.name === 'auth-login') {
|
|
47
|
+
if (isRancherOidcProviderLogin(to.query)) {
|
|
48
|
+
// If redirected here from an oidc client persist the values we need to return to it once rancher auth is complete...
|
|
49
|
+
sessionStorage.setItem(R_OIDC_PROV_PARAMS, window.location.search);
|
|
50
|
+
} else if (sessionStorage.getItem(R_OIDC_PROV_PARAMS)) {
|
|
51
|
+
// ... otherwise clear it (to avoid a redirect to it on successful log in)
|
|
52
|
+
sessionStorage.removeItem(R_OIDC_PROV_PARAMS);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
10
56
|
return next();
|
|
11
57
|
}
|
|
12
58
|
|
|
@@ -25,10 +71,12 @@ export async function authenticate(to, from, next, { store }) {
|
|
|
25
71
|
|
|
26
72
|
if ( fromHeader === 'none' ) {
|
|
27
73
|
noAuth(store);
|
|
74
|
+
handleOidcRedirectToCallbackUrl();
|
|
28
75
|
} else if ( fromHeader === 'true' ) {
|
|
29
76
|
const me = await findMe(store);
|
|
30
77
|
|
|
31
|
-
isLoggedIn(store, me);
|
|
78
|
+
await isLoggedIn(store, getUserObject(v3User, me));
|
|
79
|
+
handleOidcRedirectToCallbackUrl();
|
|
32
80
|
} else if ( fromHeader === 'false' ) {
|
|
33
81
|
notLoggedIn(store, next, to);
|
|
34
82
|
|
|
@@ -38,7 +86,8 @@ export async function authenticate(to, from, next, { store }) {
|
|
|
38
86
|
try {
|
|
39
87
|
const me = await findMe(store);
|
|
40
88
|
|
|
41
|
-
isLoggedIn(store, me);
|
|
89
|
+
await isLoggedIn(store, getUserObject(v3User, me));
|
|
90
|
+
handleOidcRedirectToCallbackUrl();
|
|
42
91
|
} catch (e) {
|
|
43
92
|
const status = e?._status;
|
|
44
93
|
|
package/config/router/routes.js
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { NAME as APPS } from '@shell/config/product/apps';
|
|
2
2
|
import { NAME as EXPLORER } from '@shell/config/product/explorer';
|
|
3
3
|
import { NAME as MANAGER } from '@shell/config/product/manager';
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
CAPI, MANAGEMENT, BACKUP_RESTORE, COMPLIANCE, VIRTUAL_TYPES
|
|
6
|
+
} from '@shell/config/types';
|
|
5
7
|
import { NAME as AUTH } from '@shell/config/product/auth';
|
|
6
8
|
|
|
7
9
|
// All these imports are related to the install-redirect.js navigation guard.
|
|
8
10
|
import { installRedirectRouteMeta } from '@shell/config/router/navigation-guards/install-redirect';
|
|
9
11
|
import { NAME as BACKUP_NAME, CHART_NAME as BACKUP_CHART_NAME } from '@shell/config/product/backup';
|
|
10
|
-
import { NAME as
|
|
12
|
+
import { NAME as COMPLIANCE_NAME, CHART_NAME as COMPLIANCE_CHART_NAME } from '@shell/config/product/compliance';
|
|
11
13
|
import { NAME as GATEKEEPER_NAME, CHART_NAME as GATEKEEPER_CHART_NAME } from '@shell/config/product/gatekeeper';
|
|
12
14
|
import { NAME as ISTIO_NAME, CHART_NAME as ISTIO_CHART_NAME } from '@shell/config/product/istio';
|
|
13
15
|
import { NAME as LOGGING_NAME, CHART_NAME as LOGGING_CHART_NAME } from '@shell/config/product/logging';
|
|
@@ -207,17 +209,25 @@ export default [
|
|
|
207
209
|
name: 'c-cluster-backup',
|
|
208
210
|
meta: { ...installRedirectRouteMeta(BACKUP_NAME, BACKUP_CHART_NAME, BACKUP_RESTORE.BACKUP) }
|
|
209
211
|
}, {
|
|
210
|
-
path: '/c/:cluster/
|
|
211
|
-
name: 'c-cluster-
|
|
212
|
-
meta: { ...installRedirectRouteMeta(
|
|
212
|
+
path: '/c/:cluster/compliance',
|
|
213
|
+
name: 'c-cluster-compliance',
|
|
214
|
+
meta: { ...installRedirectRouteMeta(COMPLIANCE_NAME, COMPLIANCE_CHART_NAME, COMPLIANCE.CLUSTER_SCAN) }
|
|
213
215
|
}, {
|
|
214
216
|
path: '/c/:cluster/fleet',
|
|
215
217
|
component: () => interopDefault(import('@shell/pages/c/_cluster/fleet/index.vue')),
|
|
216
218
|
name: 'c-cluster-fleet',
|
|
219
|
+
meta: {
|
|
220
|
+
detailLocation: 'c-cluster-fleet-application-resource-namespace-id',
|
|
221
|
+
doneOverride: 'c-cluster-fleet',
|
|
222
|
+
},
|
|
217
223
|
}, {
|
|
218
224
|
path: '/c/:cluster/fleet/application',
|
|
219
225
|
component: () => interopDefault(import('@shell/pages/c/_cluster/fleet/application/index.vue')),
|
|
220
226
|
name: 'c-cluster-fleet-application',
|
|
227
|
+
meta: {
|
|
228
|
+
detailLocation: 'c-cluster-fleet-application-resource-namespace-id',
|
|
229
|
+
doneOverride: 'c-cluster-fleet-application',
|
|
230
|
+
},
|
|
221
231
|
}, {
|
|
222
232
|
path: '/c/:cluster/fleet/application/create',
|
|
223
233
|
component: () => interopDefault(import('@shell/pages/c/_cluster/fleet/application/create.vue')),
|
|
@@ -225,11 +235,19 @@ export default [
|
|
|
225
235
|
}, {
|
|
226
236
|
path: '/c/:cluster/fleet/application/:resource/create',
|
|
227
237
|
component: () => interopDefault(import('@shell/pages/c/_cluster/fleet/application/_resource/create.vue')),
|
|
228
|
-
name: 'c-cluster-fleet-application-resource-create'
|
|
238
|
+
name: 'c-cluster-fleet-application-resource-create',
|
|
239
|
+
meta: {
|
|
240
|
+
detailLocation: 'c-cluster-fleet-application-resource-namespace-id',
|
|
241
|
+
doneOverride: 'c-cluster-fleet-application',
|
|
242
|
+
},
|
|
229
243
|
}, {
|
|
230
244
|
path: '/c/:cluster/fleet/application/:resource/:namespace/:id?',
|
|
231
245
|
component: () => interopDefault(import('@shell/pages/c/_cluster/fleet/application/_resource/_id.vue')),
|
|
232
|
-
name: 'c-cluster-fleet-application-resource-namespace-id'
|
|
246
|
+
name: 'c-cluster-fleet-application-resource-namespace-id',
|
|
247
|
+
meta: {
|
|
248
|
+
detailLocation: 'c-cluster-fleet-application-resource-namespace-id',
|
|
249
|
+
doneOverride: 'c-cluster-fleet-application'
|
|
250
|
+
},
|
|
233
251
|
}, {
|
|
234
252
|
path: '/c/:cluster/gatekeeper',
|
|
235
253
|
component: () => interopDefault(import('@shell/pages/c/_cluster/gatekeeper/index.vue')),
|
|
@@ -240,18 +258,6 @@ export default [
|
|
|
240
258
|
component: () => interopDefault(import('@shell/pages/c/_cluster/istio/index.vue')),
|
|
241
259
|
name: 'c-cluster-istio',
|
|
242
260
|
meta: { ...installRedirectRouteMeta(ISTIO_NAME, ISTIO_CHART_NAME) }
|
|
243
|
-
}, {
|
|
244
|
-
path: '/c/:cluster/legacy',
|
|
245
|
-
redirect(to) {
|
|
246
|
-
return {
|
|
247
|
-
name: 'c-cluster-legacy-project',
|
|
248
|
-
params: {
|
|
249
|
-
...(to?.params || {}),
|
|
250
|
-
product: EXPLORER,
|
|
251
|
-
}
|
|
252
|
-
};
|
|
253
|
-
},
|
|
254
|
-
name: 'c-cluster-legacy'
|
|
255
261
|
}, {
|
|
256
262
|
path: '/c/:cluster/logging',
|
|
257
263
|
component: () => interopDefault(import('@shell/pages/c/_cluster/logging/index.vue')),
|
|
@@ -309,6 +315,20 @@ export default [
|
|
|
309
315
|
component: () => interopDefault(import('@shell/pages/c/_cluster/apps/charts/install.vue')),
|
|
310
316
|
name: 'c-cluster-apps-charts-install',
|
|
311
317
|
},
|
|
318
|
+
{
|
|
319
|
+
path: '/c/:cluster/apps/catalog.cattle.io.clusterrepo',
|
|
320
|
+
name: 'c-cluster-apps-catalog-repo',
|
|
321
|
+
redirect(to) {
|
|
322
|
+
return {
|
|
323
|
+
name: 'c-cluster-product-resource',
|
|
324
|
+
params: {
|
|
325
|
+
...to.params,
|
|
326
|
+
product: APPS,
|
|
327
|
+
resource: 'catalog.cattle.io.clusterrepo',
|
|
328
|
+
}
|
|
329
|
+
};
|
|
330
|
+
},
|
|
331
|
+
},
|
|
312
332
|
]
|
|
313
333
|
},
|
|
314
334
|
{
|
|
@@ -331,10 +351,6 @@ export default [
|
|
|
331
351
|
path: '/c/:cluster/gatekeeper/constraints',
|
|
332
352
|
component: () => interopDefault(import('@shell/pages/c/_cluster/gatekeeper/constraints/index.vue')),
|
|
333
353
|
name: 'c-cluster-gatekeeper-constraints'
|
|
334
|
-
}, {
|
|
335
|
-
path: '/c/:cluster/legacy/project',
|
|
336
|
-
component: () => interopDefault(import('@shell/pages/c/_cluster/legacy/project/index.vue')),
|
|
337
|
-
name: 'c-cluster-legacy-project'
|
|
338
354
|
}, {
|
|
339
355
|
path: '/c/:cluster/manager/cloudCredential',
|
|
340
356
|
component: () => interopDefault(import('@shell/pages/c/_cluster/manager/cloudCredential/index.vue')),
|
|
@@ -379,6 +395,10 @@ export default [
|
|
|
379
395
|
path: '/c/:cluster/settings/performance',
|
|
380
396
|
component: () => interopDefault(import('@shell/pages/c/_cluster/settings/performance.vue')),
|
|
381
397
|
name: 'c-cluster-settings-performance'
|
|
398
|
+
}, {
|
|
399
|
+
path: '/c/:cluster/settings/fleet',
|
|
400
|
+
component: () => interopDefault(import('@shell/pages/c/_cluster/fleet/settings/index.vue')),
|
|
401
|
+
name: 'c-cluster-settings-fleet'
|
|
382
402
|
}, {
|
|
383
403
|
path: '/c/:cluster/auth/group.principal/assign-edit',
|
|
384
404
|
component: () => interopDefault(import('@shell/pages/c/_cluster/auth/group.principal/assign-edit.vue')),
|
|
@@ -416,14 +436,6 @@ export default [
|
|
|
416
436
|
path: '/c/:cluster/auth/config/:id',
|
|
417
437
|
component: () => interopDefault(import('@shell/pages/c/_cluster/auth/config/_id.vue')),
|
|
418
438
|
name: 'c-cluster-auth-config-id'
|
|
419
|
-
}, {
|
|
420
|
-
path: '/c/:cluster/legacy/pages/:page?',
|
|
421
|
-
component: () => interopDefault(import('@shell/pages/c/_cluster/legacy/pages/_page.vue')),
|
|
422
|
-
name: 'c-cluster-legacy-pages-page'
|
|
423
|
-
}, {
|
|
424
|
-
path: '/c/:cluster/legacy/project/:page',
|
|
425
|
-
component: () => interopDefault(import('@shell/pages/c/_cluster/legacy/project/_page.vue')),
|
|
426
|
-
name: 'c-cluster-legacy-project-page'
|
|
427
439
|
}, {
|
|
428
440
|
path: '/c/:cluster/manager/cloudCredential/:id',
|
|
429
441
|
component: () => interopDefault(import('@shell/pages/c/_cluster/manager/cloudCredential/_id.vue')),
|
|
@@ -497,6 +509,10 @@ export default [
|
|
|
497
509
|
component: () => interopDefault(import('@shell/pages/c/_cluster/_product/_resource/_id.vue')),
|
|
498
510
|
name: 'c-cluster-product-resource-id',
|
|
499
511
|
meta: { asyncSetup: true }
|
|
512
|
+
}, {
|
|
513
|
+
path: `/c/:cluster/:product/${ VIRTUAL_TYPES.PROJECT_SECRETS }/:namespace/:id`,
|
|
514
|
+
component: () => interopDefault(import(`@shell/pages/c/_cluster/explorer/${ VIRTUAL_TYPES.PROJECT_SECRETS }.vue`)),
|
|
515
|
+
name: `c-cluster-product-${ VIRTUAL_TYPES.PROJECT_SECRETS }-namespace-id`,
|
|
500
516
|
}, {
|
|
501
517
|
path: '/c/:cluster/:product/:resource/:namespace/:id',
|
|
502
518
|
component: () => interopDefault(import('@shell/pages/c/_cluster/_product/_resource/_namespace/_id.vue')),
|
package/config/settings.ts
CHANGED
|
@@ -45,11 +45,11 @@ export const SETTING = {
|
|
|
45
45
|
AUTH_TOKEN_MAX_TTL_MINUTES: 'auth-token-max-ttl-minutes',
|
|
46
46
|
KUBECONFIG_GENERATE_TOKEN: 'kubeconfig-generate-token',
|
|
47
47
|
KUBECONFIG_DEFAULT_TOKEN_TTL_MINUTES: 'kubeconfig-default-token-ttl-minutes',
|
|
48
|
-
ENGINE_URL: 'engine-install-url',
|
|
49
48
|
ENGINE_ISO_URL: 'engine-iso-url',
|
|
50
49
|
FIRST_LOGIN: 'first-login',
|
|
51
50
|
INGRESS_IP_DOMAIN: 'ingress-ip-domain',
|
|
52
51
|
SERVER_URL: 'server-url',
|
|
52
|
+
RKE_METADATA_CONFIG: 'rke-metadata-config',
|
|
53
53
|
EULA_AGREED: 'eula-agreed',
|
|
54
54
|
AUTH_USER_INFO_MAX_AGE_SECONDS: 'auth-user-info-max-age-seconds',
|
|
55
55
|
AUTH_USER_SESSION_TTL_MINUTES: 'auth-user-session-ttl-minutes',
|
|
@@ -106,6 +106,7 @@ export const SETTING = {
|
|
|
106
106
|
DISABLE_INACTIVE_USER_AFTER: 'disable-inactive-user-after',
|
|
107
107
|
DELETE_INACTIVE_USER_AFTER: 'delete-inactive-user-after',
|
|
108
108
|
K3S_UPGRADER_UNINSTALL_CONCURRENCY: 'k3s-based-upgrader-uninstall-concurrency',
|
|
109
|
+
SYSTEM_AGENT_UPGRADER_INSTALL_CONCURRENCY: 'system-agent-upgrader-install-concurrency',
|
|
109
110
|
IMPORTED_CLUSTER_VERSION_MANAGEMENT: 'imported-cluster-version-management',
|
|
110
111
|
CLUSTER_AGENT_DEFAULT_PRIORITY_CLASS: 'cluster-agent-default-priority-class',
|
|
111
112
|
CLUSTER_AGENT_DEFAULT_POD_DISTRIBUTION_BUDGET: 'cluster-agent-default-pod-disruption-budget'
|
|
@@ -114,7 +115,6 @@ export const SETTING = {
|
|
|
114
115
|
// These are the settings that are allowed to be edited via the UI
|
|
115
116
|
export const ALLOWED_SETTINGS: GlobalSetting = {
|
|
116
117
|
[SETTING.CA_CERTS]: { kind: 'multiline', readOnly: true },
|
|
117
|
-
[SETTING.ENGINE_URL]: {},
|
|
118
118
|
[SETTING.ENGINE_ISO_URL]: {},
|
|
119
119
|
[SETTING.PASSWORD_MIN_LENGTH]: {
|
|
120
120
|
kind: 'integer',
|
|
@@ -146,6 +146,7 @@ export const ALLOWED_SETTINGS: GlobalSetting = {
|
|
|
146
146
|
[SETTING.KUBECONFIG_DEFAULT_TOKEN_TTL_MINUTES]: { kind: 'integer' },
|
|
147
147
|
[SETTING.AUTH_USER_INFO_RESYNC_CRON]: {},
|
|
148
148
|
[SETTING.SERVER_URL]: { kind: 'url', canReset: true },
|
|
149
|
+
[SETTING.RKE_METADATA_CONFIG]: { kind: 'json' },
|
|
149
150
|
[SETTING.SYSTEM_DEFAULT_REGISTRY]: {},
|
|
150
151
|
[SETTING.UI_INDEX]: {},
|
|
151
152
|
[SETTING.UI_DASHBOARD_INDEX]: {},
|
|
@@ -160,6 +161,10 @@ export const ALLOWED_SETTINGS: GlobalSetting = {
|
|
|
160
161
|
options: ['strict', 'system-store'],
|
|
161
162
|
warning: 'agent-tls-mode'
|
|
162
163
|
},
|
|
164
|
+
[SETTING.SYSTEM_AGENT_UPGRADER_INSTALL_CONCURRENCY]: {
|
|
165
|
+
kind: 'integer',
|
|
166
|
+
ruleSet: [{ name: 'minValue', factoryArg: 1 }]
|
|
167
|
+
},
|
|
163
168
|
[SETTING.K3S_UPGRADER_UNINSTALL_CONCURRENCY]: {
|
|
164
169
|
kind: 'integer',
|
|
165
170
|
ruleSet: [{ name: 'minValue', factoryArg: 1 }]
|
|
@@ -170,7 +175,20 @@ export const ALLOWED_SETTINGS: GlobalSetting = {
|
|
|
170
175
|
|
|
171
176
|
};
|
|
172
177
|
|
|
173
|
-
|
|
178
|
+
/**
|
|
179
|
+
* Show settings in a special cluster provisioning section
|
|
180
|
+
*
|
|
181
|
+
* These should probably be an option in the maps above...
|
|
182
|
+
*/
|
|
183
|
+
export const PROVISIONING_SETTINGS = [
|
|
184
|
+
SETTING.ENGINE_ISO_URL,
|
|
185
|
+
SETTING.RKE_METADATA_CONFIG,
|
|
186
|
+
SETTING.K3S_UPGRADER_UNINSTALL_CONCURRENCY,
|
|
187
|
+
SETTING.IMPORTED_CLUSTER_VERSION_MANAGEMENT,
|
|
188
|
+
SETTING.CLUSTER_AGENT_DEFAULT_PRIORITY_CLASS,
|
|
189
|
+
SETTING.CLUSTER_AGENT_DEFAULT_POD_DISTRIBUTION_BUDGET
|
|
190
|
+
];
|
|
191
|
+
|
|
174
192
|
/**
|
|
175
193
|
* Settings on how to handle warnings returning in api responses, specifically which to show as growls
|
|
176
194
|
*/
|
package/config/store.js
CHANGED
|
@@ -38,6 +38,7 @@ let store = {};
|
|
|
38
38
|
resolveStoreModules(require('../store/wm.js'), 'wm.js');
|
|
39
39
|
resolveStoreModules(require('../store/customisation.js'), 'customisation.js');
|
|
40
40
|
resolveStoreModules(require('../store/cru-resource.ts'), 'cru-resource.ts');
|
|
41
|
+
resolveStoreModules(require('../store/notifications.ts'), 'notifications.ts');
|
|
41
42
|
|
|
42
43
|
// If the environment supports hot reloading...
|
|
43
44
|
|
|
@@ -67,6 +68,7 @@ let store = {};
|
|
|
67
68
|
'../store/wm.js',
|
|
68
69
|
'../store/customisation.js',
|
|
69
70
|
'../store/cru-resource.ts',
|
|
71
|
+
'../store/notifications.ts',
|
|
70
72
|
], () => {
|
|
71
73
|
// Update `root.modules` with the latest definitions.
|
|
72
74
|
updateModules();
|
package/config/table-headers.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CATTLE_PUBLIC_ENDPOINTS } from '@shell/config/labels-annotations';
|
|
1
|
+
import { CATTLE_PUBLIC_ENDPOINTS, UI_PROJECT_SECRET_COPY } from '@shell/config/labels-annotations';
|
|
2
2
|
import { NODE as NODE_TYPE } from '@shell/config/types';
|
|
3
3
|
import { COLUMN_BREAKPOINTS } from '@shell/types/store/type-map';
|
|
4
4
|
|
|
@@ -383,6 +383,29 @@ export const SECRET_DATA = {
|
|
|
383
383
|
formatter: 'SecretData'
|
|
384
384
|
};
|
|
385
385
|
|
|
386
|
+
export const SECRET_CLONE = {
|
|
387
|
+
name: 'secret-clone',
|
|
388
|
+
labelKey: 'tableHeaders.secret.project-clone',
|
|
389
|
+
tooltip: 'tableHeaders.secret.project-clone-tooltip',
|
|
390
|
+
value: 'isProjectSecretCopy',
|
|
391
|
+
sort: `metadata.annotations."${ UI_PROJECT_SECRET_COPY }"`,
|
|
392
|
+
search: false,
|
|
393
|
+
formatter: 'Checked',
|
|
394
|
+
};
|
|
395
|
+
|
|
396
|
+
export const SECRET_PROJECT_SCOPED = {
|
|
397
|
+
name: 'secret-project-scoped',
|
|
398
|
+
labelKey: 'tableHeaders.secret.project-scoped',
|
|
399
|
+
tooltip: 'tableHeaders.secret.project-scoped-tooltip',
|
|
400
|
+
value: 'clusterAndProjectLabel',
|
|
401
|
+
// Cannot _sort_ upstream secrets by if they are cluster scoped
|
|
402
|
+
// https://github.com/rancher/rancher/issues/51001
|
|
403
|
+
// metadata.labels[management.cattle.io/project-scoped-secret] - covers both cluster scoped AND clones
|
|
404
|
+
// metadata.annotations[management.cattle.io/project-scoped-secret-copy]
|
|
405
|
+
// sort: [`metadata.labels[${ UI_PROJECT_SECRET }]`, `metadata.annotations[${ UI_PROJECT_SECRET_COPY }]`],
|
|
406
|
+
search: false,
|
|
407
|
+
};
|
|
408
|
+
|
|
386
409
|
export const TARGET_KIND = {
|
|
387
410
|
name: 'target-kind',
|
|
388
411
|
labelKey: 'tableHeaders.targetKind',
|
|
@@ -784,7 +807,7 @@ export const FLEET_APPLICATION_TARGET = {
|
|
|
784
807
|
name: 'applicationTarget',
|
|
785
808
|
labelKey: 'fleet.tableHeaders.applicationTarget',
|
|
786
809
|
value: 'targetInfo.modeDisplay',
|
|
787
|
-
sort: ['targetInfo.modeDisplay'
|
|
810
|
+
sort: ['targetInfo.modeDisplay'],
|
|
788
811
|
};
|
|
789
812
|
|
|
790
813
|
export const FLEET_APPLICATION_CLUSTERS_READY = {
|
|
@@ -1102,7 +1125,7 @@ export const FLEET_REPO_TARGET = {
|
|
|
1102
1125
|
name: 'target',
|
|
1103
1126
|
labelKey: 'tableHeaders.target',
|
|
1104
1127
|
value: 'targetInfo.modeDisplay',
|
|
1105
|
-
sort: ['targetInfo.modeDisplay'
|
|
1128
|
+
sort: ['targetInfo.modeDisplay'],
|
|
1106
1129
|
};
|
|
1107
1130
|
|
|
1108
1131
|
export const FLEET_REPO = {
|
|
@@ -1145,3 +1168,9 @@ export const UI_PLUGIN_CATALOG = [
|
|
|
1145
1168
|
value: 'repo.metadata.name'
|
|
1146
1169
|
}
|
|
1147
1170
|
];
|
|
1171
|
+
|
|
1172
|
+
// SECRETS
|
|
1173
|
+
export const PROJECT = {
|
|
1174
|
+
name: 'project',
|
|
1175
|
+
labelKey: 'tableHeaders.project',
|
|
1176
|
+
};
|
package/config/types.js
CHANGED
|
@@ -14,7 +14,6 @@ export const STEVE = {
|
|
|
14
14
|
export const NORMAN = {
|
|
15
15
|
APP: 'app',
|
|
16
16
|
AUTH_CONFIG: 'authconfig',
|
|
17
|
-
ETCD_BACKUP: 'etcdbackup',
|
|
18
17
|
CLUSTER: 'cluster',
|
|
19
18
|
CLUSTER_TOKEN: 'clusterregistrationtoken',
|
|
20
19
|
CLUSTER_ROLE_TEMPLATE_BINDING: 'clusterroletemplatebinding',
|
|
@@ -134,6 +133,14 @@ export const CATALOG = {
|
|
|
134
133
|
REPO: 'catalog.cattle.io.repo',
|
|
135
134
|
};
|
|
136
135
|
|
|
136
|
+
// Charts/Apps
|
|
137
|
+
export const CATALOG_SORT_OPTIONS = {
|
|
138
|
+
RECOMMENDED: 'recommended',
|
|
139
|
+
LAST_UPDATED_DESC: 'lastupdatedDescending',
|
|
140
|
+
ALPHABETICAL_ASC: 'alphaAscending',
|
|
141
|
+
ALPHABETICAL_DESC: 'alphaDescending'
|
|
142
|
+
};
|
|
143
|
+
|
|
137
144
|
// UI Plugin type
|
|
138
145
|
export const UI_PLUGIN = 'catalog.cattle.io.uiplugin';
|
|
139
146
|
|
|
@@ -211,7 +218,8 @@ export const MANAGEMENT = {
|
|
|
211
218
|
GLOBAL_DNS_PROVIDER: 'management.cattle.io.globaldnsprovider',
|
|
212
219
|
RKE_TEMPLATE: 'management.cattle.io.clustertemplate',
|
|
213
220
|
RKE_TEMPLATE_REVISION: 'management.cattle.io.clustertemplaterevision',
|
|
214
|
-
CLUSTER_PROXY_CONFIG: 'management.cattle.io.clusterproxyconfig'
|
|
221
|
+
CLUSTER_PROXY_CONFIG: 'management.cattle.io.clusterproxyconfig',
|
|
222
|
+
OIDC_CLIENT: 'management.cattle.io.oidcclient'
|
|
215
223
|
};
|
|
216
224
|
|
|
217
225
|
export const CAPI = {
|
|
@@ -294,11 +302,11 @@ export const BACKUP_RESTORE = {
|
|
|
294
302
|
RESTORE: 'resources.cattle.io.restore',
|
|
295
303
|
};
|
|
296
304
|
|
|
297
|
-
export const
|
|
298
|
-
CLUSTER_SCAN: '
|
|
299
|
-
CLUSTER_SCAN_PROFILE: '
|
|
300
|
-
BENCHMARK: '
|
|
301
|
-
REPORT: '
|
|
305
|
+
export const COMPLIANCE = {
|
|
306
|
+
CLUSTER_SCAN: 'compliance.cattle.io.clusterscan',
|
|
307
|
+
CLUSTER_SCAN_PROFILE: 'compliance.cattle.io.clusterscanprofile',
|
|
308
|
+
BENCHMARK: 'compliance.cattle.io.clusterscanbenchmark',
|
|
309
|
+
REPORT: 'compliance.cattle.io.clusterscanreport'
|
|
302
310
|
};
|
|
303
311
|
|
|
304
312
|
export const UI = { NAV_LINK: 'ui.cattle.io.navlink' };
|
|
@@ -307,6 +315,7 @@ export const VIRTUAL_TYPES = {
|
|
|
307
315
|
CLUSTER_MEMBERS: 'cluster-members',
|
|
308
316
|
PROJECT_NAMESPACES: 'projects-namespaces',
|
|
309
317
|
NAMESPACES: 'namespaces',
|
|
318
|
+
PROJECT_SECRETS: 'projectsecret',
|
|
310
319
|
JWT_AUTHENTICATION: 'jwt.authentication'
|
|
311
320
|
};
|
|
312
321
|
|
package/config/version.js
CHANGED
package/core/plugin.ts
CHANGED
|
@@ -14,7 +14,8 @@ import {
|
|
|
14
14
|
ExtensionPoint,
|
|
15
15
|
TabLocation,
|
|
16
16
|
ModelExtensionConstructor,
|
|
17
|
-
PluginRouteRecordRaw, RegisterStore, UnregisterStore, CoreStoreSpecifics, CoreStoreConfig,
|
|
17
|
+
PluginRouteRecordRaw, RegisterStore, UnregisterStore, CoreStoreSpecifics, CoreStoreConfig,
|
|
18
|
+
NavHooks, OnNavToPackage, OnNavAwayFromPackage, OnLogIn, OnLogOut,
|
|
18
19
|
ExtensionEnvironment
|
|
19
20
|
} from './types';
|
|
20
21
|
import coreStore, { coreStoreModule, coreStoreState } from '@shell/plugins/dashboard-store';
|
|
@@ -43,6 +44,7 @@ export class Plugin implements IPlugin {
|
|
|
43
44
|
public onEnter: OnNavToPackage = () => Promise.resolve();
|
|
44
45
|
public onLeave: OnNavAwayFromPackage = () => Promise.resolve();
|
|
45
46
|
public _onLogOut: OnLogOut = () => Promise.resolve();
|
|
47
|
+
public onLogIn: OnLogIn = () => Promise.resolve();
|
|
46
48
|
|
|
47
49
|
public uiConfig: { [key: string]: any } = {};
|
|
48
50
|
|
|
@@ -314,13 +316,36 @@ export class Plugin implements IPlugin {
|
|
|
314
316
|
}
|
|
315
317
|
|
|
316
318
|
public addNavHooks(
|
|
317
|
-
onEnter
|
|
318
|
-
onLeave
|
|
319
|
-
onLogOut
|
|
319
|
+
onEnter?: OnNavToPackage | NavHooks,
|
|
320
|
+
onLeave?: OnNavAwayFromPackage,
|
|
321
|
+
onLogOut?: OnLogOut,
|
|
322
|
+
onLogIn?: OnLogIn,
|
|
320
323
|
): void {
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
+
if (typeof onEnter === 'object') {
|
|
325
|
+
const hooks = onEnter as NavHooks;
|
|
326
|
+
|
|
327
|
+
if (hooks.onEnter) {
|
|
328
|
+
this.onEnter = hooks.onEnter;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
if (hooks.onLeave) {
|
|
332
|
+
this.onLeave = hooks.onLeave;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
if (hooks.onLogout) {
|
|
336
|
+
this._onLogOut = hooks.onLogout;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
if (hooks.onLogin) {
|
|
340
|
+
this.onLogIn = hooks.onLogin;
|
|
341
|
+
}
|
|
342
|
+
} else {
|
|
343
|
+
// No first arg, or first arg is not an object, so this is the legacy invocation
|
|
344
|
+
this.onEnter = (onEnter as OnNavToPackage) || (() => Promise.resolve());
|
|
345
|
+
this.onLeave = onLeave || (() => Promise.resolve());
|
|
346
|
+
this._onLogOut = onLogOut || (() => Promise.resolve());
|
|
347
|
+
this.onLogIn = onLogIn || (() => Promise.resolve());
|
|
348
|
+
}
|
|
324
349
|
}
|
|
325
350
|
|
|
326
351
|
public async onLogOut(store: any) {
|
package/core/types.ts
CHANGED
|
@@ -39,6 +39,17 @@ export type OnEnterLeavePackageConfig = {
|
|
|
39
39
|
export type OnNavToPackage = (store: any, config: OnEnterLeavePackageConfig) => Promise<void>;
|
|
40
40
|
export type OnNavAwayFromPackage = (store: any, config: OnEnterLeavePackageConfig) => Promise<void>;
|
|
41
41
|
export type OnLogOut = (store: any) => Promise<void>;
|
|
42
|
+
export type OnLogIn = (store: any) => Promise<void>;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Navigation hooks specified as an object
|
|
46
|
+
*/
|
|
47
|
+
export type NavHooks = {
|
|
48
|
+
onEnter?: OnNavToPackage,
|
|
49
|
+
onLeave?: OnNavAwayFromPackage,
|
|
50
|
+
onLogout?: OnLogOut,
|
|
51
|
+
onLogin?: OnLogIn,
|
|
52
|
+
}
|
|
42
53
|
|
|
43
54
|
/** Enum regarding the extensible areas/places of the UI */
|
|
44
55
|
export enum ExtensionPoint {
|
|
@@ -324,6 +335,10 @@ export interface HeaderOptions {
|
|
|
324
335
|
}
|
|
325
336
|
|
|
326
337
|
export interface ConfigureTypeOptions {
|
|
338
|
+
/**
|
|
339
|
+
* Override for the create button string on a list view
|
|
340
|
+
*/
|
|
341
|
+
listCreateButtonLabelKey?: boolean;
|
|
327
342
|
/**
|
|
328
343
|
* The resource can edit/show yaml
|
|
329
344
|
*/
|
|
@@ -644,8 +659,10 @@ export interface IPlugin {
|
|
|
644
659
|
addNavHooks(
|
|
645
660
|
onEnter?: OnNavToPackage,
|
|
646
661
|
onLeave?: OnNavAwayFromPackage,
|
|
647
|
-
onLogOut?: OnLogOut
|
|
662
|
+
onLogOut?: OnLogOut,
|
|
663
|
+
onLogIn?: OnLogIn,
|
|
648
664
|
): void;
|
|
665
|
+
addNavHooks(hooks: NavHooks): void;
|
|
649
666
|
|
|
650
667
|
/**
|
|
651
668
|
* Adds a model extension
|