@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
|
@@ -57,34 +57,11 @@ export default class HelmOp extends FleetApplication {
|
|
|
57
57
|
enabled: !!this.links.update && !this.spec?.disablePolling
|
|
58
58
|
});
|
|
59
59
|
|
|
60
|
-
insertAt(out, 4, {
|
|
61
|
-
action: 'forceUpdate',
|
|
62
|
-
label: this.t('fleet.helmOp.actions.forceUpdate.label'),
|
|
63
|
-
icon: 'icon icon-refresh',
|
|
64
|
-
bulkable: true,
|
|
65
|
-
bulkAction: 'forceUpdateBulk',
|
|
66
|
-
enabled: !!this.links.update
|
|
67
|
-
});
|
|
68
|
-
|
|
69
60
|
insertAt(out, 5, { divider: true });
|
|
70
61
|
|
|
71
62
|
return out;
|
|
72
63
|
}
|
|
73
64
|
|
|
74
|
-
forceUpdate(resources = [this]) {
|
|
75
|
-
this.$dispatch('promptModal', {
|
|
76
|
-
componentProps: { helmOps: resources },
|
|
77
|
-
component: 'HelmOpForceUpdateDialog'
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
forceUpdateBulk(resources) {
|
|
82
|
-
this.$dispatch('promptModal', {
|
|
83
|
-
componentProps: { helmOps: resources },
|
|
84
|
-
component: 'HelmOpForceUpdateDialog'
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
|
|
88
65
|
get dashboardIcon() {
|
|
89
66
|
return FleetUtils.dashboardIcons[FLEET.HELM_OP];
|
|
90
67
|
}
|
|
@@ -124,7 +101,6 @@ export default class HelmOp extends FleetApplication {
|
|
|
124
101
|
|
|
125
102
|
repo = repo.replace(/.git$/, '');
|
|
126
103
|
repo = repo.replace(/^https:\/\//, '');
|
|
127
|
-
repo = repo.replace(/^oci:\/\//, '');
|
|
128
104
|
repo = repo.replace(/\/+$/, '');
|
|
129
105
|
|
|
130
106
|
return repo;
|
|
@@ -140,16 +116,16 @@ export default class HelmOp extends FleetApplication {
|
|
|
140
116
|
* chart: fleet-agent
|
|
141
117
|
* version: 0.12.1-beta.2
|
|
142
118
|
* oci:
|
|
143
|
-
*
|
|
119
|
+
* repo: oci://ghcr.io/rancher/fleet-test-configmap-chart
|
|
144
120
|
* version: the-tag
|
|
145
121
|
*/
|
|
146
122
|
get sourceType() {
|
|
147
|
-
if (this.spec.helm?.repo
|
|
148
|
-
return SOURCE_TYPE.
|
|
123
|
+
if (this.spec.helm?.repo?.startsWith('oci://')) {
|
|
124
|
+
return SOURCE_TYPE.OCI;
|
|
149
125
|
}
|
|
150
126
|
|
|
151
|
-
if (this.spec.helm?.chart
|
|
152
|
-
return SOURCE_TYPE.
|
|
127
|
+
if (this.spec.helm?.repo && this.spec.helm?.chart) {
|
|
128
|
+
return SOURCE_TYPE.REPO;
|
|
153
129
|
}
|
|
154
130
|
|
|
155
131
|
if (this.spec.helm?.chart) {
|
|
@@ -164,20 +140,14 @@ export default class HelmOp extends FleetApplication {
|
|
|
164
140
|
|
|
165
141
|
switch (this.sourceType) {
|
|
166
142
|
case SOURCE_TYPE.REPO:
|
|
143
|
+
case SOURCE_TYPE.OCI:
|
|
167
144
|
value = this.spec.helm?.repo || '';
|
|
168
145
|
break;
|
|
169
|
-
case SOURCE_TYPE.OCI: {
|
|
170
|
-
const parsed = parse(this.spec.helm?.chart || '');
|
|
171
|
-
|
|
172
|
-
value = parsed?.host ? `oci://${ parsed?.host }` : '';
|
|
173
|
-
break;
|
|
174
|
-
}
|
|
175
146
|
case SOURCE_TYPE.TARBALL:
|
|
176
|
-
value = this.spec.helm?.chart || '';
|
|
147
|
+
value = this.spec.helm?.chart || '';
|
|
177
148
|
}
|
|
178
149
|
|
|
179
150
|
const matchHttps = value.match(FleetUtils.HTTP_REGEX);
|
|
180
|
-
const matchOCI = value.match(FleetUtils.OCI_REGEX);
|
|
181
151
|
const matchSSH = value.match(FleetUtils.GIT_SSH_REGEX);
|
|
182
152
|
|
|
183
153
|
if (matchSSH) {
|
|
@@ -190,7 +160,7 @@ export default class HelmOp extends FleetApplication {
|
|
|
190
160
|
value,
|
|
191
161
|
display: this.repoDisplay(value),
|
|
192
162
|
icon: 'icon icon-application',
|
|
193
|
-
showLink: matchHttps || matchSSH
|
|
163
|
+
showLink: matchHttps || matchSSH
|
|
194
164
|
};
|
|
195
165
|
}
|
|
196
166
|
|
|
@@ -203,7 +173,7 @@ export default class HelmOp extends FleetApplication {
|
|
|
203
173
|
chart = this.spec.helm.chart || '';
|
|
204
174
|
break;
|
|
205
175
|
case SOURCE_TYPE.OCI: {
|
|
206
|
-
const parsed = parse(this.spec.helm.
|
|
176
|
+
const parsed = parse(this.spec.helm.repo || '');
|
|
207
177
|
|
|
208
178
|
chart = parsed?.path ? parsed?.path.substring(1) : '';
|
|
209
179
|
break;
|
|
@@ -15,7 +15,8 @@ export default class Workspace extends HybridModel {
|
|
|
15
15
|
const out = {
|
|
16
16
|
clusterGroups: summary[FLEET.CLUSTER_GROUP]?.namespaces?.[name]?.count || 0,
|
|
17
17
|
clusters: summary[FLEET.CLUSTER]?.namespaces?.[name]?.count || 0,
|
|
18
|
-
gitRepos: summary[FLEET.GIT_REPO]?.namespaces?.[name]?.count || 0
|
|
18
|
+
gitRepos: summary[FLEET.GIT_REPO]?.namespaces?.[name]?.count || 0,
|
|
19
|
+
helmOps: summary[FLEET.HELM_OP]?.namespaces?.[name]?.count || 0
|
|
19
20
|
};
|
|
20
21
|
|
|
21
22
|
return out;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import SteveModel from '@shell/plugins/steve/steve-class';
|
|
2
|
+
|
|
3
|
+
export default class OIDCClient extends SteveModel {
|
|
4
|
+
get details() {
|
|
5
|
+
return [
|
|
6
|
+
...this._details, {
|
|
7
|
+
label: this.t('oidcclient.redirectURIs.label'),
|
|
8
|
+
content: this.spec.redirectURIs?.join(', ')
|
|
9
|
+
}, {
|
|
10
|
+
label: this.t('oidcclient.refreshTokenExpirationSeconds.detailLabel'),
|
|
11
|
+
content: this.spec.refreshTokenExpirationSeconds
|
|
12
|
+
}, {
|
|
13
|
+
label: this.t('oidcclient.tokenExpirationSeconds.detailLabel'),
|
|
14
|
+
content: this.spec.tokenExpirationSeconds
|
|
15
|
+
}
|
|
16
|
+
];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -13,6 +13,7 @@ import { CAPI as CAPI_ANNOTATIONS, NODE_ARCHITECTURE } from '@shell/config/label
|
|
|
13
13
|
import { KEV1 } from '@shell/models/management.cattle.io.kontainerdriver';
|
|
14
14
|
|
|
15
15
|
const RKE1_ALLOWED_ACTIONS = [
|
|
16
|
+
'promptRemove',
|
|
16
17
|
'openShell',
|
|
17
18
|
'downloadKubeConfig',
|
|
18
19
|
'copyKubeConfig',
|
|
@@ -100,7 +101,7 @@ export default class ProvCluster extends SteveModel {
|
|
|
100
101
|
|
|
101
102
|
const canEditRKE2cluster = this.isRke2 && ready && this.canUpdate;
|
|
102
103
|
|
|
103
|
-
const canSnapshot = ready &&
|
|
104
|
+
const canSnapshot = ready && this.isRke2 && this.canUpdate;
|
|
104
105
|
|
|
105
106
|
const actions = [
|
|
106
107
|
// Note: Actions are not supported in the Steve API, so we check
|
|
@@ -162,8 +163,8 @@ export default class ProvCluster extends SteveModel {
|
|
|
162
163
|
|
|
163
164
|
const all = actions.concat(out);
|
|
164
165
|
|
|
165
|
-
// If the cluster is a KEV1 cluster then prevent edit
|
|
166
|
-
if (this.isKev1) {
|
|
166
|
+
// If the cluster is a KEV1 cluster or Harvester cluster then prevent edit
|
|
167
|
+
if (this.isKev1 || this.isHarvester) {
|
|
167
168
|
const edit = all.find((action) => action.action === 'goToEdit');
|
|
168
169
|
|
|
169
170
|
if (edit) {
|
|
@@ -719,7 +720,7 @@ export default class ProvCluster extends SteveModel {
|
|
|
719
720
|
async copyKubeConfig() {
|
|
720
721
|
await this.mgmt?.copyKubeConfig();
|
|
721
722
|
|
|
722
|
-
this.$dispatch('growl/
|
|
723
|
+
this.$dispatch('growl/info', {
|
|
723
724
|
title: this.t('cluster.copiedConfig'),
|
|
724
725
|
timeout: 3000,
|
|
725
726
|
}, { root: true });
|
|
@@ -736,7 +737,7 @@ export default class ProvCluster extends SteveModel {
|
|
|
736
737
|
async snapshotAction() {
|
|
737
738
|
try {
|
|
738
739
|
await this.takeSnapshot();
|
|
739
|
-
this.$dispatch('growl/
|
|
740
|
+
this.$dispatch('growl/info', {
|
|
740
741
|
title: this.$rootGetters['i18n/t']('cluster.snapshot.successTitle', { name: this.nameDisplay }),
|
|
741
742
|
message: this.$rootGetters['i18n/t']('cluster.snapshot.successMessage', { name: this.nameDisplay })
|
|
742
743
|
}, { root: true });
|
|
@@ -756,7 +757,7 @@ export default class ProvCluster extends SteveModel {
|
|
|
756
757
|
const successful = res.filter( (x) => x.status === 'fulfilled').length;
|
|
757
758
|
|
|
758
759
|
if ( successful ) {
|
|
759
|
-
this.$dispatch('growl/
|
|
760
|
+
this.$dispatch('growl/info', {
|
|
760
761
|
title: this.$rootGetters['i18n/t']('cluster.snapshot.bulkSuccessTitle'),
|
|
761
762
|
message: this.$rootGetters['i18n/t']('cluster.snapshot.bulkSuccessMessage', { count: successful })
|
|
762
763
|
}, { root: true });
|
|
@@ -822,33 +823,6 @@ export default class ProvCluster extends SteveModel {
|
|
|
822
823
|
return this._stateObj;
|
|
823
824
|
}
|
|
824
825
|
|
|
825
|
-
get rkeTemplate() {
|
|
826
|
-
if (!this.isRke1 || !this.mgmt) {
|
|
827
|
-
// Not an RKE! cluster or no management cluster available
|
|
828
|
-
return false;
|
|
829
|
-
}
|
|
830
|
-
|
|
831
|
-
if (!this.mgmt.spec?.clusterTemplateRevisionName) {
|
|
832
|
-
// Cluster does not use an RKE template
|
|
833
|
-
return false;
|
|
834
|
-
}
|
|
835
|
-
|
|
836
|
-
const clusterTemplateName = this.mgmt.spec.clusterTemplateName.replace(':', '/');
|
|
837
|
-
const clusterTemplateRevisionName = this.mgmt.spec.clusterTemplateRevisionName.replace(':', '/');
|
|
838
|
-
const template = this.$rootGetters['management/all'](MANAGEMENT.RKE_TEMPLATE).find((t) => t.id === clusterTemplateName);
|
|
839
|
-
const revision = this.$rootGetters['management/all'](MANAGEMENT.RKE_TEMPLATE_REVISION).find((t) => t.spec.enabled && t.id === clusterTemplateRevisionName);
|
|
840
|
-
|
|
841
|
-
if (!template || !revision) {
|
|
842
|
-
return false;
|
|
843
|
-
}
|
|
844
|
-
|
|
845
|
-
return {
|
|
846
|
-
displayName: `${ template.spec?.displayName }/${ revision.spec?.displayName }`,
|
|
847
|
-
template,
|
|
848
|
-
revision,
|
|
849
|
-
};
|
|
850
|
-
}
|
|
851
|
-
|
|
852
826
|
get _stateObj() {
|
|
853
827
|
if (!this.isRke2) {
|
|
854
828
|
return this.mgmt?.stateObj || this.metadata?.state;
|
|
@@ -1011,6 +985,28 @@ export default class ProvCluster extends SteveModel {
|
|
|
1011
985
|
return null;
|
|
1012
986
|
}
|
|
1013
987
|
|
|
988
|
+
/**
|
|
989
|
+
* Gets the options for fields that should be commented out in the YAML representation
|
|
990
|
+
* of the model. This is particularly useful for conditionally commenting out certain
|
|
991
|
+
* fields based on the model's configuration.
|
|
992
|
+
*
|
|
993
|
+
* @returns {null | Array.<{path: string, key: string}>}
|
|
994
|
+
* - `path`: A dot-separated string indicating the path to the object containing the key.
|
|
995
|
+
* - `key`: The specific key within the object at the given path that should be commented out.
|
|
996
|
+
*/
|
|
997
|
+
get commentFieldsOptions() {
|
|
998
|
+
if ( this.isRke2 ) {
|
|
999
|
+
return [
|
|
1000
|
+
{
|
|
1001
|
+
path: 'spec.rkeConfig.machineGlobalConfig',
|
|
1002
|
+
key: 'profile'
|
|
1003
|
+
}
|
|
1004
|
+
];
|
|
1005
|
+
}
|
|
1006
|
+
|
|
1007
|
+
return null;
|
|
1008
|
+
}
|
|
1009
|
+
|
|
1014
1010
|
// JSON Paths that should be folded in the YAML editor by default
|
|
1015
1011
|
get yamlFolding() {
|
|
1016
1012
|
return [
|
package/models/secret.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import r from 'jsrsasign';
|
|
2
|
-
import { CERTMANAGER, KUBERNETES } from '@shell/config/labels-annotations';
|
|
2
|
+
import { CERTMANAGER, KUBERNETES, UI_PROJECT_SECRET, UI_PROJECT_SECRET_COPY } from '@shell/config/labels-annotations';
|
|
3
3
|
import { base64Decode, base64Encode } from '@shell/utils/crypto';
|
|
4
4
|
import { removeObjects } from '@shell/utils/array';
|
|
5
|
-
import { SERVICE_ACCOUNT } from '@shell/config/types';
|
|
5
|
+
import { MANAGEMENT, SERVICE_ACCOUNT, VIRTUAL_TYPES } from '@shell/config/types';
|
|
6
6
|
import { set } from '@shell/utils/object';
|
|
7
7
|
import { NAME as MANAGER } from '@shell/config/product/manager';
|
|
8
8
|
import SteveModel from '@shell/plugins/steve/steve-class';
|
|
@@ -10,6 +10,8 @@ import { colorForState, stateDisplay, STATES_ENUM } from '@shell/plugins/dashboa
|
|
|
10
10
|
import { diffFrom } from '@shell/utils/time';
|
|
11
11
|
import day from 'dayjs';
|
|
12
12
|
import { steveCleanForDownload } from '@shell/plugins/steve/resource-utils';
|
|
13
|
+
import { STORE } from '@shell/store/store-types';
|
|
14
|
+
import { escapeHtml } from '@shell/utils/string';
|
|
13
15
|
|
|
14
16
|
export const TYPES = {
|
|
15
17
|
OPAQUE: 'Opaque',
|
|
@@ -159,6 +161,10 @@ export default class Secret extends SteveModel {
|
|
|
159
161
|
}
|
|
160
162
|
|
|
161
163
|
get canUpdate() {
|
|
164
|
+
if (this.isProjectSecretCopy) {
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
|
|
162
168
|
if ( !this.hasLink('update') ) {
|
|
163
169
|
return false;
|
|
164
170
|
}
|
|
@@ -170,6 +176,20 @@ export default class Secret extends SteveModel {
|
|
|
170
176
|
return this.$rootGetters['type-map/optionsFor'](this.type).isEditable;
|
|
171
177
|
}
|
|
172
178
|
|
|
179
|
+
get canDelete() {
|
|
180
|
+
// Deleting a copy / synced secret that was created in a namespace in a project that has a project scoped secret
|
|
181
|
+
// will only be temporary (the parent project scoped secret will recreate it)
|
|
182
|
+
return this.isProjectSecretCopy ? false : super.canDelete;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
get canCreate() {
|
|
186
|
+
return this.isProjectSecretCopy ? false : super.canCreate;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
get canEditYaml() {
|
|
190
|
+
return this.isProjectSecretCopy ? false : super.canEditYaml;
|
|
191
|
+
}
|
|
192
|
+
|
|
173
193
|
get keysDisplay() {
|
|
174
194
|
const keys = [
|
|
175
195
|
...Object.keys(this.data || []),
|
|
@@ -470,4 +490,139 @@ export default class Secret extends SteveModel {
|
|
|
470
490
|
|
|
471
491
|
return steveCleanForDownload(yaml, { rootKeys: ['id', 'links', 'actions'] });
|
|
472
492
|
}
|
|
493
|
+
|
|
494
|
+
/**
|
|
495
|
+
* is this a project scoped secret .... or also a cloned project scoped secret
|
|
496
|
+
*/
|
|
497
|
+
get isProjectScopedRelated() {
|
|
498
|
+
return !!this.metadata.labels?.[UI_PROJECT_SECRET];
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
/**
|
|
502
|
+
* is this a project scoped secret
|
|
503
|
+
*/
|
|
504
|
+
get isProjectScoped() {
|
|
505
|
+
return this.isProjectScopedRelated && !this.isProjectSecretCopy && this.$rootGetters['isRancher'];
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
get projectScopedClusterId() {
|
|
509
|
+
if (!this.projectScopedProjectId) {
|
|
510
|
+
return undefined;
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
const clusterId = this.metadata.namespace.replace(`-${ this.projectScopedProjectId }`, '');
|
|
514
|
+
|
|
515
|
+
// default and system pss don't follow the patter of <cluster>-<project>, so if they match assume its one of them
|
|
516
|
+
return clusterId === this.metadata.namespace ? 'local' : clusterId;
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
get projectScopedProjectId() {
|
|
520
|
+
return this.metadata.labels?.[UI_PROJECT_SECRET];
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
get isProjectSecretCopy() {
|
|
524
|
+
return this.metadata?.annotations?.[UI_PROJECT_SECRET_COPY] === 'true';
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
get projectCluster() {
|
|
528
|
+
if (!this.isProjectScoped) {
|
|
529
|
+
return undefined;
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
return this.$rootGetters[`${ STORE.MANAGEMENT }/byId`](MANAGEMENT.CLUSTER, this.projectScopedClusterId);
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
/**
|
|
536
|
+
* If this is a project scoped secret, return it
|
|
537
|
+
*/
|
|
538
|
+
get project() {
|
|
539
|
+
if (!this.isProjectScoped ) {
|
|
540
|
+
return undefined;
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
return this.$rootGetters[`${ STORE.MANAGEMENT }/byId`](MANAGEMENT.PROJECT, `${ this.projectScopedClusterId }/${ this.projectScopedProjectId }`);
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
get projectScopedSecretCluster() {
|
|
547
|
+
if (!this.isProjectScoped ) {
|
|
548
|
+
return undefined;
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
return this.$rootGetters[`${ STORE.MANAGEMENT }/byId`](MANAGEMENT.PROJECT, `${ this.projectScopedClusterId }/${ this.projectScopedProjectId }`);
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
get clusterAndProjectLabel() {
|
|
555
|
+
if (!this.isProjectScoped) {
|
|
556
|
+
return '';
|
|
557
|
+
}
|
|
558
|
+
const clusterName = this.projectCluster?.nameDisplay;
|
|
559
|
+
// project is going to be empty if upstream and trying to show pss from downstream clusters
|
|
560
|
+
// we only ever have the current clusters projects. if we change this (fetch them in the list)
|
|
561
|
+
// we wipe out the header ns filter projects
|
|
562
|
+
const projectName = this.project?.nameDisplay || this.projectScopedProjectId;
|
|
563
|
+
|
|
564
|
+
if (clusterName && projectName) {
|
|
565
|
+
return `${ projectName } (${ clusterName })`;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
return '';
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
get detailLocation() {
|
|
572
|
+
if (this.isProjectScoped) {
|
|
573
|
+
const id = this.id?.replace(/.*\//, '');
|
|
574
|
+
|
|
575
|
+
return {
|
|
576
|
+
name: `c-cluster-product-${ VIRTUAL_TYPES.PROJECT_SECRETS }-namespace-id`,
|
|
577
|
+
params: {
|
|
578
|
+
product: this.$rootGetters['productId'],
|
|
579
|
+
cluster: this.$rootGetters['clusterId'],
|
|
580
|
+
namespace: this.metadata?.namespace,
|
|
581
|
+
resource: VIRTUAL_TYPES.PROJECT_SECRETS,
|
|
582
|
+
id,
|
|
583
|
+
}
|
|
584
|
+
};
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
return this._detailLocation;
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
get listLocation() {
|
|
591
|
+
if (!this.isProjectScoped) {
|
|
592
|
+
return super.listLocation;
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
return {
|
|
596
|
+
name: 'c-cluster-product-resource',
|
|
597
|
+
params: {
|
|
598
|
+
product: this.$rootGetters['productId'],
|
|
599
|
+
cluster: this.$rootGetters['clusterId'],
|
|
600
|
+
resource: VIRTUAL_TYPES.PROJECT_SECRETS,
|
|
601
|
+
}
|
|
602
|
+
};
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
get parentNameOverride() {
|
|
606
|
+
if (!this.isProjectScoped) {
|
|
607
|
+
return super.parentNameOverride;
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
return this.$rootGetters['i18n/t'](`typeLabel."${ VIRTUAL_TYPES.PROJECT_SECRETS }"`, { count: 1 })?.trim();
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
get parentLocationOverride() {
|
|
614
|
+
if (!this.isProjectScoped) {
|
|
615
|
+
return super.parentNameOverride;
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
return this.listLocation;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
get groupByProject() {
|
|
622
|
+
if (!this.isProjectScoped) {
|
|
623
|
+
return undefined;
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
return this.t('resourceTable.groupLabel.project', { name: escapeHtml(this?.project?.nameDisplay || '') }, true);
|
|
627
|
+
}
|
|
473
628
|
}
|
package/models/service.js
CHANGED
|
@@ -152,6 +152,10 @@ export default class Service extends SteveModel {
|
|
|
152
152
|
});
|
|
153
153
|
}
|
|
154
154
|
|
|
155
|
+
async unWatchPods() {
|
|
156
|
+
return await this.$dispatch('unwatch', { type: POD, all: true });
|
|
157
|
+
}
|
|
158
|
+
|
|
155
159
|
/**
|
|
156
160
|
* This getter expects a superset of workload pods to have been fetched already
|
|
157
161
|
*
|
package/models/workload.js
CHANGED
|
@@ -567,6 +567,10 @@ export default class Workload extends WorkloadService {
|
|
|
567
567
|
return undefined;
|
|
568
568
|
}
|
|
569
569
|
|
|
570
|
+
async unWatchPods() {
|
|
571
|
+
return await this.$dispatch('unwatch', { type: POD, all: true });
|
|
572
|
+
}
|
|
573
|
+
|
|
570
574
|
/**
|
|
571
575
|
* This getter expects a superset of workload pods to have been fetched already
|
|
572
576
|
*
|
|
@@ -703,6 +707,7 @@ export default class Workload extends WorkloadService {
|
|
|
703
707
|
$store: this.$store || { getters: this.$rootGetters, dispatch: (action, args) => this.$dispatch(action.split('/')[1], args) },
|
|
704
708
|
inStore: this.$rootGetters['currentProduct'].inStore,
|
|
705
709
|
namespace: this.metadata.namespace,
|
|
710
|
+
transient: true,
|
|
706
711
|
});
|
|
707
712
|
|
|
708
713
|
return matchInfo.matches;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rancher/shell",
|
|
3
|
-
"version": "3.0.5-rc.
|
|
3
|
+
"version": "3.0.5-rc.7",
|
|
4
4
|
"description": "Rancher Dashboard Shell",
|
|
5
5
|
"repository": "https://github.com/rancherlabs/dashboard",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"@babel/preset-typescript": "7.16.7",
|
|
38
38
|
"@novnc/novnc": "1.2.0",
|
|
39
39
|
"@popperjs/core": "2.11.8",
|
|
40
|
-
"@rancher/icons": "2.0.
|
|
40
|
+
"@rancher/icons": "2.0.37",
|
|
41
41
|
"@types/is-url": "1.2.30",
|
|
42
42
|
"@types/node": "20.10.8",
|
|
43
43
|
"@types/semver": "^7.5.8",
|
package/pages/about.vue
CHANGED
|
@@ -5,7 +5,6 @@ import BackRoute from '@shell/mixins/back-link';
|
|
|
5
5
|
import { MANAGEMENT } from '@shell/config/types';
|
|
6
6
|
import { SETTING } from '@shell/config/settings';
|
|
7
7
|
import { getVendor } from '@shell/config/private-label';
|
|
8
|
-
import { downloadFile } from '@shell/utils/download';
|
|
9
8
|
import { mapGetters } from 'vuex';
|
|
10
9
|
import TabTitle from '@shell/components/TabTitle';
|
|
11
10
|
import { PanelLocation, ExtensionPoint } from '@shell/core/types';
|
|
@@ -47,50 +46,27 @@ export default {
|
|
|
47
46
|
},
|
|
48
47
|
downloads() {
|
|
49
48
|
return [
|
|
50
|
-
this.createOSOption('about.os.mac', 'icon-apple', this.settings?.find((s) => s.id === SETTING.CLI_URL.DARWIN)?.value
|
|
51
|
-
this.createOSOption('about.os.linux', 'icon-linux', this.settings?.find((s) => s.id === SETTING.CLI_URL.LINUX)?.value
|
|
52
|
-
this.createOSOption('about.os.windows', 'icon-windows', this.settings?.find((s) => s.id === SETTING.CLI_URL.WINDOWS)?.value
|
|
49
|
+
this.createOSOption('about.os.mac', 'icon-apple', this.settings?.find((s) => s.id === SETTING.CLI_URL.DARWIN)?.value),
|
|
50
|
+
this.createOSOption('about.os.linux', 'icon-linux', this.settings?.find((s) => s.id === SETTING.CLI_URL.LINUX)?.value),
|
|
51
|
+
this.createOSOption('about.os.windows', 'icon-windows', this.settings?.find((s) => s.id === SETTING.CLI_URL.WINDOWS)?.value)
|
|
53
52
|
];
|
|
54
53
|
},
|
|
55
|
-
downloadImageList() {
|
|
56
|
-
return this.downloads.filter((d) => !!d.imageList);
|
|
57
|
-
},
|
|
58
54
|
downloadCli() {
|
|
59
55
|
return this.downloads.filter((d) => !!d.cliLink);
|
|
60
56
|
}
|
|
61
57
|
},
|
|
62
58
|
methods: {
|
|
63
|
-
createOSOption(label, icon, cliLink
|
|
59
|
+
createOSOption(label, icon, cliLink) {
|
|
64
60
|
const slash = cliLink?.lastIndexOf('/');
|
|
65
61
|
|
|
66
62
|
return {
|
|
67
63
|
label,
|
|
68
64
|
icon,
|
|
69
|
-
imageList,
|
|
70
65
|
cliLink,
|
|
71
66
|
cliFile: slash >= 0 ? cliLink.substr(slash + 1, cliLink.length - 1) : cliLink
|
|
72
67
|
};
|
|
73
68
|
},
|
|
74
69
|
|
|
75
|
-
async downloadLinuxImages() {
|
|
76
|
-
const res = await this.$store.dispatch('management/request', { url: '/v3/kontainerdrivers/rancher-images' });
|
|
77
|
-
|
|
78
|
-
try {
|
|
79
|
-
await downloadFile(`.rancher-linux-images.txt`, res.data);
|
|
80
|
-
} catch (error) {
|
|
81
|
-
this.$store.dispatch('growl/fromError', { title: 'Error downloading Linux image list', err: error }, { root: true });
|
|
82
|
-
}
|
|
83
|
-
},
|
|
84
|
-
|
|
85
|
-
async downloadWindowsImages() {
|
|
86
|
-
const res = await this.$store.dispatch('management/request', { url: '/v3/kontainerdrivers/rancher-windows-images' });
|
|
87
|
-
|
|
88
|
-
try {
|
|
89
|
-
await downloadFile(`.rancher-windows-images.txt`, res.data);
|
|
90
|
-
} catch (error) {
|
|
91
|
-
this.$store.dispatch('growl/fromError', { title: 'Error downloading Windows image list', err: error }, { root: true });
|
|
92
|
-
}
|
|
93
|
-
},
|
|
94
70
|
}
|
|
95
71
|
};
|
|
96
72
|
</script>
|
|
@@ -215,36 +191,6 @@ export default {
|
|
|
215
191
|
{{ t('about.versions.releaseNotes') }}
|
|
216
192
|
</a>
|
|
217
193
|
</p>
|
|
218
|
-
<template v-if="downloadImageList.length">
|
|
219
|
-
<h3 class="pt-40">
|
|
220
|
-
{{ t('about.downloadImageList.title') }}
|
|
221
|
-
</h3>
|
|
222
|
-
<table>
|
|
223
|
-
<tr
|
|
224
|
-
v-for="(d, i) in downloadImageList"
|
|
225
|
-
:key="i"
|
|
226
|
-
>
|
|
227
|
-
<th>
|
|
228
|
-
<div class="os">
|
|
229
|
-
<i :class="`icon ${d.icon} mr-5`" /> {{ t(d.label) }}
|
|
230
|
-
</div>
|
|
231
|
-
</th>
|
|
232
|
-
<td>
|
|
233
|
-
<a
|
|
234
|
-
v-if="d.imageList"
|
|
235
|
-
tabindex="0"
|
|
236
|
-
:data-testid="`image_list_download_link__${d.label}`"
|
|
237
|
-
role="link"
|
|
238
|
-
:aria-label="t('about.versions.downloadImages', { listName: t(d.label) })"
|
|
239
|
-
@click="d.imageList"
|
|
240
|
-
@keyup.enter="d.imageList"
|
|
241
|
-
>
|
|
242
|
-
{{ t('asyncButton.download.action') }}
|
|
243
|
-
</a>
|
|
244
|
-
</td>
|
|
245
|
-
</tr>
|
|
246
|
-
</table>
|
|
247
|
-
</template>
|
|
248
194
|
<template v-if="downloadCli.length">
|
|
249
195
|
<h3 class="pt-40">
|
|
250
196
|
{{ t('about.downloadCLI.title') }}
|
package/pages/auth/login.vue
CHANGED