@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
@@ -1,255 +0,0 @@
1
- import Vue from 'vue';
2
- import { HCI } from '@shell/config/types';
3
- import {
4
- DESCRIPTION,
5
- ANNOTATIONS_TO_IGNORE_REGEX,
6
- HCI as HCI_ANNOTATIONS
7
- } from '@shell/config/labels-annotations';
8
- import { get, clone } from '@shell/utils/object';
9
- import { formatSi } from '@shell/utils/units';
10
- import { ucFirst } from '@shell/utils/string';
11
- import { stateDisplay, colorForState } from '@shell/plugins/dashboard-store/resource-class';
12
- import SteveModel from '@shell/plugins/steve/steve-class';
13
- import { _CLONE } from '@shell/config/query-params';
14
-
15
- export function isReady() {
16
- function getStatusConditionOfType(type, defaultValue = []) {
17
- const conditions = Array.isArray(get(this, 'status.conditions')) ? this.status.conditions : defaultValue;
18
-
19
- return conditions.find( cond => cond.type === type);
20
- }
21
-
22
- const initialized = getStatusConditionOfType.call(this, 'Initialized');
23
- const imported = getStatusConditionOfType.call(this, 'Imported');
24
- const isCompleted = this.status?.progress === 100;
25
-
26
- if ([initialized?.status, imported?.status].includes('False')) {
27
- return false;
28
- } else {
29
- return isCompleted && true;
30
- }
31
- }
32
- export default class HciVmImage extends SteveModel {
33
- get availableActions() {
34
- let out = super._availableActions;
35
- const toFilter = ['goToEditYaml'];
36
-
37
- out = out.filter( A => !toFilter.includes(A.action));
38
-
39
- const schema = this.$getters['schemaFor'](HCI.VM);
40
- let canCreateVM = true;
41
-
42
- if ( schema && !schema?.collectionMethods.find(x => ['post'].includes(x.toLowerCase())) ) {
43
- canCreateVM = false;
44
- }
45
-
46
- return [
47
- {
48
- action: 'createFromImage',
49
- enabled: canCreateVM,
50
- icon: 'icon icon-fw icon-spinner',
51
- label: this.t('harvester.action.createVM'),
52
- disabled: !this.isReady,
53
- },
54
- ...out
55
- ];
56
- }
57
-
58
- applyDefaults(resources = this, realMode) {
59
- if (realMode !== _CLONE) {
60
- Vue.set(this.metadata, 'labels', { [HCI_ANNOTATIONS.OS_TYPE]: '', [HCI_ANNOTATIONS.IMAGE_SUFFIX]: '' });
61
- }
62
- }
63
-
64
- createFromImage() {
65
- const router = this.currentRouter();
66
-
67
- router.push({
68
- name: `c-cluster-product-resource-create`,
69
- params: { resource: HCI.VM },
70
- query: { image: this.id }
71
- });
72
- }
73
-
74
- cleanForNew() {
75
- this.$dispatch(`cleanForNew`, this);
76
-
77
- delete this.spec.displayName;
78
- }
79
-
80
- get nameDisplay() {
81
- return this.spec?.displayName;
82
- }
83
-
84
- get isOSImage() {
85
- return this?.metadata?.annotations?.[HCI_ANNOTATIONS.OS_UPGRADE_IMAGE] === 'True';
86
- }
87
-
88
- get isReady() {
89
- return isReady.call(this);
90
- }
91
-
92
- get stateDisplay() {
93
- const initialized = this.getStatusConditionOfType('Initialized');
94
- const imported = this.getStatusConditionOfType('Imported');
95
-
96
- if (imported?.status === 'Unknown') {
97
- if (this.spec.sourceType === 'download') {
98
- return 'Downloading';
99
- } else if (this.spec.sourceType === 'upload') {
100
- return 'Uploading';
101
- } else {
102
- return 'Exporting';
103
- }
104
- }
105
-
106
- if (initialized?.message || imported?.message) {
107
- return 'Failed';
108
- }
109
-
110
- return stateDisplay(this.metadata.state.name);
111
- }
112
-
113
- get imageMessage() {
114
- const conditions = this?.status?.conditions || [];
115
- const initialized = conditions.find( cond => cond.type === 'Initialized');
116
- const imported = conditions.find( cond => cond.type === 'Imported');
117
- const message = initialized?.message || imported?.message;
118
-
119
- return ucFirst(message);
120
- }
121
-
122
- get stateBackground() {
123
- return colorForState(this.stateDisplay).replace('text-', 'bg-');
124
- }
125
-
126
- get imageSource() {
127
- return get(this, `spec.sourceType`) || 'download';
128
- }
129
-
130
- get progress() {
131
- return this?.status?.progress || 0;
132
- }
133
-
134
- get annotationsToIgnoreRegexes() {
135
- return [DESCRIPTION].concat(ANNOTATIONS_TO_IGNORE_REGEX);
136
- }
137
-
138
- get downSize() {
139
- const size = this.status?.size;
140
-
141
- if (!size) {
142
- return '-';
143
- }
144
-
145
- return formatSi(size, {
146
- increment: 1024,
147
- maxPrecision: 2,
148
- suffix: 'B',
149
- firstSuffix: 'B',
150
- });
151
- }
152
-
153
- getStatusConditionOfType(type, defaultValue = []) {
154
- const conditions = Array.isArray(get(this, 'status.conditions')) ? this.status.conditions : defaultValue;
155
-
156
- return conditions.find( cond => cond.type === type);
157
- }
158
-
159
- get stateObj() {
160
- const state = clone(this.metadata?.state);
161
- const initialized = this.getStatusConditionOfType('Initialized');
162
- const imported = this.getStatusConditionOfType('Imported');
163
-
164
- if ([initialized?.status, imported?.status].includes('False')) {
165
- state.error = true;
166
- }
167
-
168
- return state;
169
- }
170
-
171
- get stateDescription() {
172
- return this.imageMessage;
173
- }
174
-
175
- get displayName() {
176
- return this.spec?.displayName;
177
- }
178
-
179
- get uploadImage() {
180
- return async(file) => {
181
- const formData = new FormData();
182
-
183
- formData.append('chunk', file);
184
-
185
- try {
186
- this.$ctx.commit('harvester-common/uploadStart', this.metadata.name, { root: true });
187
-
188
- await this.doAction('upload', formData, {
189
- headers: {
190
- 'Content-Type': 'multipart/form-data',
191
- 'File-Size': file.size,
192
- },
193
- params: { size: file.size },
194
- });
195
- } catch (err) {
196
- this.$ctx.commit('harvester-common/uploadEnd', this.metadata.name, { root: true });
197
-
198
- return Promise.reject(err);
199
- }
200
-
201
- this.$ctx.commit('harvester-common/uploadEnd', this.metadata.name, { root: true });
202
- };
203
- }
204
-
205
- get imageSuffix() {
206
- return this.metadata?.labels?.[HCI_ANNOTATIONS.IMAGE_SUFFIX];
207
- }
208
-
209
- get imageOSType() {
210
- return this.metadata?.labels?.[HCI_ANNOTATIONS.OS_TYPE];
211
- }
212
-
213
- get customValidationRules() {
214
- const out = [];
215
-
216
- if (this.imageSource === 'download') {
217
- const urlFormat = {
218
- nullable: false,
219
- path: 'spec.url',
220
- validators: ['imageUrl'],
221
- };
222
-
223
- const urlRequired = {
224
- nullable: false,
225
- path: 'spec.url',
226
- required: true,
227
- translationKey: 'harvester.image.url'
228
- };
229
-
230
- out.push(urlFormat, urlRequired);
231
- }
232
-
233
- if (this.imageSource === 'upload') {
234
- const fileRequired = {
235
- nullable: false,
236
- path: 'metadata.annotations',
237
- validators: ['fileRequired'],
238
- };
239
-
240
- out.push(fileRequired);
241
- }
242
-
243
- return [
244
- {
245
- nullable: false,
246
- path: 'spec.displayName',
247
- required: true,
248
- minLength: 1,
249
- maxLength: 63,
250
- translationKey: 'generic.name',
251
- },
252
- ...out
253
- ];
254
- }
255
- }
@@ -1,43 +0,0 @@
1
- import SteveModel from '@shell/plugins/steve/steve-class';
2
-
3
- export default class HciVmRestore extends SteveModel {
4
- get isComplete() {
5
- return this?.status?.complete || false;
6
- }
7
-
8
- get pvcNames() {
9
- const restores = this?.status?.restores || [];
10
- const out = restores.map( O => O?.persistentVolumeClaimSpec?.name);
11
-
12
- return out;
13
- }
14
-
15
- get customValidationRules() {
16
- const isNew = this.spec?.newVM;
17
-
18
- const rules = [{
19
- nullable: false,
20
- path: 'spec.target.name',
21
- required: true,
22
- minLength: 1,
23
- maxLength: 63,
24
- translationKey: 'harvester.fields.virtualName',
25
- }, {
26
- nullable: false,
27
- path: 'spec.virtualMachineBackupName',
28
- required: true,
29
- translationKey: 'harvester.backup.restore.backup',
30
- }];
31
-
32
- if (!isNew) {
33
- rules.push({
34
- path: 'spec.deletionPolicy',
35
- required: true,
36
- type: 'string',
37
- translationKey: 'harvester.backup.restore.deletePreviousVolumes',
38
- });
39
- }
40
-
41
- return rules;
42
- }
43
- }
@@ -1,69 +0,0 @@
1
- import { HCI } from '@shell/config/types';
2
- import { MODE, _CREATE } from '@shell/config/query-params';
3
- import SteveModel from '@shell/plugins/steve/steve-class';
4
-
5
- export default class HciVmTemplate extends SteveModel {
6
- get availableActions() {
7
- const toFilter = ['goToEdit', 'cloneYaml', 'goToClone', 'goToEditYaml', 'download'];
8
-
9
- const out = super._availableActions.filter((action) => {
10
- if (action.altAction === 'remove') {
11
- action.bulkable = false;
12
- }
13
-
14
- if (!toFilter.includes(action.action)) {
15
- return action;
16
- }
17
- });
18
-
19
- const schema = this.$getters['schemaFor'](HCI.VM);
20
- let canCreateVM = true;
21
-
22
- if ( schema && !schema?.collectionMethods.find(x => ['post'].includes(x.toLowerCase())) ) {
23
- canCreateVM = false;
24
- }
25
-
26
- return [
27
- {
28
- action: 'createFromTemplate',
29
- enabled: canCreateVM,
30
- icon: 'icon icon-spinner',
31
- label: this.t('harvester.action.createVM'),
32
- },
33
- {
34
- action: 'addVersion',
35
- enabled: this.canCreate,
36
- icon: 'icon icon-fw icon-circle-plus',
37
- label: this.t('harvester.action.addTemplateVersion'),
38
- },
39
- ...out
40
- ];
41
- }
42
-
43
- createFromTemplate() {
44
- const router = this.currentRouter();
45
-
46
- router.push({
47
- name: `c-cluster-product-resource-create`,
48
- params: { resource: HCI.VM },
49
- query: { templateId: this.id, versionId: this.spec.defaultVersionId }
50
- });
51
- }
52
-
53
- addVersion(moreQuery = {}) {
54
- const router = this.currentRouter();
55
-
56
- router.push({
57
- name: `c-cluster-product-resource-create`,
58
- params: { resource: HCI.VM_VERSION },
59
- query: {
60
- [MODE]: _CREATE,
61
- templateId: this.id
62
- }
63
- });
64
- }
65
-
66
- get defaultVersion() {
67
- return this.status?.defaultVersion;
68
- }
69
- }
@@ -1,227 +0,0 @@
1
- import Vue from 'vue';
2
- import find from 'lodash/find';
3
- import { HCI } from '@shell/config/types';
4
- import {
5
- AS, MODE, _VIEW, _CONFIG, _UNFLAG, _EDIT
6
- } from '@shell/config/query-params';
7
- import { HCI as HCI_ANNOTATIONS } from '@shell/config/labels-annotations';
8
- import SteveModel from '@shell/plugins/steve/steve-class';
9
-
10
- export default class HciVmTemplateVersion extends SteveModel {
11
- get availableActions() {
12
- let out = super._availableActions;
13
- const toFilter = ['goToClone', 'cloneYaml', 'goToViewConfig', 'goToEditYaml', 'goToViewYaml'];
14
-
15
- out = out.filter((action) => {
16
- if (!toFilter.includes(action.action)) {
17
- return action;
18
- }
19
- });
20
-
21
- const schema = this.$getters['schemaFor'](HCI.VM);
22
- let canCreateVM = true;
23
-
24
- if ( schema && !schema?.collectionMethods.find(x => ['post'].includes(x.toLowerCase())) ) {
25
- canCreateVM = false;
26
- }
27
-
28
- return [
29
- {
30
- action: 'launchFromTemplate',
31
- icon: 'icon icon-spinner',
32
- enabled: canCreateVM,
33
- label: this.t('harvester.action.launchFormTemplate'),
34
- },
35
- {
36
- action: 'cloneTemplate',
37
- enabled: this.currentTemplate?.canCreate,
38
- icon: 'icon icon-fw icon-edit',
39
- label: this.t('harvester.action.modifyTemplate'),
40
- },
41
- {
42
- action: 'setDefaultVersion',
43
- enabled: this.currentTemplate?.canCreate,
44
- icon: 'icon icon-fw icon-checkmark',
45
- label: this.t('harvester.action.setDefaultVersion'),
46
- },
47
- {
48
- action: 'goToViewConfig',
49
- label: this.t('action.view'),
50
- icon: 'icon icon-edit',
51
- },
52
- ...out
53
- ];
54
- }
55
-
56
- applyDefaults() {
57
- const spec = {
58
- vm: {
59
- metadata: { annotations: { [HCI_ANNOTATIONS.VOLUME_CLAIM_TEMPLATE]: '[]' } },
60
- spec: {
61
- runStrategy: 'RerunOnFailure',
62
- template: {
63
- metadata: { annotations: {} },
64
- spec: {
65
- domain: {
66
- machine: { type: '' },
67
- cpu: {
68
- cores: null,
69
- sockets: 1,
70
- threads: 1
71
- },
72
- devices: {
73
- inputs: [{
74
- bus: 'usb',
75
- name: 'tablet',
76
- type: 'tablet'
77
- }],
78
- interfaces: [{
79
- masquerade: {},
80
- model: 'virtio',
81
- name: 'default'
82
- }],
83
- disks: [],
84
- },
85
- resources: {
86
- limits: {
87
- memory: null,
88
- cpu: ''
89
- }
90
- },
91
- features: { acpi: { enabled: true } },
92
- },
93
- evictionStrategy: 'LiveMigrate',
94
- hostname: '',
95
- networks: [{
96
- name: 'default',
97
- pod: {}
98
- }],
99
- volumes: []
100
- }
101
- }
102
- }
103
- }
104
- };
105
-
106
- Vue.set(this, 'spec', spec);
107
- }
108
-
109
- get canDelete() {
110
- return this.hasLink('remove') && this.$rootGetters['type-map/optionsFor'](this.type).isRemovable && !this.isDefaultVersion;
111
- }
112
-
113
- get template() {
114
- return this.$rootGetters['harvester/all'](HCI.VM_TEMPLATE).find((T) => {
115
- return T.id === this.spec.templateId;
116
- });
117
- }
118
-
119
- get version() {
120
- return this?.status?.version;
121
- }
122
-
123
- get templates() {
124
- return this.$rootGetters['harvester/all'](HCI.VM_TEMPLATE);
125
- }
126
-
127
- get machineType() {
128
- return this.vm?.spec?.template?.spec?.domain?.machine?.type || '';
129
- }
130
-
131
- get templateId() {
132
- return this.spec.templateId;
133
- }
134
-
135
- launchFromTemplate() {
136
- const templateResource = this.currentTemplate;
137
- const templateId = templateResource.id;
138
- const launchVersion = this.id;
139
- const router = this.currentRouter();
140
-
141
- router.push({
142
- name: `c-cluster-product-resource-create`,
143
- params: { resource: HCI.VM },
144
- query: { templateId, versionId: launchVersion }
145
- });
146
- }
147
-
148
- cloneTemplate(moreQuery = {}) {
149
- const location = this.detailLocation;
150
-
151
- location.query = {
152
- ...location.query,
153
- [MODE]: _EDIT,
154
- [AS]: _UNFLAG,
155
- ...moreQuery
156
- };
157
-
158
- this.currentRouter().push(location);
159
- }
160
-
161
- goToViewConfig(moreQuery = {}) {
162
- const location = this.detailLocation;
163
-
164
- location.query = {
165
- ...location.query,
166
- [MODE]: _VIEW,
167
- [AS]: _CONFIG,
168
- templateId: this.templateId,
169
- ...moreQuery
170
- };
171
-
172
- this.currentRouter().push(location);
173
- }
174
-
175
- get currentTemplate() {
176
- return find(this.templates, T => T.id === this.templateId);
177
- }
178
-
179
- async setDefaultVersion(moreQuery = {}) {
180
- const templateResource = this.currentTemplate;
181
-
182
- templateResource.spec.defaultVersionId = this.id;
183
- await templateResource.save();
184
- }
185
-
186
- get defaultVersion() {
187
- const templates = this.$rootGetters['harvester/all'](HCI.VM_TEMPLATE);
188
- const template = templates.find(T => this.templateId === T.id);
189
-
190
- return template?.status?.defaultVersion;
191
- }
192
-
193
- get isDefaultVersion() {
194
- return this.defaultVersion === this?.status?.version;
195
- }
196
-
197
- get customValidationRules() {
198
- const rules = [
199
- // {
200
- // nullable: false,
201
- // path: 'spec.vm.spec.template.spec.domain.cpu.cores',
202
- // min: 1,
203
- // max: 100,
204
- // required: true,
205
- // translationKey: 'harvester.fields.cpu',
206
- // },
207
- // {
208
- // nullable: false,
209
- // path: 'spec.vm.spec.template.spec.domain.resources.requests.memory',
210
- // required: false,
211
- // translationKey: 'harvester.fields.memory',
212
- // },
213
- // {
214
- // nullable: false,
215
- // path: 'spec.vm.spec.template.spec',
216
- // validators: ['vmNetworks'],
217
- // },
218
- // {
219
- // nullable: false,
220
- // path: 'spec.vm.spec',
221
- // validators: ['vmDisks:isVMTemplate'],
222
- // },
223
- ];
224
-
225
- return rules;
226
- }
227
- }
@@ -1,32 +0,0 @@
1
- import { clone } from '@shell/utils/object';
2
- import { HCI } from '@shell/config/types';
3
- import NetworkAttachmentDef from '@shell/models/k8s.cni.cncf.io.networkattachmentdefinition';
4
-
5
- export default class HarvesterNetworkAttachmentDef extends NetworkAttachmentDef {
6
- get detailLocation() {
7
- const detailLocation = clone(this._detailLocation);
8
-
9
- detailLocation.params.resource = HCI.NETWORK_ATTACHMENT;
10
-
11
- return detailLocation;
12
- }
13
-
14
- get doneOverride() {
15
- const detailLocation = clone(this._detailLocation);
16
-
17
- delete detailLocation.params.namespace;
18
- delete detailLocation.params.id;
19
- detailLocation.params.resource = HCI.NETWORK_ATTACHMENT;
20
- detailLocation.name = 'c-cluster-product-resource';
21
-
22
- return detailLocation;
23
- }
24
-
25
- get parentNameOverride() {
26
- return this.$rootGetters['i18n/t'](`typeLabel."${ HCI.NETWORK_ATTACHMENT }"`, { count: 1 })?.trim();
27
- }
28
-
29
- get parentLocationOverride() {
30
- return this.doneOverride;
31
- }
32
- }