@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
@@ -0,0 +1,77 @@
1
+ import { shallowMount } from '@vue/test-utils';
2
+ import { Checkbox } from './index';
3
+
4
+ describe('Checkbox.vue', () => {
5
+ it('is unchecked by default', () => {
6
+ const wrapper = shallowMount(Checkbox);
7
+ const cbInput = wrapper.find('input[type="checkbox"]').element as HTMLInputElement;
8
+
9
+ expect(cbInput.checked).toBe(false);
10
+ });
11
+
12
+ it('renders a true value', () => {
13
+ const wrapper = shallowMount(Checkbox, { propsData: { value: true } });
14
+ const cbInput = wrapper.find('input[type="checkbox"]').element as HTMLInputElement;
15
+
16
+ expect(cbInput.checked).toBe(true);
17
+ });
18
+
19
+ it('updates from false to true when props change', async () => {
20
+ const wrapper = shallowMount(Checkbox);
21
+ const cbInput = wrapper.find('input[type="checkbox"]').element as HTMLInputElement;
22
+
23
+ expect(cbInput.checked).toBe(false);
24
+
25
+ await wrapper.setProps({ value: true });
26
+
27
+ expect(cbInput.checked).toBe(true);
28
+ });
29
+
30
+ it('emits an input event with a true value', async () => {
31
+ const wrapper = shallowMount(Checkbox);
32
+ const event = {
33
+ target: { tagName: 'input', href: null },
34
+ stopPropagation: () => { },
35
+ preventDefault: () => { }
36
+ };
37
+
38
+ (wrapper.vm as any).clicked(event);
39
+ await wrapper.vm.$nextTick();
40
+
41
+ expect(wrapper.emitted().input?.length).toBe(1);
42
+ expect(wrapper.emitted().input?.[0][0]).toBe(true);
43
+ });
44
+
45
+ it('emits an input event with a custom valueWhenTrue', async () => {
46
+ const valueWhenTrue = 'BIG IF TRUE';
47
+ const event = {
48
+ target: { tagName: 'input', href: null },
49
+ stopPropagation: () => { },
50
+ preventDefault: () => { }
51
+ };
52
+
53
+ const wrapper = shallowMount(Checkbox, { propsData: { value: false, valueWhenTrue } });
54
+
55
+ (wrapper.vm as any).clicked(event);
56
+ await wrapper.vm.$nextTick();
57
+
58
+ expect(wrapper.emitted().input?.length).toBe(1);
59
+ expect(wrapper.emitted().input?.[0][0]).toBe(valueWhenTrue);
60
+ });
61
+
62
+ it('updates from valueWhenTrue to falsy', async () => {
63
+ const valueWhenTrue = 'REAL HUGE IF FALSE';
64
+ const event = {
65
+ target: { tagName: 'input', href: null },
66
+ stopPropagation: () => { },
67
+ preventDefault: () => { }
68
+ };
69
+
70
+ const wrapper = shallowMount(Checkbox, { propsData: { value: valueWhenTrue, valueWhenTrue } });
71
+
72
+ (wrapper.vm as any).clicked(event);
73
+ await wrapper.vm.$nextTick();
74
+
75
+ expect(wrapper.emitted().input?.[0][0]).toBe(null);
76
+ })
77
+ });
@@ -9,7 +9,7 @@ export default Vue.extend({
9
9
  * The checkbox value.
10
10
  */
11
11
  value: {
12
- type: [Boolean, Array] as PropType<boolean | boolean[]>,
12
+ type: [Boolean, Array, String] as PropType<boolean | boolean[] | string>,
13
13
  default: false
14
14
  },
15
15
 
@@ -169,6 +169,12 @@ export default Vue.extend({
169
169
  addObject(this.value, this.valueWhenTrue);
170
170
  }
171
171
  this.$emit('input', this.value);
172
+ } else if (this.isString(this.valueWhenTrue)) {
173
+ if (this.isChecked) {
174
+ this.$emit('input', null);
175
+ } else {
176
+ this.$emit('input', this.valueWhenTrue);
177
+ }
172
178
  } else {
173
179
  this.$emit('input', !this.value);
174
180
  this.$el.dispatchEvent(click);
@@ -178,10 +184,14 @@ export default Vue.extend({
178
184
  /**
179
185
  * Determines if there are multiple values for the checkbox.
180
186
  */
181
- isMulti(value: boolean | boolean[]): value is boolean[] {
187
+ isMulti(value: boolean | boolean[] | string): value is boolean[] {
182
188
  return Array.isArray(value);
183
189
  },
184
190
 
191
+ isString(value: boolean | number | string): value is boolean {
192
+ return typeof value === 'string';
193
+ },
194
+
185
195
  /**
186
196
  * Finds the first true value for multiple checkboxes.
187
197
  * @param value A collection of values for the checkbox.
@@ -4,6 +4,20 @@ SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
4
4
  BASE_DIR="$( cd $SCRIPT_DIR && cd ../.. & pwd)"
5
5
  SHELL_DIR=$BASE_DIR/shell/
6
6
  EXIT_CODE=0
7
+ FORMATS="umd-min"
8
+
9
+ while getopts "df:" opt; do
10
+ case $opt in
11
+ d)
12
+ FORMATS="umd"
13
+ ;;
14
+ f)
15
+ FORMATS=$OPTARG
16
+ ;;
17
+ esac
18
+ done
19
+
20
+ shift $((OPTIND-1))
7
21
 
8
22
  # Use shell folder in node modules when we have @rancher/shell installed as a node module
9
23
  # rather than the use-case of the mono-repo with the shell folder at the top-level
@@ -12,7 +26,12 @@ if [ ! -d ${SHELL_DIR} ]; then
12
26
  SHELL_DIR=$(cd -P ${SHELL_DIR} && pwd)
13
27
  fi
14
28
 
15
- VERSION=$(cd pkg/$1; node -p -e "require('./package.json').version")
29
+ CREATE_TARBALL=${2}
30
+
31
+ if [ -z "$VERSION" ]; then
32
+ VERSION=$(cd pkg/$1; node -p -e "require('./package.json').version")
33
+ fi
34
+
16
35
  NAME=${1}-${VERSION}
17
36
  PKG_DIST=${BASE_DIR}/dist-pkg/${NAME}
18
37
 
@@ -20,6 +39,7 @@ if [ -d "${BASE_DIR}/pkg/${1}" ]; then
20
39
  echo "Building UI Package $1"
21
40
  echo " Package name: ${NAME}"
22
41
  echo " Package version: ${VERSION}"
42
+ echo " Output formats: ${FORMATS}"
23
43
  rm -rf ${PKG_DIST}
24
44
  mkdir -p ${PKG_DIST}
25
45
 
@@ -42,7 +62,11 @@ if [ -d "${BASE_DIR}/pkg/${1}" ]; then
42
62
  FILE=index.ts
43
63
  fi
44
64
 
45
- ${BASE_DIR}/node_modules/.bin/vue-cli-service build --name ${NAME} --target lib ${FILE} --dest ${PKG_DIST} --formats umd-min --filename ${NAME}
65
+ if [ -n "$COMMIT" ]; then
66
+ echo ${COMMIT} > ${PKG_DIST}/version
67
+ fi
68
+
69
+ ${BASE_DIR}/node_modules/.bin/vue-cli-service build --name ${NAME} --target lib ${FILE} --dest ${PKG_DIST} --formats ${FORMATS} --filename ${NAME}
46
70
  EXIT_CODE=$?
47
71
  cp -f ./package.json ${PKG_DIST}/package.json
48
72
  node ${SCRIPT_DIR}/pkgfile.js ${PKG_DIST}/package.json
@@ -52,4 +76,26 @@ if [ -d "${BASE_DIR}/pkg/${1}" ]; then
52
76
  popd
53
77
  fi
54
78
 
79
+ if [ $EXIT_CODE -ne 0 ]; then
80
+ exit $EXIT_CODE
81
+ fi
82
+
83
+
84
+ if [ -n "${CREATE_TARBALL}" ]; then
85
+ echo $COMMIT $COMMIT_BRANCH > ${PKG_DIST}/version-commit.txt
86
+
87
+ TARBALL=${NAME}.tar.gz
88
+
89
+ pushd ${PKG_DIST}
90
+
91
+ rm -f ../$TARBALL
92
+
93
+ echo "Compressing to ${TARBALL}..."
94
+
95
+ tar -czf ../${TARBALL} .
96
+
97
+ popd
98
+
99
+ fi
100
+
55
101
  exit $EXIT_CODE
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env bash
2
+
3
+ yarn --pure-lockfile install
4
+
5
+ source scripts/version
6
+
7
+ if [[ $COMMIT_BRANCH == "master" ]]; then
8
+ VERSION="latest"
9
+ else
10
+ VERSION=$(cd pkg/$1; node -p -e "require('./package.json').version")
11
+ fi
12
+
13
+ echo "Drone Build Args"
14
+ echo "COMMIT: ${COMMIT}"
15
+ echo "COMMIT_BRANCH: ${COMMIT_BRANCH}"
16
+ echo "VERSION: ${VERSION}"
17
+ echo ""
18
+
19
+ # package, override version, commit for file in pkg root
20
+ # Note - in the future env vars should be moved to args and build-pkg should use getopts
21
+ COMMIT=$COMMIT COMMIT_BRANCH=$COMMIT_BRANCH VERSION=$VERSION ./shell/scripts/build-pkg.sh ${1} "true"
22
+ EXIT_CODE=$?
23
+
24
+ export PKG_NAME=${1}-${VERSION}
25
+ export PKG_TARBALL=${PKG_NAME}.tar.gz
26
+
27
+ echo "Drone Build Artefacts"
28
+ echo "Package Directory: ${PKG_NAME}"
29
+ echo "Package Tarball: ${PKG_TARBALL}"
30
+
31
+ exit $EXIT_CODE
@@ -1,9 +1,12 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
- SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
4
- BASE_DIR="$( cd $SCRIPT_DIR && cd ../.. & pwd)"
3
+ SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
4
+ BASE_DIR="$(
5
+ cd $SCRIPT_DIR && cd ../.. &
6
+ pwd
7
+ )"
5
8
  SHELL_DIR=$BASE_DIR/shell/
6
- PUBLISH_ARGS="--no-git-tag-version --access public"
9
+ PUBLISH_ARGS="--no-git-tag-version --access public $PUBLISH_ARGS"
7
10
 
8
11
  echo "Publishing Shell Packages"
9
12
 
@@ -18,10 +21,10 @@ mkdir -p ${PKG_DIST}
18
21
  rm -rf ${PKG_DIST}/app
19
22
  rm -rf ${PKG_DIST}/pkg
20
23
 
21
- pushd ${SHELL_DIR} > /dev/null
24
+ pushd ${SHELL_DIR} >/dev/null
22
25
 
23
- PKG_VERSION=`node -p "require('./package.json').version"`
24
- popd > /dev/null
26
+ PKG_VERSION=$(node -p "require('./package.json').version")
27
+ popd >/dev/null
25
28
 
26
29
  echo "Publishing version: $PKG_VERSION"
27
30
 
@@ -39,7 +42,7 @@ function publish() {
39
42
  FOLDER=$2
40
43
 
41
44
  echo "Publishing ${NAME} from ${FOLDER}"
42
- pushd ${FOLDER} > /dev/null
45
+ pushd ${FOLDER} >/dev/null
43
46
 
44
47
  # For now, copy the rancher components into the shell and ship them with it
45
48
  if [ "$NAME" == "Shell" ]; then
@@ -50,11 +53,7 @@ function publish() {
50
53
 
51
54
  yarn publish . --new-version ${PKG_VERSION} ${PUBLISH_ARGS}
52
55
  RET=$?
53
-
54
- # Remove the rancher-components folder if we created it
55
- rm -rf ${SHELL_DIR}/rancher-components
56
-
57
- popd > /dev/null
56
+ popd >/dev/null
58
57
 
59
58
  if [ $RET -ne 0 ]; then
60
59
  echo "Error publishing package ${NAME}"
@@ -9,13 +9,14 @@ const dir = path.resolve('.');
9
9
  const pkgs = path.join(dir, 'dist-pkg');
10
10
  let port = 4500;
11
11
 
12
- var express = require('express')
13
- var serveStatic = require('serve-static');
14
-
15
- var app = express()
12
+ const express = require('express');
13
+ const serveStatic = require('serve-static');
14
+
15
+ const app = express();
16
16
 
17
17
  function catalog(res) {
18
18
  const response = [];
19
+
19
20
  fs.readdirSync(pkgs).forEach((f) => {
20
21
  const pkgFile = path.join(pkgs, f, 'package.json');
21
22
 
@@ -27,7 +28,7 @@ function catalog(res) {
27
28
  }
28
29
  });
29
30
 
30
- res.json(response)
31
+ res.json(response);
31
32
  }
32
33
 
33
34
  app.use('/', (req, res, next) => {
@@ -37,7 +38,7 @@ app.use('/', (req, res, next) => {
37
38
 
38
39
  return next();
39
40
  });
40
-
41
+
41
42
  app.use(serveStatic(pkgs));
42
43
 
43
44
  if (process.env.PORT) {
@@ -47,16 +48,22 @@ if (process.env.PORT) {
47
48
  const base = `http://127.0.0.1:${ port }`;
48
49
 
49
50
  console.log('');
50
- console.log(`Serving catalog on ${ base }`)
51
+ console.log(`Serving catalog on ${ base }`);
51
52
  console.log('');
52
53
  console.log(`Serving packages:`);
53
54
  console.log('');
54
55
  fs.readdirSync(pkgs).forEach((f) => {
55
- const main = `${ f }.umd.min.js`;
56
+ let main = `${ f }.umd.min.js`;
56
57
 
57
58
  if (fs.existsSync(path.join(pkgs, f, main))) {
58
59
  console.log(` ${ f } available at: ${ base }/${ f }/${ main }`);
60
+ } else {
61
+ main = `${ f }.umd.js`;
62
+
63
+ if (fs.existsSync(path.join(pkgs, f, main))) {
64
+ console.log(` ${ f } available at: ${ base }/${ f }/${ main }`);
65
+ }
59
66
  }
60
67
  });
61
-
62
- app.listen(port)
68
+
69
+ app.listen(port);
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env node
2
+
3
+ const fs = require('fs-extra');
4
+ const path = require('path');
5
+
6
+ console.log(__dirname);
7
+
8
+ const dir = path.resolve('.');
9
+
10
+ console.log('Syncing shell dependencies');
11
+
12
+ const topFile = path.join(dir, 'package.json');
13
+ const shellFile = path.join(dir, 'shell', 'package.json');
14
+
15
+ console.log(topFile);
16
+ console.log(shellFile);
17
+
18
+ const mainPkg = JSON.parse(fs.readFileSync(topFile));
19
+
20
+ console.log(mainPkg.version);
21
+
22
+ const shellPkg = JSON.parse(fs.readFileSync(shellFile));
23
+
24
+ console.log(shellPkg.version);
25
+
26
+ Object.keys(shellPkg.dependencies).forEach(k => {
27
+ const version = mainPkg.dependencies[k] || mainPkg.devDependencies[k];
28
+ const current = shellPkg.dependencies[k];
29
+
30
+ if (version) {
31
+ console.log(`Syncing ${ k } -> ${ version } was ${ current }`);
32
+ shellPkg.dependencies[k] = version;
33
+ }
34
+ });
35
+
36
+ fs.writeFileSync(shellFile, JSON.stringify(shellPkg, undefined, 2));
37
+
package/store/catalog.js CHANGED
@@ -61,6 +61,11 @@ export const getters = {
61
61
  return [...clustered, ...namespaced];
62
62
  },
63
63
 
64
+ // Raw charts
65
+ rawCharts(state) {
66
+ return state.charts;
67
+ },
68
+
64
69
  repo(state, getters) {
65
70
  return ({ repoType, repoName }) => {
66
71
  const ary = (repoType === 'cluster' ? state.clusterRepos : state.namespacedRepos);
@@ -250,19 +255,13 @@ export const getters = {
250
255
 
251
256
  haveComponent() {
252
257
  return (name) => {
253
- try {
254
- require.resolve(`@shell/chart/${ name }`);
255
-
256
- return true;
257
- } catch (e) {
258
- return false;
259
- }
258
+ return getters['type-map/hasCustomChart'](name);
260
259
  };
261
260
  },
262
261
 
263
262
  importComponent(state, getters) {
264
263
  return (name) => {
265
- return importChart(name);
264
+ return getters['type-map/importChart'](name);
266
265
  };
267
266
  },
268
267
 
@@ -340,6 +339,7 @@ export const actions = {
340
339
  // Installing an app? This is fine (in cluster store)
341
340
  // Fetching list of cluster templates? This is fine (in management store)
342
341
  // Installing a cluster template? This isn't fine (in cluster store as per installing app, but if there is no cluster we need to default to management)
342
+
343
343
  const inStore = rootGetters['currentCluster'] ? rootGetters['currentProduct'].inStore : 'management';
344
344
 
345
345
  if ( rootGetters[`${ inStore }/schemaFor`](CATALOG.CLUSTER_REPO) ) {
@@ -517,6 +517,7 @@ function addChart(ctx, map, chart, repo) {
517
517
  chartName: chart.name,
518
518
  chartNameDisplay: chart.annotations?.[CATALOG_ANNOTATIONS.DISPLAY_NAME] || chart.name,
519
519
  chartDescription: chart.description,
520
+ featured: chart.annotations?.[CATALOG_ANNOTATIONS.FEATURED],
520
521
  repoKey: repo._key,
521
522
  versions: [],
522
523
  categories: filterCategories(chart.keywords),
@@ -652,7 +653,9 @@ export function filterAndArrangeCharts(charts, {
652
653
  const searchTokens = searchQuery.split(/\s*[, ]\s*/).map(x => ensureRegex(x, false));
653
654
 
654
655
  for ( const token of searchTokens ) {
655
- if ( !c.chartNameDisplay.match(token) && (c.chartDescription && !c.chartDescription.match(token)) ) {
656
+ const chartDescription = c.chartDescription || '';
657
+
658
+ if ( !c.chartNameDisplay.match(token) && !chartDescription.match(token) ) {
656
659
  return false;
657
660
  }
658
661
  }
package/store/i18n.js CHANGED
@@ -1,6 +1,5 @@
1
1
  import merge from 'lodash/merge';
2
2
  import IntlMessageFormat from 'intl-messageformat';
3
- import { LOCALE } from '@shell/config/cookies';
4
3
  import { get } from '@shell/utils/object';
5
4
  import en from '@shell/assets/translations/en-us.yaml';
6
5
  import { getProduct, getVendor, DOCS_BASE } from '@shell/config/private-label';
@@ -140,6 +139,14 @@ export const getters = {
140
139
  return state.default;
141
140
  },
142
141
 
142
+ multiWithFallback: (state, getters) => (items, key = 'key') => {
143
+ return items.map((item) => {
144
+ item[key] = getters.withFallback(item[key], null, item[key]);
145
+
146
+ return item;
147
+ });
148
+ },
149
+
143
150
  withFallback: (state, getters) => (key, args, fallback, fallbackIsKey = false) => {
144
151
  // Support withFallback(key,fallback) when no args
145
152
  if ( !fallback && typeof args === 'string' ) {
@@ -154,7 +161,8 @@ export const getters = {
154
161
  } else {
155
162
  return fallback;
156
163
  }
157
- }
164
+ },
165
+
158
166
  };
159
167
 
160
168
  export const mutations = {
@@ -208,8 +216,10 @@ export const mutations = {
208
216
  };
209
217
 
210
218
  export const actions = {
211
- init({ state, commit, dispatch }) {
212
- let selected = this.$cookies.get(LOCALE, { parseJSON: false });
219
+ init({
220
+ state, commit, dispatch, rootGetters
221
+ }) {
222
+ let selected = rootGetters['prefs/get']('locale');
213
223
 
214
224
  // We might be using a locale that is loaded by a plugin that is no longer loaded
215
225
  const exists = !!state.available.find(loc => loc === selected);
@@ -259,8 +269,11 @@ export const actions = {
259
269
  state,
260
270
  rootState,
261
271
  commit,
262
- dispatch
272
+ dispatch,
273
+ getters
263
274
  }, locale) {
275
+ const currentLocale = getters['current']();
276
+
264
277
  if ( locale === NONE ) {
265
278
  commit('setSelected', locale);
266
279
 
@@ -308,13 +321,14 @@ export const actions = {
308
321
  }
309
322
 
310
323
  commit('setSelected', locale);
311
- this.$cookies.set(LOCALE, locale, {
312
- encode: x => x,
313
- maxAge: 86400 * 365,
314
- path: '/',
315
- sameSite: true,
316
- secure: true,
317
- });
324
+
325
+ // Ony update the preference if the locale changed
326
+ if (currentLocale !== locale) {
327
+ dispatch('prefs/set', {
328
+ key: 'locale',
329
+ value: state.selected
330
+ }, { root: true });
331
+ }
318
332
  },
319
333
 
320
334
  toggleNone({ state, dispatch }) {