@rancher/shell 0.5.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (581) hide show
  1. package/assets/data/aws-regions.json +9 -0
  2. package/assets/images/vendor/openid.svg +18 -0
  3. package/assets/styles/app.scss +1 -2
  4. package/assets/styles/fonts/_icons.scss +3 -3
  5. package/assets/styles/global/_columns.scss +1 -1
  6. package/assets/styles/global/_labeled-input.scss +2 -0
  7. package/assets/styles/themes/_csp.scss +2 -2
  8. package/assets/styles/themes/_dark.scss +8 -2
  9. package/assets/styles/themes/_light.scss +2 -1
  10. package/assets/styles/themes/_suse.scss +1 -1
  11. package/assets/styles/vendor/vue-select.scss +5 -0
  12. package/assets/translations/en-us.yaml +296 -58
  13. package/assets/translations/zh-hans.yaml +5 -27
  14. package/babel.config.js +1 -1
  15. package/chart/__tests__/S3.test.ts +9 -2
  16. package/chart/monitoring/grafana/index.vue +6 -2
  17. package/chart/monitoring/prometheus/index.vue +2 -2
  18. package/chart/rancher-backup/S3.vue +11 -9
  19. package/chart/rancher-backup/index.vue +15 -5
  20. package/cloud-credential/__tests__/harvester.test.ts +18 -0
  21. package/cloud-credential/generic.vue +18 -9
  22. package/cloud-credential/harvester.vue +11 -3
  23. package/components/AppModal.vue +167 -0
  24. package/components/AssignTo.vue +7 -4
  25. package/components/AsyncButton.vue +18 -5
  26. package/components/BackLink.vue +4 -4
  27. package/components/BannerGraphic.vue +1 -0
  28. package/components/BrandImage.vue +47 -1
  29. package/components/Carousel.vue +14 -8
  30. package/components/Certificates.vue +8 -11
  31. package/components/ClusterBadge.vue +12 -3
  32. package/components/ClusterIconMenu.vue +44 -16
  33. package/components/ClusterProviderIcon.vue +14 -3
  34. package/components/CodeMirror.vue +73 -38
  35. package/components/CommunityLinks.vue +12 -8
  36. package/components/CreateDriver.vue +81 -0
  37. package/components/CruResource.vue +51 -27
  38. package/components/DetailTop.vue +2 -2
  39. package/components/Dialog.vue +6 -5
  40. package/components/DisableAuthProviderModal.vue +14 -8
  41. package/components/DraggableZone.vue +2 -2
  42. package/components/ExplorerMembers.vue +3 -3
  43. package/components/ExplorerProjectsNamespaces.vue +6 -6
  44. package/components/FixedBanner.vue +47 -36
  45. package/components/GlobalRoleBindings.vue +26 -0
  46. package/components/Import.vue +10 -6
  47. package/components/Inactivity.vue +1 -5
  48. package/components/KeyValueView.vue +14 -10
  49. package/components/MessageLink.vue +2 -2
  50. package/components/ModalWithCard.vue +5 -8
  51. package/components/MoveModal.vue +35 -33
  52. package/components/PodSecurityAdmission.vue +3 -3
  53. package/components/PromptChangePassword.vue +33 -33
  54. package/components/PromptModal.vue +11 -21
  55. package/components/PromptRemove.vue +11 -17
  56. package/components/PromptRestore.vue +18 -16
  57. package/components/Questions/__tests__/Boolean.test.ts +9 -19
  58. package/components/Questions/__tests__/Float.test.ts +9 -19
  59. package/components/Questions/__tests__/Int.test.ts +9 -19
  60. package/components/Questions/__tests__/String.test.ts +9 -19
  61. package/components/Questions/__tests__/Yaml.test.ts +9 -20
  62. package/components/Questions/__tests__/utils/questions-defaults.ts +20 -0
  63. package/components/Questions/index.vue +18 -2
  64. package/components/ResourceCancelModal.vue +34 -29
  65. package/components/ResourceDetail/Masthead.vue +23 -7
  66. package/components/ResourceDetail/index.vue +5 -0
  67. package/components/ResourceList/Masthead.vue +28 -10
  68. package/components/ResourceList/index.vue +65 -14
  69. package/components/ResourceTable.vue +73 -19
  70. package/components/ResourceYaml.vue +1 -0
  71. package/components/SelectIconGrid.vue +3 -3
  72. package/components/SideNav.vue +15 -37
  73. package/components/SingleClusterInfo.vue +4 -4
  74. package/components/SortableTable/THead.vue +26 -12
  75. package/components/SortableTable/filtering.js +9 -1
  76. package/components/SortableTable/grouping.js +8 -1
  77. package/components/SortableTable/index.vue +142 -42
  78. package/components/SortableTable/paging.js +36 -7
  79. package/components/SortableTable/selection.js +2 -1
  80. package/components/SortableTable/sorting.js +24 -7
  81. package/components/TabTitle.vue +84 -0
  82. package/components/Tabbed/index.vue +6 -1
  83. package/components/TableDataUserIcon.vue +47 -0
  84. package/components/TypeDescription.vue +1 -0
  85. package/components/Wizard.vue +1 -0
  86. package/components/__tests__/AppModal.test.ts +98 -0
  87. package/components/__tests__/AsyncButton.test.ts +1 -3
  88. package/components/__tests__/BackLink.test.ts +1 -1
  89. package/components/__tests__/ButtonGroup.test.ts +3 -6
  90. package/components/__tests__/Carousel.test.ts +43 -0
  91. package/components/__tests__/Certificates.test.ts +29 -0
  92. package/components/__tests__/{CodeMirror.spec.ts → CodeMirror.test.ts} +5 -17
  93. package/components/__tests__/CruResource.test.ts +10 -9
  94. package/components/__tests__/EtcdInfoBanner.test.ts +37 -0
  95. package/components/__tests__/FixedBanner.test.ts +5 -20
  96. package/components/__tests__/NamespaceFilter.test.ts +9 -18
  97. package/components/__tests__/TabTitle.test.ts +129 -0
  98. package/components/auth/AzureWarning.vue +2 -2
  99. package/components/auth/RoleDetailEdit.vue +10 -0
  100. package/components/auth/__tests__/RoleDetailEdit.test.ts +3 -2
  101. package/components/auth/login/oidc.vue +7 -1
  102. package/components/fleet/FleetClusters.vue +9 -9
  103. package/components/fleet/FleetIntro.vue +11 -17
  104. package/components/fleet/FleetNoWorkspaces.vue +2 -2
  105. package/components/fleet/FleetRepos.vue +1 -0
  106. package/components/fleet/ForceDirectedTreeChart/index.vue +9 -3
  107. package/components/form/ArrayList.vue +30 -19
  108. package/components/form/ArrayListSelect.vue +9 -4
  109. package/components/form/ClusterAppearance.vue +132 -0
  110. package/components/form/ColorInput.vue +1 -0
  111. package/components/form/Error.vue +3 -3
  112. package/components/form/Footer.vue +2 -2
  113. package/components/form/GitPicker.vue +83 -38
  114. package/components/form/KeyValue.vue +67 -48
  115. package/components/form/LabeledSelect.vue +143 -43
  116. package/components/form/Labels.vue +3 -1
  117. package/components/form/NameNsDescription.vue +26 -9
  118. package/components/form/ResourceLabeledSelect.vue +187 -0
  119. package/components/form/ResourceTabs/index.vue +31 -15
  120. package/components/form/SecretSelector.vue +93 -18
  121. package/components/form/Select.vue +1 -1
  122. package/components/form/SelectOrCreateAuthSecret.vue +135 -62
  123. package/components/form/SimpleSecretSelector.vue +88 -28
  124. package/components/form/__tests__/BannerSettings.test.ts +53 -0
  125. package/components/form/__tests__/KeyValue.test.ts +121 -12
  126. package/components/form/__tests__/LabeledSelect.test.ts +0 -18
  127. package/components/form/__tests__/NameNsDescription.test.ts +25 -15
  128. package/components/form/labeled-select-utils/labeled-select-pagination.ts +151 -0
  129. package/components/form/labeled-select-utils/labeled-select.utils.ts +122 -0
  130. package/components/formatter/AppSummaryGraph.vue +2 -2
  131. package/components/formatter/CloudCredPublicData.vue +30 -0
  132. package/components/formatter/ClusterLink.vue +2 -2
  133. package/components/formatter/FleetSummaryGraph.vue +2 -1
  134. package/components/formatter/ImagePercentageBar.vue +0 -4
  135. package/components/formatter/IngressTarget.vue +18 -7
  136. package/components/formatter/Link.vue +2 -2
  137. package/components/formatter/LinkDetail.vue +2 -2
  138. package/components/formatter/LinkDetailImage.vue +2 -2
  139. package/components/formatter/LinkName.vue +2 -2
  140. package/components/formatter/LiveDate.vue +16 -0
  141. package/components/formatter/PrincipalGroupBindings.vue +2 -2
  142. package/components/formatter/SecretType.vue +2 -2
  143. package/components/formatter/VirtualServiceGateways.vue +2 -2
  144. package/components/formatter/__tests__/LinkDetail.test.ts +5 -5
  145. package/components/nav/Group.vue +7 -5
  146. package/components/nav/Header.vue +82 -43
  147. package/components/nav/NamespaceFilter.vue +8 -1
  148. package/components/nav/TopLevelMenu.vue +336 -125
  149. package/components/nav/Type.vue +58 -102
  150. package/components/nav/__tests__/TopLevelMenu.test.ts +370 -9
  151. package/components/nav/__tests__/Type.test.ts +321 -126
  152. package/components/nuxt/nuxt-child.js +0 -5
  153. package/components/nuxt/nuxt-error.vue +1 -1
  154. package/components/nuxt/nuxt-link.client.js +13 -95
  155. package/components/templates/default.vue +3 -3
  156. package/components/templates/error.vue +6 -10
  157. package/components/templates/standalone.vue +0 -4
  158. package/components/templates/unauthenticated.vue +1 -2
  159. package/components/user.retention/user-retention-header.vue +34 -0
  160. package/composables/useCompactInput.test.ts +36 -0
  161. package/composables/useCompactInput.ts +2 -2
  162. package/composables/useI18n.ts +26 -0
  163. package/composables/useLabeledFormElement.test.ts +135 -0
  164. package/composables/useStore.ts +16 -0
  165. package/config/home-links.js +32 -1
  166. package/config/labels-annotations.js +2 -1
  167. package/config/middleware.js +0 -6
  168. package/config/pagination-table-headers.js +57 -0
  169. package/config/pod-security-admission.ts +1 -1
  170. package/config/private-label.js +1 -3
  171. package/config/product/auth.js +1 -0
  172. package/config/product/explorer.js +167 -46
  173. package/config/product/legacy.js +3 -95
  174. package/config/product/manager.js +44 -11
  175. package/config/query-params.js +1 -0
  176. package/config/roles.ts +23 -0
  177. package/config/router/index.js +23 -0
  178. package/config/router/navigation-guards/attempt-first-login.js +73 -0
  179. package/config/router/navigation-guards/authentication.js +63 -0
  180. package/config/router/navigation-guards/index.js +15 -0
  181. package/config/router/navigation-guards/load-initial-settings.js +15 -0
  182. package/config/router/routes.js +487 -0
  183. package/config/settings.ts +38 -2
  184. package/config/store.js +7 -3
  185. package/config/table-headers.js +46 -1
  186. package/config/types.js +36 -16
  187. package/config/uiplugins.js +10 -5
  188. package/core/plugin-helpers.js +1 -1
  189. package/core/plugin.ts +2 -1
  190. package/core/plugins.js +289 -282
  191. package/creators/app/files/.eslintignore +0 -2
  192. package/creators/app/files/.vscode/settings.json +0 -1
  193. package/creators/pkg/files/.github/workflows/build-extension-catalog.yml +2 -6
  194. package/creators/pkg/files/.github/workflows/build-extension-charts.yml +2 -6
  195. package/creators/pkg/init +32 -0
  196. package/detail/__tests__/service.test.ts +62 -0
  197. package/detail/catalog.cattle.io.app.vue +1 -1
  198. package/detail/cis.cattle.io.clusterscan.vue +14 -3
  199. package/detail/fleet.cattle.io.gitrepo.vue +15 -9
  200. package/detail/namespace.vue +2 -2
  201. package/detail/networking.k8s.io.ingress.vue +52 -19
  202. package/detail/node.vue +20 -43
  203. package/detail/pod.vue +1 -68
  204. package/detail/provisioning.cattle.io.cluster.vue +2 -1
  205. package/detail/service.vue +1 -1
  206. package/detail/workload/index.vue +2 -15
  207. package/dialog/AddCustomBadgeDialog.vue +318 -161
  208. package/dialog/DeactivateDriverDialog.vue +118 -0
  209. package/dialog/RollbackWorkloadDialog.vue +2 -2
  210. package/dialog/RotateCertificatesDialog.vue +0 -21
  211. package/directives/clean-html.js +15 -0
  212. package/directives/clean-tooltip.js +32 -0
  213. package/directives/focus.js +41 -0
  214. package/directives/int-number.js +21 -0
  215. package/directives/positive-int-number.js +19 -0
  216. package/directives/trim-whitespace.js +19 -0
  217. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +3 -2
  218. package/edit/__tests__/kontainerDriver.test.ts +107 -0
  219. package/edit/__tests__/management.cattle.io.clusterroletemplatebinding.test.ts +12 -1
  220. package/edit/__tests__/management.cattle.io.setting.test.ts +2 -1
  221. package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +2 -3
  222. package/edit/__tests__/nodeDriver.test.ts +107 -0
  223. package/edit/__tests__/service.test.ts +1 -5
  224. package/edit/__tests__/ui.cattle.io.navlink.test.ts +3 -1
  225. package/edit/auth/AuthProviderWarningBanners.vue +34 -0
  226. package/edit/auth/__tests__/AuthProviderWarningBanners.test.ts +19 -0
  227. package/edit/auth/__tests__/azuread.test.ts +241 -0
  228. package/edit/auth/__tests__/oidc.test.ts +137 -0
  229. package/edit/auth/azuread.vue +133 -31
  230. package/edit/auth/github.vue +5 -17
  231. package/edit/auth/googleoauth.vue +5 -18
  232. package/edit/auth/ldap/index.vue +5 -17
  233. package/edit/auth/oidc.vue +143 -42
  234. package/edit/auth/saml.vue +5 -14
  235. package/edit/catalog.cattle.io.clusterrepo.vue +175 -20
  236. package/edit/cis.cattle.io.clusterscan.vue +5 -2
  237. package/edit/cis.cattle.io.clusterscanbenchmark.vue +41 -9
  238. package/edit/cloudcredential.vue +26 -4
  239. package/edit/configmap.vue +10 -4
  240. package/edit/fleet.cattle.io.gitrepo.vue +7 -4
  241. package/edit/helm.cattle.io.projecthelmchart.vue +29 -19
  242. package/edit/kontainerDriver.vue +65 -0
  243. package/edit/logging-flow/Match.vue +10 -9
  244. package/edit/logging-flow/index.vue +4 -19
  245. package/edit/logging.banzaicloud.io.output/__tests__/logging.banzaicloud.io.output.test.ts +232 -2
  246. package/edit/logging.banzaicloud.io.output/index.vue +43 -26
  247. package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +3 -3
  248. package/edit/management.cattle.io.project.vue +2 -1
  249. package/edit/management.cattle.io.setting.vue +20 -0
  250. package/edit/management.cattle.io.user.vue +2 -1
  251. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +10 -7
  252. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +21 -16
  253. package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +1 -0
  254. package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +3 -0
  255. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +2 -0
  256. package/edit/monitoring.coreos.com.prometheusrule/RecordingRule.vue +2 -0
  257. package/edit/monitoring.coreos.com.prometheusrule/index.vue +2 -0
  258. package/edit/networking.k8s.io.ingress/Rules.vue +8 -3
  259. package/edit/networking.k8s.io.ingress/index.vue +64 -8
  260. package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +1 -0
  261. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +6 -2
  262. package/edit/networking.k8s.io.networkpolicy/__tests__/{PolicyRuleTarget.spec.ts → PolicyRuleTarget.test.ts} +45 -6
  263. package/edit/networking.k8s.io.networkpolicy/__tests__/utils/selectors.test.ts +1 -1
  264. package/edit/networking.k8s.io.networkpolicy/index.vue +2 -0
  265. package/edit/nodeDriver.vue +65 -0
  266. package/edit/persistentvolume/index.vue +2 -2
  267. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +18 -9
  268. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +165 -1
  269. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +1 -1
  270. package/edit/provisioning.cattle.io.cluster/__tests__/CustomCommand.test.ts +0 -3
  271. package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +228 -0
  272. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +70 -12
  273. package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +5 -0
  274. package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
  275. package/edit/provisioning.cattle.io.cluster/index.vue +21 -15
  276. package/edit/provisioning.cattle.io.cluster/rke2.vue +185 -114
  277. package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +67 -7
  278. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +19 -6
  279. package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +132 -0
  280. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +7 -0
  281. package/edit/provisioning.cattle.io.cluster/tabs/etcd/S3Config.vue +1 -0
  282. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +1 -0
  283. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +3 -0
  284. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +1 -0
  285. package/edit/resources.cattle.io.backup.vue +139 -124
  286. package/edit/resources.cattle.io.restore.vue +146 -126
  287. package/edit/service.vue +1 -0
  288. package/edit/serviceaccount.vue +46 -4
  289. package/edit/workload/__tests__/Job.test.ts +1 -3
  290. package/edit/workload/__tests__/Upgrading.test.ts +2 -2
  291. package/edit/workload/mixins/workload.js +34 -1
  292. package/edit/workload/storage/emptyDir.vue +2 -2
  293. package/initialize/App.vue +75 -0
  294. package/initialize/app-extended.js +128 -0
  295. package/initialize/entry-helpers.js +549 -0
  296. package/initialize/entry.js +32 -0
  297. package/initialize/install-components.js +23 -0
  298. package/initialize/install-directives.js +59 -0
  299. package/initialize/install-plugins.js +123 -0
  300. package/list/__tests__/workload.test.ts +1 -1
  301. package/list/cis.cattle.io.clusterscan.vue +16 -10
  302. package/list/group.principal.vue +2 -2
  303. package/list/management.cattle.io.feature.vue +11 -7
  304. package/list/management.cattle.io.user.vue +36 -3
  305. package/list/networking.k8s.io.ingress.vue +36 -0
  306. package/list/node.vue +211 -73
  307. package/list/provisioning.cattle.io.cluster.vue +17 -4
  308. package/list/ui.cattle.io.navlink.vue +2 -2
  309. package/list/workload.vue +22 -0
  310. package/machine-config/__tests__/vmwarevsphere-pool-config-merge.test.ts +30 -0
  311. package/machine-config/__tests__/vmwarevsphere.test.ts +162 -59
  312. package/machine-config/amazonec2.vue +1 -1
  313. package/machine-config/azure.vue +38 -21
  314. package/machine-config/generic.vue +11 -15
  315. package/machine-config/vmwarevsphere-pool-config-merge.ts +25 -0
  316. package/machine-config/vmwarevsphere.vue +20 -11
  317. package/middleware/authenticated.js +9 -361
  318. package/mixins/__tests__/chart.test.ts +48 -6
  319. package/mixins/__tests__/create-edit-view.test.ts +2 -3
  320. package/mixins/auth-config.js +3 -2
  321. package/mixins/brand.js +75 -57
  322. package/mixins/chart.js +27 -13
  323. package/mixins/create-edit-view/index.js +2 -2
  324. package/mixins/fetch.client.js +42 -48
  325. package/mixins/labeled-form-element.ts +21 -1
  326. package/mixins/page-actions.js +7 -5
  327. package/mixins/resource-fetch-api-pagination.js +304 -0
  328. package/mixins/resource-fetch-namespaced.js +1 -1
  329. package/mixins/resource-fetch.js +46 -5
  330. package/models/__tests__/cluster.test.ts +44 -0
  331. package/models/__tests__/fleet.cattle.io.cluster.test.ts +36 -0
  332. package/models/__tests__/schema.tests.ts +24 -0
  333. package/models/__tests__/steve-schema.test.ts +73 -0
  334. package/models/__tests__/workload.test.ts +1 -1
  335. package/models/catalog.cattle.io.app.js +8 -0
  336. package/models/catalog.cattle.io.clusterrepo.js +9 -1
  337. package/models/catalog.cattle.io.uiplugin.js +7 -8
  338. package/models/cis.cattle.io.clusterscan.js +29 -8
  339. package/models/cloudcredential.js +9 -1
  340. package/models/cluster/node.js +4 -0
  341. package/models/cluster/schema.js +6 -0
  342. package/models/cluster.js +33 -0
  343. package/models/driver.js +62 -0
  344. package/models/fleet.cattle.io.cluster.js +23 -11
  345. package/models/fleet.cattle.io.gitrepo.js +10 -0
  346. package/models/helm.cattle.io.projecthelmchart.js +1 -1
  347. package/models/kontainerdriver.js +68 -0
  348. package/models/management/schema.js +6 -0
  349. package/models/management.cattle.io.authconfig.js +3 -2
  350. package/models/management.cattle.io.cluster.js +5 -4
  351. package/models/management.cattle.io.globalrole.js +2 -0
  352. package/models/management.cattle.io.user.js +67 -2
  353. package/models/monitoring.coreos.com.receiver.js +3 -1
  354. package/models/monitoring.coreos.com.route.js +1 -1
  355. package/models/networking.k8s.io.ingress.js +2 -1
  356. package/models/nodedriver.js +68 -0
  357. package/models/provisioning.cattle.io.cluster.js +34 -1
  358. package/models/schema.js +28 -7
  359. package/models/service.js +2 -0
  360. package/models/steve-schema.ts +254 -0
  361. package/models/workload.js +1 -0
  362. package/package.json +6 -5
  363. package/pages/about.vue +12 -5
  364. package/pages/account/index.vue +7 -2
  365. package/pages/auth/login.vue +106 -102
  366. package/pages/auth/logout.vue +2 -2
  367. package/pages/auth/setup.vue +57 -64
  368. package/pages/auth/verify.vue +17 -17
  369. package/pages/c/_cluster/apps/charts/chart.vue +54 -9
  370. package/pages/c/_cluster/apps/charts/index.vue +37 -13
  371. package/pages/c/_cluster/apps/charts/install.vue +4 -4
  372. package/pages/c/_cluster/auth/config/_id.vue +0 -6
  373. package/pages/c/_cluster/auth/config/index.vue +15 -9
  374. package/pages/c/_cluster/auth/roles/index.vue +8 -10
  375. package/pages/c/_cluster/auth/user.retention/index.vue +384 -0
  376. package/pages/c/_cluster/explorer/ConfigBadge.vue +13 -8
  377. package/pages/c/_cluster/explorer/EventsTable.vue +18 -0
  378. package/pages/c/_cluster/explorer/__tests__/index.test.ts +181 -0
  379. package/pages/c/_cluster/explorer/index.vue +231 -72
  380. package/pages/c/_cluster/explorer/tools/__tests__/index.test.ts +69 -0
  381. package/pages/c/_cluster/explorer/tools/index.vue +12 -176
  382. package/pages/c/_cluster/fleet/index.vue +88 -93
  383. package/pages/c/_cluster/longhorn/__tests__/longhorn.index.test.ts +89 -0
  384. package/pages/c/_cluster/longhorn/index.vue +52 -17
  385. package/pages/c/_cluster/manager/cloudCredential/index.vue +18 -25
  386. package/pages/c/_cluster/manager/drivers/kontainerDriver/_id.vue +12 -0
  387. package/pages/c/_cluster/manager/drivers/kontainerDriver/create.vue +15 -0
  388. package/pages/c/_cluster/manager/drivers/kontainerDriver/index.vue +94 -0
  389. package/pages/c/_cluster/manager/drivers/nodeDriver/_id.vue +12 -0
  390. package/pages/c/_cluster/manager/drivers/nodeDriver/create.vue +15 -0
  391. package/pages/c/_cluster/manager/drivers/nodeDriver/index.vue +63 -0
  392. package/pages/c/_cluster/manager/jwt.authentication/index.vue +235 -0
  393. package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +4 -0
  394. package/pages/c/_cluster/monitoring/index.vue +1 -17
  395. package/pages/c/_cluster/monitoring/route-receiver/index.vue +2 -2
  396. package/pages/c/_cluster/neuvector/index.vue +1 -0
  397. package/pages/c/_cluster/settings/DefaultLinksEditor.vue +1 -0
  398. package/pages/c/_cluster/settings/banners.vue +86 -8
  399. package/pages/c/_cluster/settings/brand.vue +258 -36
  400. package/pages/c/_cluster/settings/index.vue +4 -4
  401. package/pages/c/_cluster/settings/links.vue +5 -3
  402. package/pages/c/_cluster/settings/performance.vue +71 -2
  403. package/pages/c/_cluster/uiplugins/AddExtensionRepos.vue +5 -2
  404. package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +10 -7
  405. package/pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue +9 -6
  406. package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +11 -5
  407. package/pages/c/_cluster/uiplugins/InstallDialog.vue +53 -18
  408. package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +36 -301
  409. package/pages/c/_cluster/uiplugins/UninstallDialog.vue +14 -6
  410. package/pages/c/_cluster/uiplugins/__tests__/SetupUIPlugins.test.ts +52 -106
  411. package/pages/c/_cluster/uiplugins/index.vue +38 -52
  412. package/pages/diagnostic.vue +1 -0
  413. package/pages/fail-whale.vue +103 -41
  414. package/pages/home.vue +81 -24
  415. package/pages/prefs.vue +8 -3
  416. package/pages/support/index.vue +12 -2
  417. package/plugins/clean-html-directive.js +5 -12
  418. package/plugins/clean-tooltip-directive.js +6 -31
  419. package/plugins/codemirror.js +0 -9
  420. package/plugins/dashboard-store/__tests__/mutations.test.ts +296 -313
  421. package/plugins/dashboard-store/actions.js +140 -32
  422. package/plugins/dashboard-store/getters.js +86 -39
  423. package/plugins/dashboard-store/index.js +0 -99
  424. package/plugins/dashboard-store/mutations.js +150 -48
  425. package/plugins/dashboard-store/resource-class.js +14 -109
  426. package/plugins/directives.js +6 -39
  427. package/plugins/ember-cookie.js +13 -0
  428. package/plugins/global-formatters.js +26 -5
  429. package/plugins/i18n.js +90 -56
  430. package/plugins/int-number.js +6 -20
  431. package/plugins/plugin.js +3 -3
  432. package/plugins/positive-int-number.js +6 -17
  433. package/plugins/steve/__tests__/{getters.spec.ts → getters.test.ts} +124 -31
  434. package/plugins/steve/__tests__/mutations.test.ts +49 -0
  435. package/plugins/steve/__tests__/subscribe.spec.ts +109 -0
  436. package/plugins/steve/__tests__/utils/mutation.test.helpers.ts +105 -0
  437. package/plugins/steve/accept-or-reject-socket-message.ts +103 -0
  438. package/plugins/steve/actions.js +0 -1
  439. package/plugins/steve/getters.js +183 -63
  440. package/plugins/steve/hybrid-class.js +5 -1
  441. package/plugins/steve/mutations.js +29 -5
  442. package/plugins/steve/norman-class.js +123 -2
  443. package/{utils → plugins/steve}/projectAndNamespaceFiltering.utils.ts +28 -10
  444. package/plugins/steve/schema.d.ts +22 -0
  445. package/plugins/steve/steve-pagination-utils.ts +368 -0
  446. package/plugins/steve/subscribe.js +37 -75
  447. package/plugins/trim-whitespace.js +6 -34
  448. package/plugins/vue-js-modal.js +1 -1
  449. package/public/index.html +1 -0
  450. package/rancher-components/Accordion/Accordion.vue +3 -2
  451. package/rancher-components/BadgeState/BadgeState.vue +3 -3
  452. package/rancher-components/Banner/Banner.test.ts +1 -5
  453. package/rancher-components/Banner/Banner.vue +2 -2
  454. package/rancher-components/Card/Card.vue +4 -4
  455. package/rancher-components/Form/Checkbox/Checkbox.vue +4 -3
  456. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +1 -1
  457. package/rancher-components/Form/LabeledInput/LabeledInput.vue +66 -30
  458. package/rancher-components/Form/Radio/RadioButton.test.ts +1 -3
  459. package/rancher-components/Form/Radio/RadioButton.vue +13 -7
  460. package/rancher-components/Form/Radio/RadioGroup.vue +4 -3
  461. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +7 -5
  462. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
  463. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
  464. package/rancher-components/StringList/StringList.vue +8 -8
  465. package/rancher-components/components/Accordion/Accordion.vue +3 -2
  466. package/rancher-components/components/BadgeState/BadgeState.vue +3 -3
  467. package/rancher-components/components/Banner/Banner.test.ts +1 -5
  468. package/rancher-components/components/Banner/Banner.vue +2 -2
  469. package/rancher-components/components/Card/Card.vue +4 -4
  470. package/rancher-components/components/Form/Checkbox/Checkbox.vue +4 -3
  471. package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +1 -1
  472. package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +66 -30
  473. package/rancher-components/components/Form/Radio/RadioButton.test.ts +1 -3
  474. package/rancher-components/components/Form/Radio/RadioButton.vue +13 -7
  475. package/rancher-components/components/Form/Radio/RadioGroup.vue +4 -3
  476. package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +7 -5
  477. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
  478. package/rancher-components/components/LabeledTooltip/LabeledTooltip.vue +9 -4
  479. package/rancher-components/components/StringList/StringList.vue +8 -8
  480. package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +27 -8
  481. package/scripts/clean +1 -1
  482. package/scripts/extension/helm/charts/ui-plugin-server/templates/_helpers.tpl +11 -0
  483. package/scripts/extension/helm/charts/ui-plugin-server/templates/cr.yaml +2 -0
  484. package/scripts/extension/helm/charts/ui-plugin-server/values.yaml +2 -0
  485. package/scripts/extension/helm/package/Dockerfile +1 -1
  486. package/scripts/extension/helm/scripts/patch +27 -0
  487. package/scripts/extension/publish +6 -6
  488. package/scripts/serve-pkgs +0 -2
  489. package/scripts/test-plugins-build.sh +6 -6
  490. package/scripts/vue-migrate.js +683 -0
  491. package/store/__tests__/catalog.test.ts +224 -0
  492. package/store/auth.js +23 -4
  493. package/store/aws.js +53 -6
  494. package/store/catalog.js +21 -5
  495. package/store/cru-resource.ts +26 -0
  496. package/store/customisation.js +35 -0
  497. package/store/features.js +6 -4
  498. package/store/index.js +132 -39
  499. package/store/plugins.js +8 -4
  500. package/store/type-map.js +143 -143
  501. package/store/type-map.utils.ts +226 -0
  502. package/tsconfig.json +0 -1
  503. package/tsconfig.paths.json +4 -1
  504. package/types/components/labeledSelect.ts +50 -0
  505. package/types/resources/settings.d.ts +32 -0
  506. package/types/{userPreferences.d.ts → resources/userPreferences.d.ts} +0 -1
  507. package/types/shell/index.d.ts +996 -782
  508. package/types/store/dashboard-store.types.ts +42 -0
  509. package/types/store/pagination.types.ts +457 -0
  510. package/types/store/type-map.ts +30 -0
  511. package/types/store/vuex.d.ts +9 -0
  512. package/types/vue-shim.d.ts +51 -0
  513. package/utils/__tests__/cluster.test.ts +20 -18
  514. package/utils/__tests__/create-yaml.test.ts +359 -2
  515. package/utils/__tests__/kontainer.test.ts +92 -0
  516. package/utils/__tests__/pod-security-admission.test.ts +1 -1
  517. package/utils/alertmanagerconfig.js +19 -0
  518. package/utils/array.ts +40 -1
  519. package/utils/async.ts +2 -0
  520. package/utils/auth.js +152 -4
  521. package/utils/axios.js +2 -2
  522. package/utils/banners.js +103 -0
  523. package/utils/cluster.js +1 -1
  524. package/utils/config.js +4 -0
  525. package/utils/create-yaml.js +54 -27
  526. package/utils/error.js +25 -0
  527. package/utils/formatter.js +5 -3
  528. package/utils/git.ts +1 -1
  529. package/utils/install-redirect.js +1 -1
  530. package/utils/kontainer.ts +186 -0
  531. package/utils/monitoring.js +2 -37
  532. package/utils/pagination-utils.ts +154 -0
  533. package/utils/pod-security-admission.ts +1 -1
  534. package/utils/router.js +86 -0
  535. package/utils/settings.ts +46 -0
  536. package/utils/socket.js +1 -0
  537. package/utils/time.js +1 -0
  538. package/utils/title.ts +3 -0
  539. package/utils/unit-tests/ChildRenderingRouterLinkStub.ts +36 -0
  540. package/utils/validators/formRules/__tests__/index.test.ts +21 -0
  541. package/utils/validators/formRules/index.ts +3 -0
  542. package/utils/validators/index.js +1 -0
  543. package/vue.config.js +376 -421
  544. package/assets/styles/vendor/vue-js-modal.scss +0 -16
  545. package/chart/monitoring/steps/uninstall-v1.vue +0 -135
  546. package/components/EventsTable.vue +0 -67
  547. package/components/TabbedLinks/index.vue +0 -94
  548. package/components/nuxt/nuxt-link.server.js +0 -16
  549. package/components/nuxt/nuxt.js +0 -101
  550. package/config/router.js +0 -425
  551. package/initialize/App.js +0 -152
  552. package/initialize/client.js +0 -734
  553. package/initialize/index.js +0 -287
  554. package/middleware/i18n.js +0 -10
  555. package/middleware/unauthenticated.js +0 -22
  556. package/mixins/v1-workload-metrics.js +0 -43
  557. package/pages/c/_cluster/apps/index.vue +0 -15
  558. package/pages/c/_cluster/auth/index.vue +0 -17
  559. package/pages/c/_cluster/index.vue +0 -15
  560. package/pages/c/_cluster/legacy/index.vue +0 -22
  561. package/pages/c/_cluster/manager/index.vue +0 -22
  562. package/pages/c/_cluster/mcapps/index.vue +0 -21
  563. package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +0 -232
  564. package/plugins/dashboard-store/rehydrate-all.js +0 -44
  565. package/plugins/index.js +0 -11
  566. package/plugins/portal-vue.js +0 -4
  567. package/plugins/portal.js +0 -4
  568. package/plugins/resize.js +0 -5
  569. package/plugins/shortkey.js +0 -4
  570. package/plugins/tooltip.js +0 -4
  571. package/plugins/v-select.js +0 -4
  572. package/utils/group.js +0 -70
  573. package/utils/nuxt.js +0 -638
  574. package/utils/router.scrollBehavior.js +0 -78
  575. /package/components/__tests__/{Collapse.spec.ts → Collapse.test.ts} +0 -0
  576. /package/models/__tests__/{node.ts → node.test.ts} +0 -0
  577. /package/plugins/steve/__tests__/{header-warnings.spec.ts → header-warnings.test.ts} +0 -0
  578. /package/plugins/steve/__tests__/{steve-class.spec.ts → steve-class.test.ts} +0 -0
  579. /package/rancher-components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
  580. /package/rancher-components/components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
  581. /package/types/{pod-security-admission.ts → resources/pod-security-admission.ts} +0 -0
@@ -0,0 +1,224 @@
1
+ import { CATALOG } from '@shell/config/types';
2
+ import { state, getters, actions, mutations } from '../catalog';
3
+ import Vuex from 'vuex';
4
+ import { createLocalVue } from '@vue/test-utils';
5
+
6
+ const clusterRepo = { _key: 'testClusterRepo' };
7
+ const repoChartName = 'abc';
8
+ const repoChart = {
9
+ name: repoChartName,
10
+ type: 'namespaced',
11
+ version: 1,
12
+ metadata: { name: repoChartName }
13
+ };
14
+ const repoCharts = [repoChart];
15
+ const repo = {
16
+ metadata: { name: 'testRepo' },
17
+ _key: 'testRepo',
18
+ links: { index: 'fetchindex' },
19
+ canLoad: true,
20
+ followLink: () => ({ entries: { [repoChartName]: repoCharts } })
21
+ };
22
+
23
+ const catalogStoreName = 'catalog';
24
+ const clusterStore = 'cluster';
25
+
26
+ const expectedChartKey = `namespace/${ repo._key }/${ repoChartName }`;
27
+ const initialVersionInfo = { junk: true };
28
+ const initialRawChartName = 'cde';
29
+ const initialRawChart = {
30
+ id: `namespace/${ repo._key }/${ initialRawChartName }`,
31
+ repoKey: repo._key,
32
+ type: 'namespaced',
33
+ name: initialRawChartName,
34
+ version: 1,
35
+ metadata: { name: initialRawChartName }
36
+ };
37
+ const initialRawCharts = { [initialRawChart.id]: initialRawChart };
38
+ const initialLoadedInfo = { [repo._key]: true };
39
+
40
+ describe('catalog', () => {
41
+ describe('load', () => {
42
+ const constructStore = () => {
43
+ const catalogStore = {
44
+ state: state(),
45
+ getters,
46
+ mutations,
47
+ actions,
48
+ };
49
+
50
+ const localVue = createLocalVue();
51
+
52
+ localVue.use(Vuex);
53
+
54
+ return {
55
+ modules: {
56
+ i18n: {
57
+ namespaced: true,
58
+ getters: { withFallback: (state: any) => () => '' }
59
+ },
60
+ [catalogStoreName]: {
61
+ namespaced: true,
62
+ state: {
63
+ ...catalogStore.state,
64
+ // Set initial state
65
+ // - repos have been loaded
66
+ // - some charts exist
67
+ // - some chart version info has been fetched
68
+ loaded: initialLoadedInfo,
69
+ charts: initialRawCharts,
70
+ versionInfos: initialVersionInfo,
71
+ },
72
+ mutations: catalogStore.mutations,
73
+ actions: catalogStore.actions,
74
+ getters: catalogStore.getters
75
+ },
76
+ [clusterStore]: {
77
+ namespaced: true,
78
+ getters: { schemaFor: (state: any) => (schema: string) => ({}) },
79
+ actions: {
80
+ findAll: (ctx: any, ...args: any[]) => {
81
+ if (args[0].type === CATALOG.CLUSTER_REPO) {
82
+ return Promise.resolve([clusterRepo]);
83
+ }
84
+ if (args[0].type === CATALOG.REPO) {
85
+ return Promise.resolve([repo]);
86
+ }
87
+
88
+ return Promise.resolve([]);
89
+ },
90
+ }
91
+ }
92
+ },
93
+ state: {
94
+ $plugin: { getDynamic: () => require(`@shell/models/chart`) },
95
+ [catalogStoreName]: { } as { [key: string]: any},
96
+ },
97
+ getters: {
98
+ currentCluster: () => ({ }),
99
+ currentProduct: () => ({ inStore: clusterStore }),
100
+ },
101
+ mutations: { },
102
+ actions: { }
103
+ };
104
+ };
105
+
106
+ it('no force', async() => {
107
+ const localVue = createLocalVue();
108
+
109
+ localVue.use(Vuex);
110
+
111
+ const store = new Vuex.Store(constructStore());
112
+
113
+ // Validate initial state of store
114
+ expect(store.getters[`${ catalogStoreName }/rawCharts`]).toStrictEqual(initialRawCharts);
115
+ expect(store.getters[`${ catalogStoreName }/charts`]).toStrictEqual([]);
116
+
117
+ // Make the request
118
+ await store.dispatch(`${ catalogStoreName }/load`, {
119
+ force: false,
120
+ reset: false
121
+ });
122
+
123
+ // Basics should always be ok
124
+ expect(store.getters[`${ catalogStoreName }/inStore`]).toStrictEqual(clusterStore);
125
+ expect(store.getters[`${ catalogStoreName }/errors`]).toStrictEqual([]);
126
+ expect(store.getters[`${ catalogStoreName }/repos`]).toStrictEqual([clusterRepo, repo]);
127
+ expect(store.state[catalogStoreName].loaded).toStrictEqual(initialLoadedInfo);
128
+
129
+ // Store should still be in it's initial state (but charts populated)
130
+ expect(store.getters[`${ catalogStoreName }/rawCharts`]).toStrictEqual(initialRawCharts);
131
+ expect(store.getters[`${ catalogStoreName }/charts`]).toStrictEqual([initialRawChart]);
132
+
133
+ // We haven't reset the version info, so it should be unchanged
134
+ expect(store.state[catalogStoreName].versionInfos).toStrictEqual(initialVersionInfo);
135
+ });
136
+
137
+ it('force', async() => {
138
+ const localVue = createLocalVue();
139
+
140
+ localVue.use(Vuex);
141
+
142
+ const store = new Vuex.Store(constructStore());
143
+
144
+ // Validate initial state of store
145
+ let rawCharts = store.getters[`${ catalogStoreName }/rawCharts`];
146
+
147
+ expect(store.getters[`${ catalogStoreName }/rawCharts`]).toStrictEqual(initialRawCharts);
148
+ expect(rawCharts[initialRawChart.id]).toBeDefined();
149
+ expect(rawCharts[initialRawChart.id].id).toBe(initialRawChart.id);
150
+
151
+ expect(store.getters[`${ catalogStoreName }/charts`]).toStrictEqual([]);
152
+
153
+ // Make the request
154
+ await store.dispatch(`${ catalogStoreName }/load`, {
155
+ force: true, // Force such that we should get some values
156
+ reset: false
157
+ });
158
+
159
+ rawCharts = store.getters[`${ catalogStoreName }/rawCharts`];
160
+ const charts = store.getters[`${ catalogStoreName }/charts`];
161
+
162
+ // Basics should always be ok
163
+ expect(store.getters[`${ catalogStoreName }/inStore`]).toStrictEqual(clusterStore);
164
+ expect(store.getters[`${ catalogStoreName }/errors`]).toStrictEqual([]);
165
+ expect(store.getters[`${ catalogStoreName }/repos`]).toStrictEqual([clusterRepo, repo]);
166
+ expect(store.state[catalogStoreName].loaded).toStrictEqual(initialLoadedInfo);
167
+
168
+ // Store should have it's initial chart... and the new one
169
+ expect(rawCharts[initialRawChart.id]).toBeDefined();
170
+ expect(rawCharts[initialRawChart.id].id).toBe(initialRawChart.id);
171
+ expect(rawCharts[expectedChartKey]).toBeDefined();
172
+ expect(rawCharts[expectedChartKey].id).toBe(expectedChartKey);
173
+ expect(rawCharts[expectedChartKey].versions[0].version).toBe(repoChart.version);
174
+ expect(charts[0]).toBeDefined();
175
+ expect(charts[0].id).toBe(initialRawChart.id);
176
+ expect(charts[1]).toBeDefined();
177
+ expect(charts[1].id).toBe(expectedChartKey);
178
+
179
+ // Version info should be unchanged
180
+ expect(store.state[catalogStoreName].versionInfos).toStrictEqual(initialVersionInfo);
181
+ });
182
+
183
+ it('force + reset', async() => {
184
+ const localVue = createLocalVue();
185
+
186
+ localVue.use(Vuex);
187
+
188
+ const store = new Vuex.Store(constructStore());
189
+
190
+ // Validate initial state of store
191
+ expect(store.getters[`${ catalogStoreName }/rawCharts`]).toStrictEqual(initialRawCharts);
192
+ expect(store.getters[`${ catalogStoreName }/charts`]).toStrictEqual([]);
193
+
194
+ // Make the request
195
+ await store.dispatch(`${ catalogStoreName }/load`, {
196
+ force: true,
197
+ reset: true
198
+ });
199
+
200
+ const rawCharts = store.getters[`${ catalogStoreName }/rawCharts`];
201
+ const charts = store.getters[`${ catalogStoreName }/charts`];
202
+
203
+ // Basics should always be ok
204
+ expect(store.getters[`${ catalogStoreName }/inStore`]).toStrictEqual(clusterStore);
205
+ expect(store.getters[`${ catalogStoreName }/errors`]).toStrictEqual([]);
206
+ expect(store.getters[`${ catalogStoreName }/repos`]).toStrictEqual([clusterRepo, repo]);
207
+ expect(store.state[catalogStoreName].loaded).toStrictEqual(initialLoadedInfo);
208
+
209
+ // Store should NOT have it's initial chart... and should have the new one
210
+ expect(rawCharts[initialRawChart.id]).not.toBeDefined();
211
+ expect(rawCharts[expectedChartKey]).toBeDefined();
212
+ expect(rawCharts[expectedChartKey].id).toBe(expectedChartKey);
213
+ expect(rawCharts[expectedChartKey].versions[0].version).toBe(repoChart.version);
214
+
215
+ expect(charts).toHaveLength(1);
216
+ expect(charts[0]).toBeDefined();
217
+ expect(charts[0].id).toBe(expectedChartKey);
218
+ expect(charts[0].versions[0].version).toBe(repoChart.version);
219
+
220
+ // Version info should be changed (it's now empty given reset)
221
+ expect(store.state[catalogStoreName].versionInfos).toStrictEqual({ });
222
+ });
223
+ });
224
+ });
package/store/auth.js CHANGED
@@ -12,7 +12,8 @@ export const BASE_SCOPES = {
12
12
  github: ['read:org'],
13
13
  googleoauth: ['openid profile email'],
14
14
  azuread: [],
15
- keycloakoidc: ['openid profile email']
15
+ keycloakoidc: ['openid profile email'],
16
+ oidc: ['openid profile email'],
16
17
  };
17
18
 
18
19
  const KEY = 'rc_nonce';
@@ -37,7 +38,7 @@ export const state = function() {
37
38
  };
38
39
 
39
40
  export const getters = {
40
- fromHeader() {
41
+ fromHeader(state) {
41
42
  return state.fromHeader;
42
43
  },
43
44
 
@@ -344,9 +345,27 @@ export const actions = {
344
345
  }
345
346
  },
346
347
 
347
- async logout({ dispatch, commit }) {
348
+ async logout({
349
+ dispatch, commit, getters, rootState
350
+ }, options = {}) {
351
+ // So, we only do this check if auth has been initialized.
352
+ //
353
+ // It's possible to be logged in and visit auth/logout directly instead
354
+ // of navigating from the app while being logged in. Unfortunately auth/logout
355
+ // doesn't use the authenticated middleware which means auth will never be
356
+ // initialized and this check will be invalid. This interferes with how we sometimes
357
+ // logout in our e2e tests.
358
+ //
359
+ // I'm going to leave this as is because we will be modifying and removing authenticated
360
+ // middleware soon and we should remove `force` at that time.
361
+ //
362
+ // TODO: remove `force` once authenticated middleware is removed/made sane.
363
+ if (!options?.force && !getters['loggedIn']) {
364
+ return;
365
+ }
366
+
348
367
  // Unload plugins - we will load again on login
349
- await this.$plugin.logout();
368
+ await rootState.$plugin.logout();
350
369
 
351
370
  try {
352
371
  await dispatch('rancher/request', {
package/store/aws.js CHANGED
@@ -4,7 +4,10 @@ import { FetchHttpHandler } from '@aws-sdk/fetch-http-handler';
4
4
  import { isArray, addObjects } from '@shell/utils/array';
5
5
 
6
6
  export const state = () => {
7
- return {};
7
+ return {
8
+ instanceTypes: [],
9
+ clientInfo: null
10
+ };
8
11
  };
9
12
 
10
13
  class Handler {
@@ -60,6 +63,21 @@ export const getters = {
60
63
 
61
64
  defaultInstanceType() {
62
65
  return 't3a.medium';
66
+ },
67
+
68
+ instanceTypes(state) {
69
+ return state.instanceTypes;
70
+ },
71
+
72
+ clientInfo(state) {
73
+ return state.clientInfo;
74
+ }
75
+ };
76
+
77
+ export const mutations = {
78
+ setInstanceTypes(state, { types, clientInfo }) {
79
+ state.instanceTypes = types;
80
+ state.clientInfo = clientInfo;
63
81
  }
64
82
  };
65
83
 
@@ -73,7 +91,11 @@ export const actions = {
73
91
  },
74
92
 
75
93
  kmsLib() {
76
- return import(/* webpackChunkName: "aws-ec2" */ '@aws-sdk/client-kms');
94
+ return import(/* webpackChunkName: "aws-kms" */ '@aws-sdk/client-kms');
95
+ },
96
+
97
+ iamLib() {
98
+ return import(/* webpackChunkName: "aws-iam" */ '@aws-sdk/client-iam');
77
99
  },
78
100
 
79
101
  async ec2({ dispatch }, {
@@ -118,7 +140,29 @@ export const actions = {
118
140
  return client;
119
141
  },
120
142
 
121
- async instanceInfo({ dispatch, rootGetters, state }, { client }) {
143
+ async iam({ dispatch }, {
144
+ region, cloudCredentialId, accessKey, secretKey
145
+ }) {
146
+ const lib = await dispatch('iamLib');
147
+
148
+ const client = new lib.IAM({
149
+ region,
150
+ credentialDefaultProvider: credentialDefaultProvider(accessKey, secretKey),
151
+ requestHandler: new Handler(cloudCredentialId),
152
+ });
153
+
154
+ return client;
155
+ },
156
+
157
+ async describeInstanceTypes({
158
+ dispatch, rootGetters, state, commit
159
+ }, { client }) {
160
+ const cloudCredentialId = client?.config?.requestHandler?.cloudCredentialId;
161
+ const region = await client.config.region();
162
+
163
+ if (cloudCredentialId === rootGetters['aws/clientInfo']?.cloudCredentialId && region === rootGetters['aws/clientInfo']?.region) {
164
+ return rootGetters['aws/instanceTypes'];
165
+ }
122
166
  const data = await dispatch('depaginateList', { client, cmd: 'describeInstanceTypes' });
123
167
 
124
168
  const groups = (await import(/* webpackChunkName: "aws-data" */'@shell/assets/data/ec2-instance-groups.json')).default;
@@ -158,11 +202,12 @@ export const actions = {
158
202
 
159
203
  list.push({
160
204
  apiName,
161
- currentGeneration: row.CurrentGeneration || false,
205
+ currentGeneration: row.CurrentGeneration || false,
162
206
  groupLabel,
163
207
  instanceClass,
164
- memoryBytes: row.MemoryInfo.SizeInMiB * 1024 * 1024,
165
- label: rootGetters['i18n/t']('cluster.machineConfig.aws.sizeLabel', {
208
+ memoryBytes: row.MemoryInfo.SizeInMiB * 1024 * 1024,
209
+ supportedUsageClasses: row.SupportedUsageClasses,
210
+ label: rootGetters['i18n/t']('cluster.machineConfig.aws.sizeLabel', {
166
211
  apiName,
167
212
  cpu: row.VCpuInfo.DefaultVCpus,
168
213
  memory: row.MemoryInfo.SizeInMiB / 1024,
@@ -175,6 +220,8 @@ export const actions = {
175
220
 
176
221
  const out = sortBy(list, ['currentGeneration:desc', 'groupLabel', 'instanceClass', 'memoryBytes', 'apiName']);
177
222
 
223
+ commit('setInstanceTypes', { types: out, clientInfo: { region, cloudCredentialId } });
224
+
178
225
  return out;
179
226
  },
180
227
 
package/store/catalog.js CHANGED
@@ -1,4 +1,4 @@
1
- import { CATALOG } from '@shell/config/types';
1
+ import { CATALOG, EXPERIMENTAL, DEPRECATED } from '@shell/config/types';
2
2
  import { CATALOG as CATALOG_ANNOTATIONS } from '@shell/config/labels-annotations';
3
3
  import { addParams } from '@shell/utils/url';
4
4
  import { allHash, allHashSettled } from '@shell/utils/promise';
@@ -102,7 +102,7 @@ export const getters = {
102
102
 
103
103
  chart(state, getters) {
104
104
  return ({
105
- key, repoType, repoName, chartName, preferRepoType, preferRepoName, includeHidden
105
+ key, repoType, repoName, chartName, preferRepoType, preferRepoName, includeHidden, showDeprecated
106
106
  }) => {
107
107
  if ( key && !repoType && !repoName && !chartName) {
108
108
  const parsed = parseKey(key);
@@ -116,7 +116,7 @@ export const getters = {
116
116
  repoType,
117
117
  repoName,
118
118
  chartName,
119
- deprecated: false,
119
+ deprecated: !!showDeprecated,
120
120
  });
121
121
 
122
122
  if ( includeHidden === false ) {
@@ -324,12 +324,21 @@ export const mutations = {
324
324
  }
325
325
  },
326
326
 
327
+ setVersions(state, versions) {
328
+ state.versionInfos = versions;
329
+ },
330
+
327
331
  cacheVersion(state, { key, info }) {
328
332
  state.versionInfos[key] = info;
329
333
  }
330
334
  };
331
335
 
332
336
  export const actions = {
337
+ /**
338
+ * force: Always refresh catalog's helm repo by re-fetching index.yaml
339
+ *
340
+ * reset: clear existing charts and version cache
341
+ */
333
342
  async load(ctx, { force, reset } = {}) {
334
343
  const {
335
344
  state, getters, rootGetters, commit, dispatch
@@ -397,6 +406,10 @@ export const actions = {
397
406
  errors,
398
407
  loaded,
399
408
  });
409
+
410
+ if (reset) {
411
+ commit('setVersions', {});
412
+ }
400
413
  },
401
414
 
402
415
  async refresh({ getters, commit, dispatch }) {
@@ -488,8 +501,10 @@ function addChart(ctx, map, chart, repo) {
488
501
  certified = CATALOG_ANNOTATIONS._OTHER;
489
502
  }
490
503
 
491
- if ( chart.annotations?.[CATALOG_ANNOTATIONS.EXPERIMENTAL] ) {
492
- sideLabel = 'Experimental';
504
+ if ( chart.deprecated ) {
505
+ sideLabel = DEPRECATED;
506
+ } else if ( chart.annotations?.[CATALOG_ANNOTATIONS.EXPERIMENTAL] ) {
507
+ sideLabel = EXPERIMENTAL;
493
508
  } else if (
494
509
  !repo.isRancherSource &&
495
510
  certifiedAnnotation &&
@@ -523,6 +538,7 @@ function addChart(ctx, map, chart, repo) {
523
538
  versions: [],
524
539
  categories: filterCategories(chart.keywords),
525
540
  deprecated: !!chart.deprecated,
541
+ experimental: !!chart.annotations?.[CATALOG_ANNOTATIONS.EXPERIMENTAL],
526
542
  hidden: !!chart.annotations?.[CATALOG_ANNOTATIONS.HIDDEN],
527
543
  targetNamespace: chart.annotations?.[CATALOG_ANNOTATIONS.NAMESPACE],
528
544
  targetName: chart.annotations?.[CATALOG_ANNOTATIONS.RELEASE_NAME],
@@ -0,0 +1,26 @@
1
+ interface State {
2
+ createNamespace: boolean;
3
+ }
4
+
5
+ export const state = (): State => {
6
+ return { createNamespace: false };
7
+ };
8
+
9
+ export const mutations = {
10
+ SET_CREATE_NAMESPACE(state: State, shouldCreateNamespace: boolean): void {
11
+ state.createNamespace = shouldCreateNamespace;
12
+ }
13
+ };
14
+
15
+ export const actions = {
16
+ setCreateNamespace({ commit }: unknown, shouldCreateNamespace: boolean): void {
17
+ commit('SET_CREATE_NAMESPACE', shouldCreateNamespace);
18
+ }
19
+ };
20
+
21
+ export default {
22
+ namespaced: true,
23
+ state,
24
+ mutations,
25
+ actions,
26
+ };
@@ -0,0 +1,35 @@
1
+ const defaultState = {
2
+ previewCluster: {
3
+ ready: true,
4
+ isLocal: false,
5
+ badge: { }
6
+ }
7
+ };
8
+
9
+ export const state = function() {
10
+ return { previewCluster: defaultState.previewCluster };
11
+ };
12
+
13
+ export const getters = {
14
+ getPreviewCluster(state) {
15
+ return state.previewCluster;
16
+ },
17
+ };
18
+
19
+ export const mutations = {
20
+ setPreviewCluster(state, previewCluster) {
21
+ state.previewCluster = previewCluster;
22
+ },
23
+ setDefaultPreviewCluster(state) {
24
+ state.previewCluster = defaultState.previewCluster;
25
+ }
26
+ };
27
+
28
+ export const actions = {
29
+ setPreviewCluster({ commit }, previewCluster) {
30
+ commit('setPreviewCluster', previewCluster);
31
+ },
32
+ setDefaultPreviewCluster({ commit }) {
33
+ commit('setDefaultPreviewCluster');
34
+ }
35
+ };
package/store/features.js CHANGED
@@ -2,8 +2,8 @@ import { MANAGEMENT } from '@shell/config/types';
2
2
 
3
3
  const definitions = {};
4
4
 
5
- export const create = function(name, def) {
6
- definitions[name] = { def };
5
+ export const create = function(name, defaultValue) {
6
+ definitions[name] = { def: defaultValue };
7
7
 
8
8
  return name;
9
9
  };
@@ -33,6 +33,8 @@ export const FLEET = create('continuous-delivery', true);
33
33
  export const HARVESTER = create('harvester', true);
34
34
  export const HARVESTER_CONTAINER = create('harvester-baremetal-container-workload', false);
35
35
  export const FLEET_WORKSPACE_BACK = create('provisioningv2-fleet-workspace-back-population', false);
36
+ export const STEVE_CACHE = create('ui-sql-cache', false);
37
+ export const UIEXTENSION = create('uiextension', true);
36
38
 
37
39
  // Not currently used.. no point defining ones we don't use
38
40
  // export const EMBEDDED_CLUSTER_API = create('embedded-cluster-api', true);
@@ -61,9 +63,9 @@ export const getters = {
61
63
  };
62
64
 
63
65
  export const actions = {
64
- loadServer({ rootGetters, dispatch }) {
66
+ async loadServer({ rootGetters, dispatch }) {
65
67
  if ( rootGetters['management/canList'](MANAGEMENT.FEATURE) ) {
66
- return dispatch('management/findAll', { type: MANAGEMENT.FEATURE }, { root: true });
68
+ return await dispatch('management/findAll', { type: MANAGEMENT.FEATURE, opt: { watch: false } }, { root: true });
67
69
  }
68
70
  },
69
71
  };