@rancher/shell 0.1.2 → 0.1.4

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 (347) hide show
  1. package/assets/brand/suse/dark/rancher-logo.svg +1 -148
  2. package/assets/brand/suse/rancher-logo.svg +1 -130
  3. package/assets/images/featured/img1.jpg +0 -0
  4. package/assets/images/featured.jpg +0 -0
  5. package/assets/images/generic-plugin.svg +7 -0
  6. package/assets/styles/themes/_dark.scss +3 -0
  7. package/assets/styles/themes/_light.scss +3 -0
  8. package/assets/styles/themes/_suse.scss +1 -1
  9. package/assets/translations/en-us.yaml +209 -813
  10. package/assets/translations/zh-hans.yaml +28 -792
  11. package/components/ActionMenu.vue +3 -3
  12. package/components/AsyncButton.vue +17 -2
  13. package/components/ButtonDropdown.vue +4 -0
  14. package/components/Carousel.vue +291 -0
  15. package/components/CodeMirror.vue +6 -8
  16. package/components/CommunityLinks.vue +70 -19
  17. package/components/ContainerResourceLimit.vue +14 -0
  18. package/components/CruResource.vue +11 -3
  19. package/components/Dialog.vue +102 -0
  20. package/components/ExplorerMembers.vue +121 -0
  21. package/components/ExplorerProjectsNamespaces.vue +404 -0
  22. package/components/GrafanaDashboard.vue +17 -2
  23. package/components/IconMessage.vue +9 -1
  24. package/components/LocaleSelector.vue +114 -0
  25. package/components/PromptModal.vue +2 -3
  26. package/components/ResourceList/index.vue +1 -1
  27. package/components/ResourceTable.vue +9 -7
  28. package/components/SimpleBox.vue +6 -4
  29. package/components/SingleClusterInfo.vue +1 -1
  30. package/components/SortableTable/index.vue +18 -25
  31. package/components/SortableTable/selection.js +1 -0
  32. package/components/Tabbed/Tab.vue +5 -0
  33. package/components/Tabbed/index.vue +29 -2
  34. package/components/auth/AzureWarning.vue +5 -1
  35. package/components/auth/Principal.vue +2 -1
  36. package/components/auth/RoleDetailEdit.vue +18 -11
  37. package/components/fleet/FleetBundles.vue +8 -3
  38. package/components/fleet/FleetRepos.vue +0 -2
  39. package/components/fleet/FleetSummary.vue +6 -0
  40. package/components/form/KeyValue.vue +80 -58
  41. package/components/form/NameNsDescription.vue +12 -8
  42. package/components/form/NodeScheduling.vue +1 -1
  43. package/components/form/ResourceTabs/index.vue +5 -1
  44. package/components/form/WorkloadPorts.vue +1 -1
  45. package/components/formatter/ClusterLink.vue +3 -7
  46. package/components/formatter/WorkloadHealthScale.vue +1 -1
  47. package/components/nav/Header.vue +9 -9
  48. package/components/nav/NamespaceFilter.vue +10 -7
  49. package/components/nav/TopLevelMenu.vue +10 -65
  50. package/components/nav/WindowManager/ContainerLogs.vue +1 -1
  51. package/config/footer.js +13 -14
  52. package/config/labels-annotations.js +2 -1
  53. package/config/product/explorer.js +5 -4
  54. package/config/product/harvester-manager.js +64 -2
  55. package/config/product/legacy.js +0 -47
  56. package/config/product/manager.js +9 -0
  57. package/config/product/multi-cluster-apps.js +0 -12
  58. package/config/product/settings.js +12 -1
  59. package/config/product/uiplugins.js +17 -0
  60. package/config/settings.js +37 -72
  61. package/config/table-headers.js +0 -1
  62. package/config/types.js +9 -25
  63. package/config/uiplugins.js +60 -0
  64. package/content/docs/en-us/getting-started.md +1 -26
  65. package/core/plugin-routes.ts +34 -22
  66. package/core/plugin.ts +15 -3
  67. package/core/plugins-loader.js +2 -0
  68. package/core/plugins.js +91 -36
  69. package/core/types.ts +7 -1
  70. package/detail/provisioning.cattle.io.cluster.vue +15 -2
  71. package/detail/workload/index.vue +11 -5
  72. package/{components/dialog → dialog}/AddClusterMemberDialog.vue +0 -0
  73. package/{components/dialog → dialog}/AddCustomBadgeDialog.vue +0 -0
  74. package/{components/dialog → dialog}/AddProjectMemberDialog.vue +0 -0
  75. package/{components/dialog → dialog}/AddonConfigConfirmationDialog.vue +0 -0
  76. package/dialog/DiagnosticTimingsDialog.vue +116 -0
  77. package/{components/dialog → dialog}/DrainNode.vue +0 -0
  78. package/{components/dialog → dialog}/ForceMachineRemoveDialog.vue +0 -0
  79. package/{components/dialog → dialog}/GenericPrompt.vue +0 -0
  80. package/{components/dialog → dialog}/RollbackWorkloadDialog.vue +0 -0
  81. package/{components/dialog → dialog}/RotateCertificatesDialog.vue +9 -3
  82. package/{components/dialog → dialog}/RotateEncryptionKeyDialog.vue +0 -0
  83. package/{components/dialog → dialog}/SaveAsRKETemplateDialog.vue +0 -0
  84. package/{components/dialog → dialog}/ScaleMachineDownDialog.vue +0 -0
  85. package/edit/auth/azuread.vue +44 -6
  86. package/edit/management.cattle.io.project.vue +2 -2
  87. package/edit/namespace.vue +17 -10
  88. package/edit/networking.k8s.io.ingress/index.vue +2 -2
  89. package/edit/persistentvolume/index.vue +3 -0
  90. package/edit/persistentvolumeclaim.vue +1 -0
  91. package/edit/pod.vue +27 -0
  92. package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +1 -1
  93. package/edit/provisioning.cattle.io.cluster/MachinePool.vue +33 -5
  94. package/edit/provisioning.cattle.io.cluster/rke2.vue +76 -5
  95. package/edit/service.vue +8 -6
  96. package/edit/workload/__tests__/Upgrading.test.ts +1 -0
  97. package/edit/workload/index.vue +375 -15
  98. package/edit/workload/mixins/workload.js +62 -7
  99. package/edit/workload/storage/ContainerMountPaths.vue +240 -0
  100. package/edit/workload/storage/Mount.vue +1 -0
  101. package/edit/workload/storage/awsElasticBlockStore.vue +20 -1
  102. package/edit/workload/storage/azureDisk.vue +22 -2
  103. package/edit/workload/storage/azureFile.vue +20 -2
  104. package/edit/workload/storage/csi/index.vue +23 -1
  105. package/edit/workload/storage/gcePersistentDisk.vue +20 -2
  106. package/edit/workload/storage/index.vue +23 -49
  107. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +1 -0
  108. package/edit/workload/storage/vsphereVolume.vue +11 -1
  109. package/layouts/default.vue +63 -32
  110. package/layouts/error.vue +5 -1
  111. package/layouts/home.vue +14 -5
  112. package/layouts/plain.vue +10 -5
  113. package/list/harvesterhci.io.management.cluster.vue +74 -33
  114. package/list/management.cattle.io.setting.vue +3 -3
  115. package/list/namespace.vue +3 -5
  116. package/list/provisioning.cattle.io.cluster.vue +1 -1
  117. package/machine-config/amazonec2.vue +2 -0
  118. package/machine-config/harvester.vue +100 -51
  119. package/middleware/authenticated.js +56 -52
  120. package/mixins/form-validation.js +1 -1
  121. package/mixins/resource-fetch.js +3 -1
  122. package/models/catalog.cattle.io.uiplugin.js +34 -0
  123. package/models/cluster/node.js +25 -2
  124. package/models/fleet.cattle.io.bundle.js +27 -20
  125. package/models/harvesterhci.io.management.cluster.js +200 -5
  126. package/models/management.cattle.io.cluster.js +1 -1
  127. package/models/management.cattle.io.clusterroletemplatebinding.js +9 -0
  128. package/models/management.cattle.io.project.js +23 -2
  129. package/models/namespace.js +19 -3
  130. package/models/pod.js +19 -2
  131. package/models/provisioning.cattle.io.cluster.js +16 -6
  132. package/models/workload.js +9 -246
  133. package/models/workload.service.js +314 -0
  134. package/nuxt.config.js +80 -34
  135. package/package.json +107 -108
  136. package/pages/auth/login.vue +11 -2
  137. package/pages/auth/setup.vue +1 -1
  138. package/pages/c/_cluster/_product/members/index.vue +3 -93
  139. package/pages/c/_cluster/_product/projectsnamespaces.vue +6 -403
  140. package/pages/c/_cluster/apps/charts/index.vue +46 -1
  141. package/pages/c/_cluster/apps/charts/install.vue +10 -9
  142. package/pages/c/_cluster/explorer/index.vue +72 -9
  143. package/pages/c/_cluster/explorer/tools/index.vue +12 -5
  144. package/pages/c/_cluster/mcapps/index.vue +1 -1
  145. package/pages/c/_cluster/settings/brand.vue +0 -40
  146. package/pages/c/_cluster/settings/links.vue +200 -0
  147. package/pages/c/_cluster/settings/performance.vue +19 -16
  148. package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +232 -0
  149. package/pages/c/_cluster/uiplugins/InstallDialog.vue +242 -0
  150. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +284 -0
  151. package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +130 -0
  152. package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +253 -0
  153. package/pages/c/_cluster/uiplugins/UninstallDialog.vue +115 -0
  154. package/pages/c/_cluster/uiplugins/index.vue +694 -0
  155. package/pages/diagnostic.vue +185 -101
  156. package/pages/docs/_doc.vue +3 -1
  157. package/pages/fail-whale.vue +1 -10
  158. package/pages/home.vue +21 -56
  159. package/pages/index.vue +18 -4
  160. package/pages/prefs.vue +108 -86
  161. package/pages/safeMode.vue +17 -0
  162. package/pages/support/index.vue +23 -15
  163. package/pkg/auto-import.js +44 -7
  164. package/pkg/dynamic-importer.lib.js +4 -0
  165. package/pkg/dynamic-plugin-loader.js +28 -0
  166. package/pkg/import.js +2 -2
  167. package/pkg/model-loader-require.lib.js +3 -0
  168. package/pkg/vue.config.js +9 -6
  169. package/plugins/dashboard-store/model-loader-require.js +12 -0
  170. package/plugins/dashboard-store/model-loader.js +4 -1
  171. package/plugins/dashboard-store/resource-class.js +12 -5
  172. package/plugins/formatters.js +15 -0
  173. package/plugins/plugin.js +56 -4
  174. package/plugins/steve/actions.js +1 -1
  175. package/plugins/steve/index.js +6 -4
  176. package/plugins/steve/mutations.js +1 -1
  177. package/plugins/steve/subscribe.js +89 -56
  178. package/plugins/steve/web-worker.steve-sub-worker.js +24 -15
  179. package/promptRemove/management.cattle.io.globalrole.vue +47 -0
  180. package/promptRemove/management.cattle.io.roletemplate.vue +47 -0
  181. package/promptRemove/mixin/roleDeletionCheck.js +97 -0
  182. package/rancher-components/Form/Checkbox/Checkbox.test.ts +77 -0
  183. package/rancher-components/Form/Checkbox/Checkbox.vue +12 -2
  184. package/scripts/build-pkg.sh +48 -2
  185. package/scripts/drone-build-pkg.sh +31 -0
  186. package/scripts/publish-shell.sh +11 -12
  187. package/scripts/serve-pkgs +17 -10
  188. package/scripts/sync-shell-deps +37 -0
  189. package/store/catalog.js +12 -9
  190. package/store/i18n.js +26 -12
  191. package/store/index.js +4 -181
  192. package/store/prefs.js +46 -2
  193. package/store/type-map.js +47 -33
  194. package/store/uiplugins.ts +15 -61
  195. package/utils/__tests__/object.test.ts +0 -24
  196. package/utils/__tests__/selector.test.ts +1 -1
  197. package/utils/cluster.js +1 -1
  198. package/utils/custom-validators.js +1 -12
  199. package/utils/dynamic-importer.js +5 -1
  200. package/utils/grafana.js +2 -6
  201. package/utils/socket.js +41 -20
  202. package/utils/string.js +1 -7
  203. package/utils/validators/formRules/__tests__/index.test.ts +108 -0
  204. package/utils/validators/formRules/index.ts +9 -1
  205. package/utils/validators/setting.js +0 -35
  206. package/yarn-error.log +195 -0
  207. package/components/FilterLabel.vue +0 -254
  208. package/components/HarvesterUpgradeProgressBarList.vue +0 -109
  209. package/components/VMConsoleBar.vue +0 -87
  210. package/components/dialog/harvester/AddHotplugModal.vue +0 -159
  211. package/components/dialog/harvester/BackupModal.vue +0 -117
  212. package/components/dialog/harvester/CloneTemplate.vue +0 -125
  213. package/components/dialog/harvester/EjectCDROMDialog.vue +0 -157
  214. package/components/dialog/harvester/ExportImageDialog.vue +0 -152
  215. package/components/dialog/harvester/MaintenanceDialog.vue +0 -94
  216. package/components/dialog/harvester/MigrationDialog.vue +0 -154
  217. package/components/dialog/harvester/RestoreDialog.vue +0 -153
  218. package/components/dialog/harvester/SupportBundle.vue +0 -217
  219. package/components/dialog/harvester/UnplugVolume.vue +0 -108
  220. package/components/form/SerialConsole/index.vue +0 -267
  221. package/components/formatter/AttachVMWithName.vue +0 -46
  222. package/components/formatter/CloudInitType.vue +0 -27
  223. package/components/formatter/HarvesterBackupTargetValidation.vue +0 -43
  224. package/components/formatter/HarvesterCPUUsed.vue +0 -122
  225. package/components/formatter/HarvesterDiskState.vue +0 -66
  226. package/components/formatter/HarvesterHostName.vue +0 -66
  227. package/components/formatter/HarvesterIpAddress.vue +0 -90
  228. package/components/formatter/HarvesterMemoryUsed.vue +0 -140
  229. package/components/formatter/HarvesterMigrationState.vue +0 -85
  230. package/components/formatter/HarvesterNodeName.vue +0 -49
  231. package/components/formatter/HarvesterStorageUsed.vue +0 -194
  232. package/components/formatter/HarvesterVmState.vue +0 -123
  233. package/components/nav/HarvesterUpgrade.vue +0 -232
  234. package/components/novnc/NovncConsole.vue +0 -93
  235. package/components/novnc/NovncConsoleItem.vue +0 -89
  236. package/components/novnc/NovncConsoleWrapper.vue +0 -243
  237. package/config/harvester-map.js +0 -44
  238. package/config/harvester-table-headers.js +0 -27
  239. package/config/product/harvester.js +0 -305
  240. package/detail/harvesterhci.io.host/HarvesterHostBasic.vue +0 -364
  241. package/detail/harvesterhci.io.host/HarvesterHostDisk.vue +0 -200
  242. package/detail/harvesterhci.io.host/HarvesterHostNetwork.vue +0 -89
  243. package/detail/harvesterhci.io.host/VirtualMachineInstance.vue +0 -134
  244. package/detail/harvesterhci.io.host/index.vue +0 -243
  245. package/detail/harvesterhci.io.virtualmachinebackup/index.vue +0 -221
  246. package/detail/harvesterhci.io.virtualmachineimage.vue +0 -118
  247. package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineBasics.vue +0 -279
  248. package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineEvents.vue +0 -75
  249. package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineKeypairs.vue +0 -114
  250. package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineMigration.vue +0 -79
  251. package/detail/kubevirt.io.virtualmachine/index.vue +0 -213
  252. package/edit/harvesterhci.io.cloudtemplate.vue +0 -123
  253. package/edit/harvesterhci.io.host/HarvesterDisk.vue +0 -262
  254. package/edit/harvesterhci.io.host/index.vue +0 -533
  255. package/edit/harvesterhci.io.keypair.vue +0 -112
  256. package/edit/harvesterhci.io.managedchart/index.vue +0 -25
  257. package/edit/harvesterhci.io.managedchart/rancher-monitoring.vue +0 -172
  258. package/edit/harvesterhci.io.networkattachmentdefinition.vue +0 -210
  259. package/edit/harvesterhci.io.setting/additional-ca.vue +0 -36
  260. package/edit/harvesterhci.io.setting/backup-target.vue +0 -182
  261. package/edit/harvesterhci.io.setting/http-proxy.vue +0 -79
  262. package/edit/harvesterhci.io.setting/index.vue +0 -201
  263. package/edit/harvesterhci.io.setting/overcommit-config.vue +0 -94
  264. package/edit/harvesterhci.io.setting/ssl-certificates.vue +0 -117
  265. package/edit/harvesterhci.io.setting/ssl-parameters.vue +0 -161
  266. package/edit/harvesterhci.io.setting/support-bundle-image.vue +0 -134
  267. package/edit/harvesterhci.io.setting/support-bundle-namespaces.vue +0 -73
  268. package/edit/harvesterhci.io.setting/vip-pools.vue +0 -244
  269. package/edit/harvesterhci.io.setting/vm-force-reset-policy.vue +0 -81
  270. package/edit/harvesterhci.io.virtualmachinebackup.vue +0 -256
  271. package/edit/harvesterhci.io.virtualmachineimage.vue +0 -364
  272. package/edit/harvesterhci.io.virtualmachinetemplateversion.vue +0 -340
  273. package/edit/harvesterhci.io.volume.vue +0 -195
  274. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/AccessCredentialsUsers.vue +0 -190
  275. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/index.vue +0 -212
  276. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/type/basicAuth.vue +0 -94
  277. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/type/sshkey.vue +0 -85
  278. package/edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/DataTemplate.vue +0 -153
  279. package/edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/index.vue +0 -279
  280. package/edit/kubevirt.io.virtualmachine/VirtualMachineCpuMemory.vue +0 -113
  281. package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/__tests__/HarvesterEditNetwork.test.ts +0 -41
  282. package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/base.vue +0 -281
  283. package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/index.vue +0 -142
  284. package/edit/kubevirt.io.virtualmachine/VirtualMachineReserved.vue +0 -54
  285. package/edit/kubevirt.io.virtualmachine/VirtualMachineSSHKey.vue +0 -256
  286. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/index.vue +0 -391
  287. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditContainer.test.ts +0 -40
  288. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditExisting.test.ts +0 -102
  289. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditVMImage.test.ts +0 -117
  290. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditVolume.test.ts +0 -74
  291. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/container.vue +0 -132
  292. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/existing.vue +0 -303
  293. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/vmImage.vue +0 -285
  294. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/volume.vue +0 -188
  295. package/edit/kubevirt.io.virtualmachine/index.vue +0 -642
  296. package/edit/network.harvesterhci.io.clusternetwork/index.vue +0 -19
  297. package/edit/network.harvesterhci.io.clusternetwork/vlan.vue +0 -134
  298. package/edit/workload/types/Deployment.vue +0 -377
  299. package/edit/workload/types/Generic.vue +0 -295
  300. package/list/harvesterhci.io.cloudtemplate.vue +0 -78
  301. package/list/harvesterhci.io.dashboard/HarvesterUpgrade.vue +0 -211
  302. package/list/harvesterhci.io.dashboard/UpgradeInfo.vue +0 -40
  303. package/list/harvesterhci.io.dashboard/index.vue +0 -752
  304. package/list/harvesterhci.io.host/index.vue +0 -186
  305. package/list/harvesterhci.io.networkattachmentdefinition.vue +0 -167
  306. package/list/harvesterhci.io.setting.vue +0 -241
  307. package/list/harvesterhci.io.virtualmachinebackup.vue +0 -172
  308. package/list/harvesterhci.io.virtualmachineimage.vue +0 -80
  309. package/list/harvesterhci.io.virtualmachinetemplateversion.vue +0 -173
  310. package/list/harvesterhci.io.volume.vue +0 -122
  311. package/list/kubevirt.io.virtualmachine.vue +0 -193
  312. package/mixins/harvester-vm/impl.js +0 -267
  313. package/mixins/harvester-vm/index.js +0 -1357
  314. package/models/harvester/configmap.js +0 -32
  315. package/models/harvester/harvesterhci.io.blockdevice.js +0 -55
  316. package/models/harvester/harvesterhci.io.keypair.js +0 -12
  317. package/models/harvester/harvesterhci.io.setting.js +0 -127
  318. package/models/harvester/harvesterhci.io.supportbundle.js +0 -35
  319. package/models/harvester/harvesterhci.io.upgrade.js +0 -226
  320. package/models/harvester/harvesterhci.io.virtualmachinebackup.js +0 -116
  321. package/models/harvester/harvesterhci.io.virtualmachineimage.js +0 -255
  322. package/models/harvester/harvesterhci.io.virtualmachinerestore.js +0 -43
  323. package/models/harvester/harvesterhci.io.virtualmachinetemplate.js +0 -69
  324. package/models/harvester/harvesterhci.io.virtualmachinetemplateversion.js +0 -227
  325. package/models/harvester/k8s.cni.cncf.io.networkattachmentdefinition.js +0 -32
  326. package/models/harvester/kubevirt.io.virtualmachine.js +0 -850
  327. package/models/harvester/kubevirt.io.virtualmachineinstance.js +0 -142
  328. package/models/harvester/management.cattle.io.managedchart.js +0 -191
  329. package/models/harvester/management.cattle.io.setting.js +0 -40
  330. package/models/harvester/network.harvesterhci.io.clusternetwork.js +0 -100
  331. package/models/harvester/network.harvesterhci.io.nodenetwork.js +0 -34
  332. package/models/harvester/node.js +0 -255
  333. package/models/harvester/persistentvolumeclaim.js +0 -166
  334. package/models/harvester/pod.js +0 -185
  335. package/pages/c/_cluster/harvester/airgapupgrade/index.vue +0 -309
  336. package/pages/c/_cluster/harvester/console/_uid/serial.vue +0 -51
  337. package/pages/c/_cluster/harvester/console/_uid/vnc.vue +0 -52
  338. package/pages/c/_cluster/harvester/index.vue +0 -24
  339. package/pages/c/_cluster/harvester/support/index.vue +0 -154
  340. package/pages/plugins.vue +0 -387
  341. package/pkg/model-loader.lib.js +0 -3
  342. package/promptRemove/kubevirt.io.virtualmachine.vue +0 -164
  343. package/server/verdaccio-middleware.js +0 -56
  344. package/store/harvester-common.js +0 -126
  345. package/utils/validators/vm-datavolumes.js +0 -38
  346. package/utils/validators/vm-image.js +0 -32
  347. package/utils/validators/vm.js +0 -221
@@ -58,6 +58,7 @@ export function init(store) {
58
58
  'namespaces',
59
59
  NODE,
60
60
  VIRTUAL_TYPES.CLUSTER_MEMBERS,
61
+ EVENT,
61
62
  ], 'cluster');
62
63
  basicType([
63
64
  SERVICE,
@@ -142,6 +143,7 @@ export function init(store) {
142
143
  configureType(NORMAN.PROJECT_ROLE_TEMPLATE_BINDING, { depaginate: true });
143
144
 
144
145
  configureType(EVENT, { limit: 500 });
146
+ weightType(EVENT, -1, true);
145
147
 
146
148
  // Allow Pods to be grouped by node
147
149
  configureType(POD, {
@@ -158,13 +160,12 @@ export function init(store) {
158
160
 
159
161
  setGroupDefaultType('serviceDiscovery', SERVICE);
160
162
 
161
- configureType('workload', {
162
- displayName: 'Workload',
163
+ configureType(WORKLOAD, {
164
+ displayName: store.getters['i18n/t'](`typeLabel.${ WORKLOAD }`, { count: 1 }).trim(),
163
165
  location: {
164
166
  name: 'c-cluster-product-resource',
165
- params: { resource: 'workload' },
167
+ params: { resource: WORKLOAD },
166
168
  },
167
- resource: WORKLOAD_TYPES.DEPLOYMENT
168
169
  });
169
170
 
170
171
  headers(PV, [STATE, NAME_COL, RECLAIM_POLICY, PERSISTENT_VOLUME_CLAIM, PERSISTENT_VOLUME_SOURCE, PV_REASON, AGE]);
@@ -3,9 +3,60 @@ import { HARVESTER, MULTI_CLUSTER } from '@shell/store/features';
3
3
  import { DSL } from '@shell/store/type-map';
4
4
  import { STATE, NAME as NAME_COL, AGE, VERSION } from '@shell/config/table-headers';
5
5
  import { allHash } from '@shell/utils/promise';
6
+ import dynamicPluginLoader from '@shell/pkg/dynamic-plugin-loader';
7
+ import { BLANK_CLUSTER } from '@shell/store';
8
+
9
+ dynamicPluginLoader.register({
10
+ load: async({ route, store }) => {
11
+ // Check that we've either got here either
12
+ // - directly (page refresh/load -> have path but no name)
13
+ // - via router name (have name but no path)
14
+ let clusterId;
15
+ const pathParts = route.path.split('/');
16
+
17
+ if (pathParts?.[1] === HARVESTER_NAME && pathParts?.[3] ) {
18
+ clusterId = pathParts?.[3];
19
+ } else {
20
+ const nameParts = route.name?.split('-');
21
+
22
+ if (nameParts?.[0] === HARVESTER_NAME) {
23
+ clusterId = route.params?.cluster;
24
+ }
25
+ }
26
+
27
+ // If we have a cluster id, try to load the plugin via the harvester cluster's `loadClusterPlugin`
28
+ if (clusterId) {
29
+ const provClusters = await store.dispatch('management/findAll', { type: CAPI.RANCHER_CLUSTER });
30
+ const provCluster = provClusters.find(p => p.mgmt.id === clusterId);
31
+
32
+ if (provCluster) {
33
+ const harvCluster = await store.dispatch('management/create', {
34
+ ...provCluster,
35
+ type: HCI.CLUSTER
36
+ });
37
+
38
+ if (harvCluster) {
39
+ try {
40
+ await harvCluster.loadClusterPlugin();
41
+
42
+ return route;
43
+ } catch (err) {
44
+ // If we've failed to load the harvester plugin nav to the harvester cluster list (probably got here from a bookmarked
45
+ // harvester instance that hasn't been updated to serve a plugin)
46
+ console.error('Failed to load harvester package: ', typeof error === 'object' ? JSON.stringify(err) : err); // eslint-disable-line no-console
47
+
48
+ return harvesterClustersLocation;
49
+ }
50
+ }
51
+ }
52
+ }
53
+ }
54
+ });
6
55
 
7
56
  export const NAME = 'harvesterManager';
8
57
 
58
+ export const HARVESTER_NAME = 'harvester';
59
+
9
60
  const MACHINE_POOLS = {
10
61
  name: 'summary',
11
62
  labelKey: 'tableHeaders.machines',
@@ -16,6 +67,15 @@ const MACHINE_POOLS = {
16
67
  width: 100,
17
68
  };
18
69
 
70
+ const harvesterClustersLocation = {
71
+ name: 'c-cluster-product-resource',
72
+ params: {
73
+ cluster: BLANK_CLUSTER,
74
+ product: NAME,
75
+ resource: HCI.CLUSTER
76
+ }
77
+ };
78
+
19
79
  export function init(store) {
20
80
  const {
21
81
  product,
@@ -33,6 +93,7 @@ export function init(store) {
33
93
  removable: false,
34
94
  showClusterSwitcher: false,
35
95
  weight: 100,
96
+ to: harvesterClustersLocation,
36
97
  });
37
98
 
38
99
  configureType(HCI.CLUSTER, { showListMasthead: false });
@@ -41,7 +102,8 @@ export function init(store) {
41
102
  NAME_COL,
42
103
  {
43
104
  ...VERSION,
44
- value: 'kubernetesVersion'
105
+ value: 'kubernetesVersion',
106
+ getValue: row => row.kubernetesVersion
45
107
  },
46
108
  MACHINE_POOLS,
47
109
  AGE,
@@ -54,7 +116,7 @@ export function init(store) {
54
116
  ]);
55
117
  basicType([HCI.CLUSTER]);
56
118
  spoofedType({
57
- label: store.getters['i18n/t']('harvester.manager.cluster.label'),
119
+ label: store.getters['i18n/t']('harvesterManager.cluster.label'),
58
120
  name: HCI.CLUSTER,
59
121
  type: HCI.CLUSTER,
60
122
  namespaced: false,
@@ -46,16 +46,6 @@ export function init(store) {
46
46
  exact: true
47
47
  });
48
48
 
49
- virtualType({
50
- labelKey: 'legacy.cis-scans',
51
- name: 'v1-cis-scans',
52
- group: 'Root',
53
- namespaced: true,
54
- weight: 111,
55
- route: { name: 'c-cluster-legacy-pages-page', params: { page: 'cis' } },
56
- exact: true
57
- });
58
-
59
49
  virtualType({
60
50
  ifHave: IF_HAVE.PROJECT,
61
51
  labelKey: 'legacy.project.label',
@@ -82,7 +72,6 @@ export function init(store) {
82
72
  'v1-alerts',
83
73
  'v1-catalogs',
84
74
  'v1-notifiers',
85
- 'v1-cis-scans',
86
75
  'v1-project-overview'
87
76
  ]);
88
77
 
@@ -121,17 +110,6 @@ export function init(store) {
121
110
  overview: false,
122
111
  });
123
112
 
124
- virtualType({
125
- ifHave: IF_HAVE.PROJECT,
126
- labelKey: 'legacy.logging',
127
- namespaced: true,
128
- name: 'project-logging',
129
- weight: 105,
130
- route: { name: 'c-cluster-legacy-project-page', params: { page: 'logging' } },
131
- exact: true,
132
- overview: false,
133
- });
134
-
135
113
  virtualType({
136
114
  ifHave: IF_HAVE.PROJECT,
137
115
  labelKey: 'legacy.monitoring',
@@ -143,28 +121,6 @@ export function init(store) {
143
121
  overview: false,
144
122
  });
145
123
 
146
- virtualType({
147
- ifHave: IF_HAVE.PROJECT,
148
- labelKey: 'legacy.istio',
149
- namespaced: true,
150
- name: 'project-istio',
151
- weight: 105,
152
- route: { name: 'c-cluster-legacy-project-page', params: { page: 'istio' } },
153
- exact: true,
154
- overview: false,
155
- });
156
-
157
- virtualType({
158
- ifHave: IF_HAVE.PROJECT,
159
- labelKey: 'legacy.pipelines',
160
- namespaced: true,
161
- name: 'project-pipelines',
162
- weight: 104,
163
- route: { name: 'c-cluster-legacy-project-pipelines' },
164
- exact: true,
165
- overview: false,
166
- });
167
-
168
124
  virtualType({
169
125
  ifHave: IF_HAVE.PROJECT,
170
126
  labelKey: 'legacy.secrets',
@@ -192,10 +148,7 @@ export function init(store) {
192
148
  'project-alerts',
193
149
  'project-catalogs',
194
150
  'project-config-maps',
195
- 'project-logging',
196
- 'project-istio',
197
151
  'project-monitoring',
198
- 'project-pipelines',
199
152
  'project-secrets',
200
153
  ], 'Project');
201
154
  }
@@ -7,6 +7,7 @@ import {
7
7
  } from '@shell/config/types';
8
8
  import { MULTI_CLUSTER } from '@shell/store/features';
9
9
  import { DSL } from '@shell/store/type-map';
10
+ import { BLANK_CLUSTER } from '@shell/store';
10
11
 
11
12
  export const NAME = 'manager';
12
13
 
@@ -28,6 +29,14 @@ export function init(store) {
28
29
  icon: 'cluster-management',
29
30
  removable: false,
30
31
  showClusterSwitcher: false,
32
+ to: {
33
+ name: 'c-cluster-product-resource',
34
+ params: {
35
+ cluster: BLANK_CLUSTER,
36
+ product: NAME,
37
+ resource: CAPI.RANCHER_CLUSTER
38
+ }
39
+ },
31
40
  });
32
41
 
33
42
  virtualType({
@@ -20,17 +20,6 @@ export function init(store) {
20
20
  showWorkspaceSwitcher: false,
21
21
  });
22
22
 
23
- virtualType({
24
- labelKey: 'legacy.apps',
25
- name: 'mc-apps',
26
- group: 'Root',
27
- namespaced: false,
28
- weight: 112,
29
- icon: 'folder',
30
- route: { name: 'c-cluster-mcapps-pages-page', params: { cluster: 'local', page: 'apps' } },
31
- exact: true
32
- });
33
-
34
23
  virtualType({
35
24
  labelKey: 'legacy.catalogs',
36
25
  name: 'mc-catalogs',
@@ -65,7 +54,6 @@ export function init(store) {
65
54
  });
66
55
 
67
56
  basicType([
68
- 'mc-apps',
69
57
  'mc-catalogs',
70
58
  'global-dns-entries',
71
59
  'global-dns-providers',
@@ -90,12 +90,23 @@ export function init(store) {
90
90
  route: { name: 'c-cluster-settings-performance' }
91
91
  });
92
92
 
93
+ virtualType({
94
+ ifHaveType: MANAGEMENT.SETTING,
95
+ labelKey: 'customLinks.label',
96
+ name: 'links',
97
+ namespaced: false,
98
+ weight: 96,
99
+ icon: 'folder',
100
+ route: { name: 'c-cluster-settings-links' }
101
+ });
102
+
93
103
  basicType([
94
104
  'settings',
95
105
  'features',
96
106
  'brand',
97
107
  'banners',
98
- 'performance'
108
+ 'performance',
109
+ 'links'
99
110
  ]);
100
111
 
101
112
  configureType(MANAGEMENT.SETTING, {
@@ -0,0 +1,17 @@
1
+ import { DSL, IF_HAVE } from '@shell/store/type-map';
2
+
3
+ export const NAME = 'uiplugins';
4
+
5
+ export function init(store) {
6
+ const { product } = DSL(store, NAME);
7
+
8
+ // Add a product for UI Plugins - will appear in the top-level menu
9
+ product({
10
+ ifHave: IF_HAVE.ADMIN, // Only admins can see the UI Plugin Custom Resource by default
11
+ inStore: 'management',
12
+ icon: 'gear',
13
+ removable: false,
14
+ showClusterSwitcher: false,
15
+ category: 'configuration',
16
+ });
17
+ }
@@ -1,5 +1,6 @@
1
1
  // Settings
2
2
  import { MANAGEMENT } from './types';
3
+
3
4
  // Adapted from: https://github.com/rancher/ui/blob/08c379a9529f740666a704b52522a468986c3520/lib/shared/addon/utils/constants.js#L564
4
5
  // Setting IDs
5
6
  export const SETTING = {
@@ -15,12 +16,12 @@ export const SETTING = {
15
16
  API_HOST: 'api-host',
16
17
  CA_CERTS: 'cacerts',
17
18
 
18
- // Allow the local cluste to be hidden
19
+ // Allow the local cluster to be hidden
19
20
  HIDE_LOCAL_CLUSTER: 'hide-local-cluster',
20
21
  AUTH_TOKEN_MAX_TTL_MINUTES: 'auth-token-max-ttl-minutes',
21
22
  KUBECONFIG_GENERATE_TOKEN: 'kubeconfig-generate-token',
22
23
  KUBECONFIG_TOKEN_TTL_MINUTES: 'kubeconfig-token-ttl-minutes',
23
- KUBECONFIG_DEFAULT_TOKEN_TTL_MINUTES: 'kubeconfig-default-token-ttl-minutes',
24
+ KUBECONFIG_DEFAULT_TOKEN_TTL_MINUTES: 'kubeconfig-default-token-ttl-minutes',
24
25
  ENGINE_URL: 'engine-install-url',
25
26
  ENGINE_ISO_URL: 'engine-iso-url',
26
27
  FIRST_LOGIN: 'first-login',
@@ -33,9 +34,11 @@ export const SETTING = {
33
34
  AUTH_USER_SESSION_TTL_MINUTES: 'auth-user-session-ttl-minutes',
34
35
  AUTH_USER_INFO_RESYNC_CRON: 'auth-user-info-resync-cron',
35
36
  AUTH_LOCAL_VALIDATE_DESC: 'auth-password-requirements-description',
37
+ CATTLE_PASSWORD_MIN_LENGTH: 'password-min-length',
36
38
  CLUSTER_TEMPLATE_ENFORCEMENT: 'cluster-template-enforcement',
37
39
  UI_INDEX: 'ui-index',
38
40
  UI_DASHBOARD_INDEX: 'ui-dashboard-index',
41
+ UI_DASHBOARD_HARVESTER_LEGACY_PLUGIN: 'ui-dashboard-harvester-legacy-plugin',
39
42
  UI_OFFLINE_PREFERRED: 'ui-offline-preferred',
40
43
  SYSTEM_DEFAULT_REGISTRY: 'system-default-registry',
41
44
  UI_ISSUES: 'ui-issues',
@@ -52,6 +55,7 @@ export const SETTING = {
52
55
  COMMUNITY_LINKS: 'ui-community-links',
53
56
  FAVICON: 'ui-favicon',
54
57
  UI_PERFORMANCE: 'ui-performance',
58
+ UI_CUSTOM_LINKS: 'ui-custom-links',
55
59
  /**
56
60
  * Allow the backend to force a light/dark theme. Used in non-rancher world and results in the theme used
57
61
  * both pre and post log in. If not present defaults to the usual process
@@ -63,11 +67,9 @@ export const SETTING = {
63
67
  // These are the settings that are allowed to be edited via the UI
64
68
  export const ALLOWED_SETTINGS = {
65
69
  [SETTING.CA_CERTS]: { kind: 'multiline', readOnly: true },
66
- // [SETTING.CLUSTER_DEFAULTS]: { kind: 'json' },
67
70
  [SETTING.ENGINE_URL]: {},
68
71
  [SETTING.ENGINE_ISO_URL]: {},
69
- // [SETTING.PL]: {},
70
- // [SETTING.ISSUES]: {},
72
+ [SETTING.CATTLE_PASSWORD_MIN_LENGTH]: { kind: 'integer' },
71
73
  [SETTING.INGRESS_IP_DOMAIN]: {},
72
74
  [SETTING.AUTH_USER_INFO_MAX_AGE_SECONDS]: {},
73
75
  [SETTING.AUTH_USER_SESSION_TTL_MINUTES]: {},
@@ -78,7 +80,6 @@ export const ALLOWED_SETTINGS = {
78
80
  [SETTING.AUTH_USER_INFO_RESYNC_CRON]: {},
79
81
  [SETTING.SERVER_URL]: { kind: 'url', canReset: true },
80
82
  [SETTING.RKE_METADATA_CONFIG]: { kind: 'json' },
81
- // [SETTING.BANNERS]: { kind: 'json' },
82
83
  [SETTING.SYSTEM_DEFAULT_REGISTRY]: {},
83
84
  [SETTING.UI_INDEX]: {},
84
85
  [SETTING.UI_DASHBOARD_INDEX]: {},
@@ -86,7 +87,7 @@ export const ALLOWED_SETTINGS = {
86
87
  kind: 'enum',
87
88
  options: ['dynamic', 'true', 'false']
88
89
  },
89
- [SETTING.BRAND]: {},
90
+ [SETTING.BRAND]: { canReset: true },
90
91
  [SETTING.CLUSTER_TEMPLATE_ENFORCEMENT]: { kind: 'boolean' },
91
92
  [SETTING.TELEMETRY]: {
92
93
  kind: 'enum',
@@ -94,74 +95,19 @@ export const ALLOWED_SETTINGS = {
94
95
  },
95
96
  [SETTING.HIDE_LOCAL_CLUSTER]: { kind: 'boolean' },
96
97
  };
97
- // harvester Settings ID
98
- export const HCI_SETTING = {
99
- BACKUP_TARGET: 'backup-target',
100
- LOG_LEVEL: 'log-level',
101
- SERVER_VERSION: 'server-version',
102
- UI_INDEX: 'ui-index',
103
- UPGRADE_CHECKER_ENABLED: 'upgrade-checker-enabled',
104
- UPGRADE_CHECKER_URL: 'upgrade-checker-url',
105
- VLAN: 'vlan',
106
- UI_SOURCE: 'ui-source',
107
- HTTP_PROXY: 'http-proxy',
108
- ADDITIONAL_CA: 'additional-ca',
109
- OVERCOMMIT_CONFIG: 'overcommit-config',
110
- CLUSTER_REGISTRATION_URL: 'cluster-registration-url',
111
- DEFAULT_STORAGE_CLASS: 'default-storage-class',
112
- VIP: 'vip-pools',
113
- SUPPORT_BUNDLE_TIMEOUT: 'support-bundle-timeout',
114
- SUPPORT_BUNDLE_IMAGE: 'support-bundle-image',
115
- VM_FORCE_RESET_POLICY: 'vm-force-reset-policy',
116
- SSL_CERTIFICATES: 'ssl-certificates',
117
- SSL_PARAMETERS: 'ssl-parameters',
118
- SUPPORT_BUNDLE_NAMESPACES: 'support-bundle-namespaces',
119
- AUTO_DISK_PROVISION_PATHS: 'auto-disk-provision-paths',
120
- RANCHER_MONITORING: 'fleet-local/rancher-monitoring',
121
- RELEASE_DOWNLOAD_URL: 'release-download-url'
122
- };
123
- export const HCI_ALLOWED_SETTINGS = {
124
- [HCI_SETTING.BACKUP_TARGET]: { kind: 'json', from: 'import' },
125
- [HCI_SETTING.LOG_LEVEL]: {
126
- kind: 'enum',
127
- options: ['info', 'debug', 'trace']
128
- },
129
- [HCI_SETTING.VLAN]: {
130
- kind: 'custom', from: 'import', alias: 'vlan'
131
- },
132
- [HCI_SETTING.SERVER_VERSION]: { readOnly: true },
133
- [HCI_SETTING.UPGRADE_CHECKER_ENABLED]: { kind: 'boolean' },
134
- [HCI_SETTING.UPGRADE_CHECKER_URL]: { kind: 'url' },
135
- [HCI_SETTING.HTTP_PROXY]: { kind: 'json', from: 'import' },
136
- [HCI_SETTING.ADDITIONAL_CA]: {
137
- kind: 'multiline', canReset: true, from: 'import'
138
- },
139
- [HCI_SETTING.OVERCOMMIT_CONFIG]: { kind: 'json', from: 'import' },
140
- [HCI_SETTING.SUPPORT_BUNDLE_TIMEOUT]: {},
141
- [HCI_SETTING.SUPPORT_BUNDLE_IMAGE]: { kind: 'json', from: 'import' },
142
- [HCI_SETTING.VM_FORCE_RESET_POLICY]: { kind: 'json', from: 'import' },
143
- [HCI_SETTING.SSL_CERTIFICATES]: { kind: 'json', from: 'import' },
144
- [HCI_SETTING.VIP]: {
145
- kind: 'json', from: 'import', canReset: true
146
- },
147
- [HCI_SETTING.SSL_PARAMETERS]: {
148
- kind: 'json', from: 'import', canReset: true
149
- },
150
- [HCI_SETTING.SUPPORT_BUNDLE_NAMESPACES]: { from: 'import', canReset: true },
151
- [HCI_SETTING.AUTO_DISK_PROVISION_PATHS]: { canReset: true },
152
- [HCI_SETTING.RANCHER_MONITORING]: {
153
- kind: 'custom', from: 'import', canReset: true, customFormatter: 'json', alias: 'harvester-monitoring'
98
+
99
+ export const DEFAULT_PERF_SETTING = {
100
+ incrementalLoading: {
101
+ enabled: true,
102
+ threshold: 1500,
154
103
  },
155
- [HCI_SETTING.RELEASE_DOWNLOAD_URL]: { kind: 'url' },
156
- };
157
- export const HCI_SINGLE_CLUSTER_ALLOWED_SETTING = {
158
- [HCI_SETTING.UI_SOURCE]: {
159
- kind: 'enum',
160
- options: ['auto', 'external', 'bundled']
104
+ manualRefresh: {
105
+ enabled: false,
106
+ threshold: 1500,
161
107
  },
162
- [HCI_SETTING.UI_INDEX]: { kind: 'url' },
163
- [HCI_SETTING.CLUSTER_REGISTRATION_URL]: { kind: 'url' },
108
+ disableWebsocketNotification: true
164
109
  };
110
+
165
111
  export const fetchOrCreateSetting = async(store, id, val, save = true) => {
166
112
  let setting;
167
113
 
@@ -181,6 +127,7 @@ export const fetchOrCreateSetting = async(store, id, val, save = true) => {
181
127
 
182
128
  return setting;
183
129
  };
130
+
184
131
  export const setSetting = async(store, id, val) => {
185
132
  const setting = await fetchOrCreateSetting(store, id, val, false);
186
133
 
@@ -189,3 +136,21 @@ export const setSetting = async(store, id, val) => {
189
136
 
190
137
  return setting;
191
138
  };
139
+
140
+ export const getPerformanceSetting = (rootGetters) => {
141
+ const perfSetting = rootGetters['management/byId'](MANAGEMENT.SETTING, SETTING.UI_PERFORMANCE);
142
+ let perfConfig = {};
143
+
144
+ if (perfSetting && perfSetting.value) {
145
+ try {
146
+ perfConfig = JSON.parse(perfSetting.value);
147
+ } catch (e) {
148
+ console.warn('ui-performance setting contains invalid data'); // eslint-disable-line no-console
149
+ }
150
+ }
151
+
152
+ // Start with the default and overwrite the values from the setting - ensures we have defaults for newly added options
153
+ perfConfig = Object.assign(DEFAULT_PERF_SETTING, perfConfig);
154
+
155
+ return perfConfig;
156
+ };
@@ -870,7 +870,6 @@ export const FEATURE_DESCRIPTION = {
870
870
  value: 'status.description',
871
871
  align: 'left',
872
872
  sort: ['status.description'],
873
- width: 300,
874
873
  formatter: 'Translate',
875
874
  formatterOpts: { prefix: 'featureFlags.description' },
876
875
  };
package/config/types.js CHANGED
@@ -51,6 +51,7 @@ export const NAMESPACE = 'namespace';
51
51
  export const NODE = 'node';
52
52
  export const NETWORK_POLICY = 'networking.k8s.io.networkpolicy';
53
53
  export const POD = 'pod';
54
+ export const PSP = 'policy.podsecuritypolicy';
54
55
  export const PV = 'persistentvolume';
55
56
  export const PVC = 'persistentvolumeclaim';
56
57
  export const RESOURCE_QUOTA = 'resourcequota';
@@ -79,7 +80,7 @@ export const WORKLOAD_TYPES = {
79
80
  JOB: 'batch.job',
80
81
  STATEFUL_SET: 'apps.statefulset',
81
82
  REPLICA_SET: 'apps.replicaset',
82
- REPLICATION_CONTROLLER: 'replicationcontroller'
83
+ REPLICATION_CONTROLLER: 'replicationcontroller',
83
84
  };
84
85
 
85
86
  const {
@@ -100,6 +101,9 @@ export const CATALOG = {
100
101
  REPO: 'catalog.cattle.io.repo',
101
102
  };
102
103
 
104
+ // UI Plugin type
105
+ export const UI_PLUGIN = 'catalog.cattle.io.uiplugin';
106
+
103
107
  export const HELM = { PROJECTHELMCHART: 'helm.cattle.io.projecthelmchart' };
104
108
 
105
109
  export const MONITORING = {
@@ -267,30 +271,10 @@ export const VIRTUAL_TYPES = {
267
271
 
268
272
  // harvester
269
273
  export const HCI = {
270
- VM: 'kubevirt.io.virtualmachine',
271
- VMI: 'kubevirt.io.virtualmachineinstance',
272
- VMIM: 'kubevirt.io.virtualmachineinstancemigration',
273
- VM_TEMPLATE: 'harvesterhci.io.virtualmachinetemplate',
274
- VM_VERSION: 'harvesterhci.io.virtualmachinetemplateversion',
275
- IMAGE: 'harvesterhci.io.virtualmachineimage',
276
- SSH: 'harvesterhci.io.keypair',
277
- VOLUME: 'harvesterhci.io.volume',
278
- USER: 'harvesterhci.io.user',
279
- SETTING: 'harvesterhci.io.setting',
280
- UPGRADE: 'harvesterhci.io.upgrade',
281
- BACKUP: 'harvesterhci.io.virtualmachinebackup',
282
- RESTORE: 'harvesterhci.io.virtualmachinerestore',
283
- NODE_NETWORK: 'network.harvesterhci.io.nodenetwork',
284
- CLUSTER_NETWORK: 'network.harvesterhci.io.clusternetwork',
285
- SUPPORT_BUNDLE: 'harvesterhci.io.supportbundle',
286
- NETWORK_ATTACHMENT: 'harvesterhci.io.networkattachmentdefinition',
287
- CLUSTER: 'harvesterhci.io.management.cluster',
288
- DASHBOARD: 'harvesterhci.io.dashboard',
289
- BLOCK_DEVICE: 'harvesterhci.io.blockdevice',
290
- CLOUD_TEMPLATE: 'harvesterhci.io.cloudtemplate',
291
- HOST: 'harvesterhci.io.host',
292
- VERSION: 'harvesterhci.io.version',
293
- MANAGED_CHART: 'harvesterhci.io.managedchart',
274
+ CLUSTER: 'harvesterhci.io.management.cluster',
275
+ DASHBOARD: 'harvesterhci.io.dashboard',
276
+ IMAGE: 'harvesterhci.io.virtualmachineimage',
277
+ SETTING: 'harvesterhci.io.setting',
294
278
  };
295
279
 
296
280
  export const VIRTUAL_HARVESTER_PROVIDER = 'harvester';
@@ -0,0 +1,60 @@
1
+ import semver from 'semver';
2
+
3
+ // Version of the plugin API supported
4
+ export const UI_PLUGIN_API_VERSION = '1.0.0';
5
+
6
+ export const UI_PLUGIN_BASE_URL = '/api/v1/namespaces/cattle-ui-plugin-system/services/http:ui-plugin-operator:80/proxy';
7
+
8
+ export const UI_PLUGIN_NAMESPACE = 'cattle-ui-plugin-system';
9
+
10
+ // Annotation name and value that indicate a chart is a UI plugin
11
+ export const UI_PLUGIN_ANNOTATION_NAME = 'catalog.cattle.io/ui-component';
12
+ export const UI_PLUGIN_ANNOTATION_VALUE = 'plugins';
13
+
14
+ export const UI_PLUGIN_OPERATOR_CRD_CHART_NAME = 'ui-plugin-operator-crd';
15
+ export const UI_PLUGIN_OPERATOR_CHART_NAME = 'ui-plugin-operator';
16
+
17
+ export const UI_PLUGIN_CHARTS = [
18
+ UI_PLUGIN_OPERATOR_CHART_NAME,
19
+ UI_PLUGIN_OPERATOR_CRD_CHART_NAME,
20
+ ];
21
+
22
+ // Expected chart repo name for the UI Plugins operator
23
+ export const UI_PLUGIN_OPERATOR_REPO_NAME = 'rancher-charts';
24
+
25
+ // Info for the Helm Chart Repository that we will add
26
+ export const UI_PLUGINS_REPO_NAME = 'rancher-ui-plugins';
27
+
28
+ export const UI_PLUGINS_REPO_URL = 'https://github.com/rancher/ui-plugin-charts';
29
+ export const UI_PLUGINS_REPO_BRANCH = 'main';
30
+
31
+ // Plugin Metadata properties
32
+ const UI_PLUGIN_METADATA_API_VERSION = 'apiVersion';
33
+
34
+ export function isUIPlugin(chart) {
35
+ return !!chart?.versions.find((v) => {
36
+ return v.annotations && v.annotations[UI_PLUGIN_ANNOTATION_NAME] === UI_PLUGIN_ANNOTATION_VALUE;
37
+ });
38
+ }
39
+
40
+ export function uiPluginHasAnnotation(chart, name, value) {
41
+ return !!chart?.versions.find((v) => {
42
+ return v.annotations && v.annotations[name] === value;
43
+ });
44
+ }
45
+
46
+ // Should we load a plugin, based on the metadata returned by the backend?
47
+ export function shouldLoadPlugin(plugin) {
48
+ if (!plugin.name || !plugin.version || !plugin.endpoint) {
49
+ return false;
50
+ }
51
+
52
+ // Plugin specified a required API version
53
+ const requiredAPI = plugin.metadata?.[UI_PLUGIN_METADATA_API_VERSION];
54
+
55
+ if (requiredAPI) {
56
+ return semver.satisfies(UI_PLUGIN_API_VERSION, requiredAPI);
57
+ }
58
+
59
+ return true;
60
+ }