@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.
Files changed (361) hide show
  1. package/assets/data/aws-regions.json +1 -0
  2. package/assets/images/key.svg +17 -0
  3. package/assets/styles/base/_spacing.scss +2 -2
  4. package/assets/styles/base/_variables.scss +17 -11
  5. package/assets/styles/global/_form.scss +1 -1
  6. package/assets/styles/global/_labeled-input.scss +1 -1
  7. package/assets/styles/themes/_dark.scss +5 -0
  8. package/assets/styles/themes/_light.scss +11 -2
  9. package/assets/styles/vendor/vue-select.scss +1 -1
  10. package/assets/translations/en-us.yaml +426 -64
  11. package/assets/translations/zh-hans.yaml +3 -4
  12. package/cloud-credential/gcp.vue +9 -1
  13. package/components/AppModal.vue +2 -0
  14. package/components/CodeMirror.vue +2 -2
  15. package/components/ConfigMapSettings/Settings.vue +377 -0
  16. package/components/ConfigMapSettings/index.vue +354 -0
  17. package/components/CruResource.vue +1 -2
  18. package/components/DetailText.vue +61 -11
  19. package/components/Drawer/Chrome.vue +115 -0
  20. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +61 -0
  21. package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +48 -0
  22. package/components/Drawer/ResourceDetailDrawer/__tests__/ConfigTab.test.ts +54 -0
  23. package/components/Drawer/ResourceDetailDrawer/__tests__/YamlTab.test.ts +80 -0
  24. package/components/Drawer/ResourceDetailDrawer/__tests__/composables.test.ts +106 -0
  25. package/components/Drawer/ResourceDetailDrawer/__tests__/helpers.test.ts +42 -0
  26. package/components/Drawer/ResourceDetailDrawer/composables.ts +53 -0
  27. package/components/Drawer/ResourceDetailDrawer/helpers.ts +10 -0
  28. package/components/Drawer/ResourceDetailDrawer/index.vue +111 -0
  29. package/components/GrowlManager.vue +16 -15
  30. package/components/IconOrSvg.vue +5 -0
  31. package/components/KeyValueView.vue +1 -1
  32. package/components/Loading.vue +1 -1
  33. package/components/LocaleSelector.vue +9 -1
  34. package/components/PaginatedResourceTable.vue +46 -1
  35. package/components/ProgressBarMulti.vue +1 -0
  36. package/components/PromptModal.vue +6 -1
  37. package/components/PromptRestore.vue +22 -44
  38. package/components/RelatedResources.vue +4 -12
  39. package/components/Resource/Detail/Additional.vue +46 -0
  40. package/components/Resource/Detail/Metadata/Annotations/__tests__/index.test.ts +1 -1
  41. package/components/Resource/Detail/Metadata/Annotations/index.vue +5 -0
  42. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +223 -0
  43. package/components/Resource/Detail/Metadata/IdentifyingInformation/composable.ts +47 -256
  44. package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +317 -0
  45. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +34 -5
  46. package/components/Resource/Detail/Metadata/KeyValue.vue +32 -22
  47. package/components/Resource/Detail/Metadata/Labels/__tests__/index.test.ts +1 -1
  48. package/components/Resource/Detail/Metadata/Labels/index.vue +4 -0
  49. package/components/Resource/Detail/Metadata/Rectangle.vue +3 -1
  50. package/components/Resource/Detail/Metadata/__tests__/KeyValue.test.ts +1 -1
  51. package/components/Resource/Detail/Metadata/__tests__/Rectangle.test.ts +1 -1
  52. package/components/Resource/Detail/Metadata/__tests__/composables.test.ts +75 -0
  53. package/components/Resource/Detail/Metadata/composables.ts +60 -11
  54. package/components/Resource/Detail/Metadata/index.vue +12 -5
  55. package/components/Resource/Detail/Page.vue +15 -0
  56. package/components/Resource/Detail/ResourceRow.vue +37 -18
  57. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/composables.test.ts +29 -0
  58. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/index.test.ts +48 -0
  59. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/composables.ts +31 -0
  60. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/index.vue +50 -0
  61. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/__tests__/composables.test.ts +66 -0
  62. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/composables.ts +21 -0
  63. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/index.vue +31 -0
  64. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Basic.vue +45 -0
  65. package/components/Resource/Detail/ResourceTabs/SecretDataTab/BasicAuth.vue +31 -0
  66. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Certificate.vue +31 -0
  67. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Registry.vue +22 -0
  68. package/components/Resource/Detail/ResourceTabs/SecretDataTab/ServiceAccountToken.vue +31 -0
  69. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Ssh.vue +32 -0
  70. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Basic.test.ts +40 -0
  71. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/BasicAuth.test.ts +33 -0
  72. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Certificate.test.ts +33 -0
  73. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Registry.test.ts +27 -0
  74. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/ServiceAccountToken.test.ts +33 -0
  75. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Ssh.test.ts +33 -0
  76. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/auth-types.test.ts +186 -0
  77. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/composables.test.ts +102 -0
  78. package/components/Resource/Detail/ResourceTabs/SecretDataTab/auth-types.ts +109 -0
  79. package/components/Resource/Detail/ResourceTabs/SecretDataTab/composeables.ts +52 -0
  80. package/components/Resource/Detail/ResourceTabs/SecretDataTab/index.vue +71 -0
  81. package/components/Resource/Detail/SpacedRow.vue +1 -1
  82. package/components/Resource/Detail/TitleBar/Title.vue +2 -1
  83. package/components/Resource/Detail/TitleBar/__tests__/Title.test.ts +1 -1
  84. package/components/Resource/Detail/TitleBar/__tests__/Top.test.ts +1 -1
  85. package/components/Resource/Detail/TitleBar/__tests__/composables.test.ts +63 -0
  86. package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +1 -1
  87. package/components/Resource/Detail/TitleBar/composables.ts +45 -0
  88. package/components/Resource/Detail/TitleBar/index.vue +85 -13
  89. package/components/Resource/Detail/composables.ts +45 -0
  90. package/components/ResourceDetail/Masthead/__tests__/index.test.ts +70 -0
  91. package/components/ResourceDetail/{__tests__/Masthead.test.ts → Masthead/__tests__/legacy.test.ts} +3 -3
  92. package/components/ResourceDetail/Masthead/index.vue +65 -0
  93. package/components/ResourceDetail/Masthead/latest.vue +44 -0
  94. package/components/ResourceDetail/{Masthead.vue → Masthead/legacy.vue} +1 -1
  95. package/components/ResourceDetail/__tests__/index.test.ts +26 -5
  96. package/components/ResourceDetail/index.vue +33 -17
  97. package/components/ResourceDetail/legacy.vue +18 -1
  98. package/components/ResourceList/Masthead.vue +6 -0
  99. package/components/ResourceList/index.vue +1 -0
  100. package/components/ResourceTable.vue +6 -1
  101. package/components/ResourceYaml.vue +15 -2
  102. package/components/RichTranslation.vue +106 -0
  103. package/components/SlideInPanelManager.vue +46 -11
  104. package/components/SortableTable/index.vue +1 -1
  105. package/components/SortableTable/selection.js +0 -1
  106. package/components/StateDot/index.vue +28 -0
  107. package/components/Tabbed/index.vue +17 -16
  108. package/components/Wizard.vue +4 -2
  109. package/components/__tests__/ConfigMapSettings.test.ts +376 -0
  110. package/components/__tests__/GrowlManager.test.ts +0 -25
  111. package/components/__tests__/PromptRestore.test.ts +1 -65
  112. package/components/__tests__/RichTranslation.test.ts +115 -0
  113. package/components/auth/login/ldap.vue +1 -1
  114. package/components/fleet/FleetApplications.vue +0 -7
  115. package/components/fleet/FleetClusterTargets/TargetsList.vue +66 -0
  116. package/components/fleet/FleetClusterTargets/index.vue +455 -0
  117. package/components/fleet/FleetClusters.vue +25 -6
  118. package/components/fleet/FleetGitRepoPaths.vue +476 -0
  119. package/components/fleet/FleetHelmOps.vue +8 -0
  120. package/components/fleet/FleetRepos.vue +1 -6
  121. package/components/fleet/FleetResources.vue +4 -5
  122. package/components/fleet/FleetValuesFrom.vue +295 -0
  123. package/components/fleet/__tests__/FleetClusterTargets.test.ts +1224 -0
  124. package/components/fleet/__tests__/FleetGitRepoPaths.test.ts +265 -0
  125. package/components/fleet/__tests__/FleetOCIStorageSecret.test.ts +13 -13
  126. package/components/fleet/__tests__/FleetValuesFrom.test.ts +300 -0
  127. package/components/fleet/dashboard/ResourceCard.vue +1 -0
  128. package/components/fleet/dashboard/ResourceCardSummary.vue +1 -5
  129. package/components/fleet/dashboard/ResourceDetails.vue +8 -10
  130. package/components/fleet/dashboard/ResourcePanel.vue +17 -9
  131. package/components/form/ArrayList.vue +13 -2
  132. package/components/form/ChangePassword.vue +3 -1
  133. package/components/form/FileImageSelector.vue +1 -1
  134. package/components/form/Footer.vue +10 -4
  135. package/components/form/KeyValue.vue +81 -43
  136. package/components/form/LabeledSelect.vue +56 -16
  137. package/components/form/Labels.vue +90 -17
  138. package/components/form/MatchExpressions.vue +46 -5
  139. package/components/form/NameNsDescription.vue +2 -1
  140. package/components/form/Networking.vue +24 -19
  141. package/components/form/ResourceLabeledSelect.vue +4 -3
  142. package/components/form/ResourceSelector.vue +1 -0
  143. package/components/form/ResourceTabs/index.vue +5 -0
  144. package/components/form/SecretSelector.vue +9 -2
  145. package/components/form/Select.vue +57 -19
  146. package/components/form/SelectOrCreateAuthSecret.vue +6 -3
  147. package/components/form/SimpleSecretSelector.vue +9 -2
  148. package/components/form/Taints.vue +21 -2
  149. package/components/form/UnitInput.vue +8 -0
  150. package/components/form/ValueFromResource.vue +1 -1
  151. package/components/form/__tests__/LabeledSelect.test.ts +8 -4
  152. package/components/form/__tests__/Labels.test.ts +360 -0
  153. package/components/form/__tests__/MatchExpressions.test.ts +16 -13
  154. package/components/form/__tests__/Networking.test.ts +116 -0
  155. package/components/form/__tests__/Select.test.ts +5 -2
  156. package/components/formatter/FleetApplicationSource.vue +1 -1
  157. package/components/formatter/PodImages.vue +1 -1
  158. package/components/formatter/WorkloadHealthScale.vue +1 -1
  159. package/components/formatter/__tests__/LiveDate.test.ts +10 -2
  160. package/components/google/AccountAccess.vue +209 -0
  161. package/components/google/types/gcp.d.ts +136 -0
  162. package/components/google/types/index.d.ts +101 -0
  163. package/components/google/util/__mocks__/gcp.ts +465 -0
  164. package/components/google/util/formatter.ts +82 -0
  165. package/components/google/util/gcp.ts +134 -0
  166. package/components/google/util/index.d.ts +11 -0
  167. package/components/nav/Favorite.vue +1 -1
  168. package/components/nav/Group.vue +71 -45
  169. package/components/nav/Header.vue +5 -1
  170. package/components/nav/NamespaceFilter.vue +13 -1
  171. package/components/nav/NotificationCenter/Notification.vue +510 -0
  172. package/components/nav/NotificationCenter/NotificationHeader.vue +112 -0
  173. package/components/nav/NotificationCenter/index.vue +148 -0
  174. package/composables/drawer.ts +26 -0
  175. package/composables/resources.test.ts +63 -0
  176. package/composables/resources.ts +38 -0
  177. package/composables/useIsNewDetailPageEnabled.ts +17 -0
  178. package/config/labels-annotations.js +8 -0
  179. package/config/pagination-table-headers.js +8 -1
  180. package/config/product/auth.js +16 -1
  181. package/config/product/{cis.js → compliance.js} +23 -26
  182. package/config/product/explorer.js +32 -3
  183. package/config/product/fleet.js +7 -0
  184. package/config/product/manager.js +0 -1
  185. package/config/product/settings.js +22 -11
  186. package/config/query-params.js +13 -0
  187. package/config/roles.ts +1 -1
  188. package/config/router/navigation-guards/authentication.js +51 -2
  189. package/config/router/routes.js +47 -31
  190. package/config/settings.ts +21 -3
  191. package/config/store.js +2 -0
  192. package/config/system-namespaces.js +1 -1
  193. package/config/table-headers.js +32 -3
  194. package/config/types.js +16 -7
  195. package/config/version.js +1 -1
  196. package/core/plugin.ts +32 -7
  197. package/core/types.ts +18 -1
  198. package/detail/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +22 -18
  199. package/detail/management.cattle.io.fleetworkspace.vue +18 -27
  200. package/detail/management.cattle.io.oidcclient.vue +369 -0
  201. package/detail/node.vue +2 -2
  202. package/detail/pod.vue +2 -2
  203. package/detail/provisioning.cattle.io.cluster.vue +3 -47
  204. package/detail/service.vue +10 -1
  205. package/detail/workload/index.vue +8 -2
  206. package/dialog/ExtensionCatalogUninstallDialog.vue +7 -4
  207. package/dialog/GenericPrompt.vue +1 -1
  208. package/dialog/ImportDialog.vue +8 -8
  209. package/dialog/OidcClientSecretDialog.vue +117 -0
  210. package/dialog/RotateEncryptionKeyDialog.vue +10 -30
  211. package/edit/__tests__/cis.cattle.io.clusterscan.test.ts +3 -3
  212. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +5 -2
  213. package/edit/auth/ldap/__tests__/config.test.ts +14 -0
  214. package/edit/auth/ldap/config.vue +24 -0
  215. package/edit/autoscaling.horizontalpodautoscaler/index.vue +4 -1
  216. package/edit/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +30 -31
  217. package/edit/{cis.cattle.io.clusterscanbenchmark.vue → compliance.cattle.io.clusterscanbenchmark.vue} +4 -4
  218. package/edit/{cis.cattle.io.clusterscanprofile.vue → compliance.cattle.io.clusterscanprofile.vue} +5 -5
  219. package/edit/configmap.vue +8 -2
  220. package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
  221. package/edit/fleet.cattle.io.gitrepo.vue +44 -222
  222. package/edit/fleet.cattle.io.helmop.vue +44 -269
  223. package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
  224. package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
  225. package/edit/logging-flow/index.vue +1 -0
  226. package/edit/logging.banzaicloud.io.output/index.vue +1 -0
  227. package/edit/management.cattle.io.fleetworkspace.vue +1 -0
  228. package/edit/management.cattle.io.oidcclient.vue +162 -0
  229. package/edit/management.cattle.io.project.vue +4 -1
  230. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
  231. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +5 -0
  232. package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
  233. package/edit/monitoring.coreos.com.receiver/auth.vue +30 -30
  234. package/edit/monitoring.coreos.com.receiver/index.vue +1 -0
  235. package/edit/monitoring.coreos.com.receiver/types/email.vue +1 -1
  236. package/edit/monitoring.coreos.com.route.vue +1 -0
  237. package/edit/namespace.vue +1 -0
  238. package/edit/networking.istio.io.destinationrule/index.vue +4 -1
  239. package/edit/networking.k8s.io.ingress/Certificate.vue +12 -12
  240. package/edit/networking.k8s.io.ingress/__tests__/Certificate.test.ts +165 -0
  241. package/edit/networking.k8s.io.ingress/index.vue +4 -1
  242. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +7 -2
  243. package/edit/networking.k8s.io.networkpolicy/index.vue +6 -2
  244. package/edit/node.vue +1 -0
  245. package/edit/persistentvolume/index.vue +4 -1
  246. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +3 -2
  247. package/edit/provisioning.cattle.io.cluster/rke2.vue +516 -426
  248. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +48 -39
  249. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +5 -0
  250. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +2 -2
  251. package/edit/resources.cattle.io.restore.vue +1 -1
  252. package/edit/secret/basic.vue +1 -0
  253. package/edit/secret/index.vue +127 -15
  254. package/edit/service.vue +4 -1
  255. package/edit/serviceaccount.vue +4 -1
  256. package/edit/storage.k8s.io.storageclass/index.vue +4 -1
  257. package/edit/workload/index.vue +5 -0
  258. package/list/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +2 -2
  259. package/list/management.cattle.io.oidcclient.vue +108 -0
  260. package/list/node.vue +2 -0
  261. package/list/projectsecret.vue +345 -0
  262. package/list/secret.vue +109 -0
  263. package/machine-config/amazonec2.vue +3 -24
  264. package/machine-config/components/GCEImage.vue +374 -0
  265. package/machine-config/google.vue +617 -0
  266. package/mixins/__tests__/brand.spec.ts +170 -0
  267. package/mixins/brand.js +16 -17
  268. package/mixins/create-edit-view/impl.js +10 -1
  269. package/mixins/create-edit-view/index.js +5 -0
  270. package/mixins/resource-fetch-api-pagination.js +24 -8
  271. package/mixins/resource-fetch.js +3 -1
  272. package/mixins/vue-select-overrides.js +1 -0
  273. package/models/cluster.x-k8s.io.machinedeployment.js +11 -2
  274. package/models/{cis.cattle.io.clusterscan.js → compliance.cattle.io.clusterscan.js} +8 -8
  275. package/models/{cis.cattle.io.clusterscanbenchmark.js → compliance.cattle.io.clusterscanbenchmark.js} +1 -1
  276. package/models/{cis.cattle.io.clusterscanprofile.js → compliance.cattle.io.clusterscanprofile.js} +5 -5
  277. package/models/{cis.cattle.io.clusterscanreport.js → compliance.cattle.io.clusterscanreport.js} +1 -1
  278. package/models/fleet-application.js +8 -79
  279. package/models/fleet.cattle.io.cluster.js +13 -2
  280. package/models/fleet.cattle.io.gitrepo.js +2 -2
  281. package/models/fleet.cattle.io.helmop.js +9 -39
  282. package/models/management.cattle.io.fleetworkspace.js +2 -1
  283. package/models/management.cattle.io.oidcclient.js +18 -0
  284. package/models/management.cattle.io.registration.js +3 -0
  285. package/models/provisioning.cattle.io.cluster.js +29 -33
  286. package/models/secret.js +157 -2
  287. package/models/service.js +4 -0
  288. package/models/workload.js +5 -0
  289. package/package.json +2 -2
  290. package/pages/about.vue +4 -58
  291. package/pages/auth/login.vue +1 -1
  292. package/pages/c/_cluster/apps/charts/AddRepoLink.vue +0 -1
  293. package/pages/c/_cluster/apps/charts/index.vue +296 -81
  294. package/pages/c/_cluster/auth/user.retention/index.vue +87 -78
  295. package/pages/c/_cluster/explorer/index.vue +3 -3
  296. package/pages/c/_cluster/explorer/projectsecret.vue +34 -0
  297. package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -1
  298. package/pages/c/_cluster/fleet/application/create.vue +3 -2
  299. package/pages/c/_cluster/fleet/index.vue +94 -57
  300. package/pages/c/_cluster/fleet/settings/index.vue +229 -0
  301. package/pages/c/_cluster/longhorn/index.vue +5 -2
  302. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +16 -1
  303. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +2 -2
  304. package/pages/explorer/resource/detail/configmap.vue +30 -7
  305. package/pages/explorer/resource/detail/projectsecret.vue +9 -0
  306. package/pages/explorer/resource/detail/secret.vue +63 -0
  307. package/pages/home.vue +9 -55
  308. package/pages/support/index.vue +4 -6
  309. package/plugins/dashboard-store/__tests__/normalize.test.ts +223 -0
  310. package/plugins/dashboard-store/__tests__/resource-class.test.ts +191 -0
  311. package/plugins/dashboard-store/__tests__/utils/normalize-usecases.ts +1526 -0
  312. package/plugins/dashboard-store/actions.js +19 -5
  313. package/plugins/dashboard-store/getters.js +4 -0
  314. package/plugins/dashboard-store/normalize.js +29 -17
  315. package/plugins/dashboard-store/resource-class.js +68 -19
  316. package/plugins/steve/steve-pagination-utils.ts +38 -19
  317. package/plugins/steve/subscribe.js +6 -1
  318. package/rancher-components/Banner/Banner.vue +13 -0
  319. package/rancher-components/Form/Checkbox/Checkbox.vue +9 -4
  320. package/rancher-components/Form/LabeledInput/LabeledInput.vue +1 -1
  321. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +1 -0
  322. package/rancher-components/RcItemCard/RcItemCard.vue +8 -3
  323. package/store/auth.js +2 -0
  324. package/store/catalog.js +23 -1
  325. package/store/growl.js +97 -8
  326. package/store/index.js +6 -0
  327. package/store/notifications.ts +426 -0
  328. package/store/prefs.js +0 -1
  329. package/store/type-map.js +19 -16
  330. package/store/uiplugins.ts +15 -1
  331. package/types/fleet.d.ts +24 -0
  332. package/types/kube/kube-api.ts +12 -0
  333. package/types/notifications/index.ts +74 -0
  334. package/types/shell/index.d.ts +661 -589
  335. package/types/store/dashboard-store.types.ts +16 -0
  336. package/types/store/pagination.types.ts +16 -6
  337. package/utils/__tests__/create-yaml.test.ts +235 -0
  338. package/utils/__tests__/fleet.test.ts +148 -0
  339. package/utils/__tests__/object.test.ts +54 -1
  340. package/utils/__tests__/string.test.ts +273 -1
  341. package/utils/__tests__/time.test.ts +31 -0
  342. package/utils/auth.js +9 -2
  343. package/utils/create-yaml.js +103 -9
  344. package/utils/crypto/encryption.ts +103 -0
  345. package/utils/cspAdaptor.ts +51 -0
  346. package/utils/fleet.ts +54 -65
  347. package/utils/object.js +36 -0
  348. package/utils/pagination-utils.ts +19 -1
  349. package/utils/release-notes.ts +48 -0
  350. package/utils/selector-typed.ts +7 -2
  351. package/utils/string.js +24 -0
  352. package/utils/{time.js → time.ts} +25 -6
  353. package/utils/uiplugins.ts +22 -0
  354. package/utils/validators/formRules/index.ts +3 -0
  355. package/components/Resource/Detail/TitleBar/composable.ts +0 -31
  356. package/config/product/legacy.js +0 -62
  357. package/models/etcdbackup.js +0 -45
  358. package/pages/c/_cluster/legacy/pages/_page.vue +0 -29
  359. package/pages/c/_cluster/legacy/project/_page.vue +0 -57
  360. package/pages/c/_cluster/legacy/project/index.vue +0 -32
  361. 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
- * chart: oci://ghcr.io/rancher/fleet-test-configmap-chart
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 && this.spec.helm?.chart) {
148
- return SOURCE_TYPE.REPO;
123
+ if (this.spec.helm?.repo?.startsWith('oci://')) {
124
+ return SOURCE_TYPE.OCI;
149
125
  }
150
126
 
151
- if (this.spec.helm?.chart?.startsWith('oci://')) {
152
- return SOURCE_TYPE.OCI;
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 || ''; // TODO ellipsis and tooltip
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 || matchOCI
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.chart || '');
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
+ }
@@ -0,0 +1,3 @@
1
+ import SteveDescriptionModel from '@shell/plugins/steve/steve-description-class';
2
+
3
+ export default class RancherRegistration extends SteveDescriptionModel { }
@@ -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 && ((this.isRke2 && this.canUpdate) || (this.isRke1 && this.mgmt?.hasAction('backupEtcd')));
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/success', {
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/success', {
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/success', {
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
  *
@@ -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.5",
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.29",
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, null),
51
- this.createOSOption('about.os.linux', 'icon-linux', this.settings?.find((s) => s.id === SETTING.CLI_URL.LINUX)?.value, this.downloadLinuxImages),
52
- this.createOSOption('about.os.windows', 'icon-windows', this.settings?.find((s) => s.id === SETTING.CLI_URL.WINDOWS)?.value, this.downloadWindowsImages)
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, imageList) {
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') }}
@@ -452,7 +452,7 @@ export default {
452
452
  v-model:value="password"
453
453
  data-testid="local-login-password"
454
454
  :label="t('login.password')"
455
- autocomplete="password"
455
+ autocomplete="current-password"
456
456
  />
457
457
  </div>
458
458
  </div>
@@ -9,7 +9,6 @@ defineProps<{
9
9
  <template>
10
10
  <router-link
11
11
  :to="`/c/${clusterId}/apps/catalog.cattle.io.clusterrepo/create`"
12
- target="_blank"
13
12
  class="add-repo-link"
14
13
  tabindex="0"
15
14
  :aria-label="t('catalog.charts.addNewRepo.ariaLabel')"