@rancher/shell 0.1.1 → 0.1.3

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 (294) hide show
  1. package/assets/translations/en-us.yaml +33 -769
  2. package/assets/translations/zh-hans.yaml +153 -781
  3. package/components/ActionMenu.vue +3 -3
  4. package/components/CodeMirror.vue +6 -8
  5. package/components/CommunityLinks.vue +1 -1
  6. package/components/ContainerResourceLimit.vue +14 -0
  7. package/components/ExplorerMembers.vue +123 -0
  8. package/components/ExplorerProjectsNamespaces.vue +405 -0
  9. package/components/GrafanaDashboard.vue +17 -2
  10. package/components/LocaleSelector.vue +81 -0
  11. package/components/PromptModal.vue +2 -3
  12. package/components/ResourceList/index.vue +1 -1
  13. package/components/ResourceTable.vue +3 -6
  14. package/components/SingleClusterInfo.vue +1 -1
  15. package/components/SortableTable/index.vue +23 -20
  16. package/components/SortableTable/selection.js +1 -0
  17. package/components/auth/AzureWarning.vue +5 -1
  18. package/components/auth/Principal.vue +1 -1
  19. package/components/auth/RoleDetailEdit.vue +32 -12
  20. package/components/fleet/FleetRepos.vue +0 -2
  21. package/components/form/NameNsDescription.vue +4 -6
  22. package/components/form/NodeScheduling.vue +1 -1
  23. package/components/form/ResourceTabs/index.vue +27 -18
  24. package/components/form/WorkloadPorts.vue +1 -1
  25. package/components/formatter/ClusterLink.vue +13 -0
  26. package/components/formatter/PodImages.vue +11 -1
  27. package/components/formatter/RKETemplateName.vue +37 -0
  28. package/components/formatter/WorkloadHealthScale.vue +1 -1
  29. package/components/nav/Header.vue +9 -9
  30. package/components/nav/NamespaceFilter.vue +7 -4
  31. package/components/nav/TopLevelMenu.vue +6 -43
  32. package/components/nav/WindowManager/ContainerLogs.vue +1 -1
  33. package/config/product/harvester-manager.js +64 -2
  34. package/config/product/manager.js +9 -0
  35. package/config/settings.js +17 -71
  36. package/config/table-headers.js +0 -1
  37. package/config/types.js +8 -26
  38. package/core/plugin-routes.ts +34 -22
  39. package/core/plugin.ts +15 -3
  40. package/core/plugins-loader.js +2 -0
  41. package/core/plugins.js +79 -36
  42. package/core/types.ts +7 -1
  43. package/creators/app/tsconfig.json +6 -1
  44. package/creators/pkg/init +3 -0
  45. package/creators/pkg/tsconfig.json +7 -2
  46. package/detail/provisioning.cattle.io.cluster.vue +23 -0
  47. package/detail/workload/index.vue +11 -5
  48. package/{components/dialog → dialog}/AddClusterMemberDialog.vue +0 -0
  49. package/{components/dialog → dialog}/AddCustomBadgeDialog.vue +0 -0
  50. package/{components/dialog → dialog}/AddProjectMemberDialog.vue +0 -0
  51. package/{components/dialog → dialog}/AddonConfigConfirmationDialog.vue +0 -0
  52. package/{components/dialog → dialog}/DrainNode.vue +0 -0
  53. package/{components/dialog → dialog}/ForceMachineRemoveDialog.vue +0 -0
  54. package/{components/dialog → dialog}/GenericPrompt.vue +0 -0
  55. package/{components/dialog → dialog}/RollbackWorkloadDialog.vue +0 -0
  56. package/{components/dialog → dialog}/RotateCertificatesDialog.vue +0 -0
  57. package/{components/dialog → dialog}/RotateEncryptionKeyDialog.vue +0 -0
  58. package/{components/dialog → dialog}/SaveAsRKETemplateDialog.vue +0 -0
  59. package/{components/dialog → dialog}/ScaleMachineDownDialog.vue +0 -0
  60. package/edit/auth/azuread.vue +20 -1
  61. package/edit/cloudcredential.vue +7 -1
  62. package/edit/management.cattle.io.project.vue +2 -2
  63. package/edit/namespace.vue +17 -10
  64. package/edit/networking.k8s.io.ingress/index.vue +2 -1
  65. package/edit/persistentvolumeclaim.vue +33 -2
  66. package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +1 -1
  67. package/edit/provisioning.cattle.io.cluster/MachinePool.vue +34 -6
  68. package/edit/provisioning.cattle.io.cluster/index.vue +1 -1
  69. package/edit/provisioning.cattle.io.cluster/rke2.vue +21 -6
  70. package/edit/service.vue +1 -1
  71. package/edit/workload/index.vue +363 -15
  72. package/edit/workload/mixins/workload.js +62 -7
  73. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +1 -0
  74. package/layouts/default.vue +52 -27
  75. package/layouts/error.vue +5 -1
  76. package/layouts/home.vue +6 -2
  77. package/list/harvesterhci.io.management.cluster.vue +74 -33
  78. package/list/namespace.vue +3 -5
  79. package/list/provisioning.cattle.io.cluster.vue +6 -0
  80. package/machine-config/amazonec2.vue +2 -0
  81. package/machine-config/harvester.vue +96 -49
  82. package/middleware/authenticated.js +56 -52
  83. package/mixins/brand.js +3 -4
  84. package/mixins/create-edit-view/impl.js +0 -8
  85. package/mixins/form-validation.js +1 -1
  86. package/mixins/resource-fetch.js +3 -1
  87. package/models/chart.js +1 -1
  88. package/models/cluster/node.js +12 -1
  89. package/models/fleet.cattle.io.bundle.js +26 -19
  90. package/models/harvesterhci.io.management.cluster.js +194 -5
  91. package/models/management.cattle.io.cluster.js +1 -1
  92. package/models/management.cattle.io.clusterroletemplatebinding.js +9 -0
  93. package/models/management.cattle.io.globalrole.js +0 -19
  94. package/models/management.cattle.io.project.js +23 -2
  95. package/models/management.cattle.io.roletemplate.js +2 -21
  96. package/models/namespace.js +19 -3
  97. package/models/pod.js +19 -2
  98. package/models/provisioning.cattle.io.cluster.js +71 -0
  99. package/models/service.js +5 -1
  100. package/models/workload.js +4 -243
  101. package/models/workload.service.js +314 -0
  102. package/nuxt.config.js +14 -12
  103. package/package.json +3 -3
  104. package/pages/auth/login.vue +11 -2
  105. package/pages/auth/setup.vue +1 -1
  106. package/pages/c/_cluster/_product/members/index.vue +3 -93
  107. package/pages/c/_cluster/_product/projectsnamespaces.vue +6 -403
  108. package/pages/c/_cluster/apps/charts/install.vue +0 -6
  109. package/pages/c/_cluster/settings/performance.vue +19 -16
  110. package/pages/fail-whale.vue +1 -10
  111. package/pages/index.vue +18 -4
  112. package/pages/plugins.vue +2 -2
  113. package/pages/prefs.vue +8 -6
  114. package/pkg/auto-import.js +44 -7
  115. package/pkg/dynamic-plugin-loader.js +28 -0
  116. package/pkg/import.js +2 -2
  117. package/pkg/model-loader-require.lib.js +3 -0
  118. package/pkg/vue.config.js +9 -6
  119. package/plugins/console.js +10 -5
  120. package/plugins/dashboard-store/actions.js +8 -3
  121. package/plugins/dashboard-store/getters.js +7 -2
  122. package/plugins/dashboard-store/model-loader-require.js +12 -0
  123. package/plugins/dashboard-store/model-loader.js +4 -1
  124. package/plugins/dashboard-store/resource-class.js +10 -3
  125. package/plugins/steve/actions.js +1 -1
  126. package/plugins/steve/index.js +6 -4
  127. package/plugins/steve/steve-description-class.js +32 -0
  128. package/plugins/steve/subscribe.js +34 -23
  129. package/rancher-components/Banner/Banner.vue +2 -2
  130. package/rancher-components/Form/Checkbox/Checkbox.test.ts +77 -0
  131. package/rancher-components/Form/Checkbox/Checkbox.vue +12 -2
  132. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +0 -2
  133. package/rancher-components/Form/LabeledInput/LabeledInput.vue +2 -0
  134. package/rancher-components/Form/Radio/RadioButton.vue +14 -1
  135. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.test.ts +107 -0
  136. package/{components/form → rancher-components/Form/ToggleSwitch}/ToggleSwitch.vue +18 -8
  137. package/rancher-components/Form/ToggleSwitch/index.ts +1 -0
  138. package/rancher-components/Form/index.ts +1 -0
  139. package/scripts/build-pkg.sh +48 -2
  140. package/scripts/drone-build-pkg.sh +31 -0
  141. package/scripts/publish-shell.sh +10 -11
  142. package/scripts/serve-pkgs +17 -10
  143. package/scripts/test-plugins-build.sh +18 -1
  144. package/store/catalog.js +3 -1
  145. package/store/i18n.js +16 -11
  146. package/store/index.js +4 -181
  147. package/store/prefs.js +30 -2
  148. package/store/type-map.js +16 -29
  149. package/types/{index.d.ts → rancher/index.d.ts} +0 -0
  150. package/utils/cluster.js +1 -1
  151. package/utils/custom-validators.js +1 -12
  152. package/utils/dynamic-importer.js +1 -1
  153. package/utils/validators/setting.js +0 -35
  154. package/components/FilterLabel.vue +0 -254
  155. package/components/HarvesterUpgradeProgressBarList.vue +0 -109
  156. package/components/VMConsoleBar.vue +0 -87
  157. package/components/dialog/harvester/AddHotplugModal.vue +0 -159
  158. package/components/dialog/harvester/BackupModal.vue +0 -117
  159. package/components/dialog/harvester/CloneTemplate.vue +0 -125
  160. package/components/dialog/harvester/EjectCDROMDialog.vue +0 -157
  161. package/components/dialog/harvester/ExportImageDialog.vue +0 -152
  162. package/components/dialog/harvester/MaintenanceDialog.vue +0 -94
  163. package/components/dialog/harvester/MigrationDialog.vue +0 -154
  164. package/components/dialog/harvester/RestoreDialog.vue +0 -153
  165. package/components/dialog/harvester/SupportBundle.vue +0 -217
  166. package/components/dialog/harvester/UnplugVolume.vue +0 -108
  167. package/components/form/SerialConsole/index.vue +0 -267
  168. package/components/formatter/AttachVMWithName.vue +0 -46
  169. package/components/formatter/CloudInitType.vue +0 -27
  170. package/components/formatter/HarvesterBackupTargetValidation.vue +0 -43
  171. package/components/formatter/HarvesterCPUUsed.vue +0 -122
  172. package/components/formatter/HarvesterDiskState.vue +0 -66
  173. package/components/formatter/HarvesterHostName.vue +0 -66
  174. package/components/formatter/HarvesterIpAddress.vue +0 -90
  175. package/components/formatter/HarvesterMemoryUsed.vue +0 -140
  176. package/components/formatter/HarvesterMigrationState.vue +0 -85
  177. package/components/formatter/HarvesterNodeName.vue +0 -49
  178. package/components/formatter/HarvesterStorageUsed.vue +0 -194
  179. package/components/formatter/HarvesterVmState.vue +0 -123
  180. package/components/nav/HarvesterUpgrade.vue +0 -232
  181. package/components/novnc/NovncConsole.vue +0 -93
  182. package/components/novnc/NovncConsoleItem.vue +0 -89
  183. package/components/novnc/NovncConsoleWrapper.vue +0 -243
  184. package/config/harvester-map.js +0 -44
  185. package/config/harvester-table-headers.js +0 -27
  186. package/config/product/harvester.js +0 -305
  187. package/detail/harvesterhci.io.host/HarvesterHostBasic.vue +0 -364
  188. package/detail/harvesterhci.io.host/HarvesterHostDisk.vue +0 -200
  189. package/detail/harvesterhci.io.host/HarvesterHostNetwork.vue +0 -89
  190. package/detail/harvesterhci.io.host/VirtualMachineInstance.vue +0 -134
  191. package/detail/harvesterhci.io.host/index.vue +0 -243
  192. package/detail/harvesterhci.io.virtualmachinebackup/index.vue +0 -221
  193. package/detail/harvesterhci.io.virtualmachineimage.vue +0 -118
  194. package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineBasics.vue +0 -279
  195. package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineEvents.vue +0 -75
  196. package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineKeypairs.vue +0 -114
  197. package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineMigration.vue +0 -79
  198. package/detail/kubevirt.io.virtualmachine/index.vue +0 -213
  199. package/edit/harvesterhci.io.cloudtemplate.vue +0 -123
  200. package/edit/harvesterhci.io.host/HarvesterDisk.vue +0 -262
  201. package/edit/harvesterhci.io.host/index.vue +0 -533
  202. package/edit/harvesterhci.io.keypair.vue +0 -112
  203. package/edit/harvesterhci.io.managedchart/index.vue +0 -25
  204. package/edit/harvesterhci.io.managedchart/rancher-monitoring.vue +0 -172
  205. package/edit/harvesterhci.io.networkattachmentdefinition.vue +0 -210
  206. package/edit/harvesterhci.io.setting/additional-ca.vue +0 -36
  207. package/edit/harvesterhci.io.setting/backup-target.vue +0 -182
  208. package/edit/harvesterhci.io.setting/http-proxy.vue +0 -79
  209. package/edit/harvesterhci.io.setting/index.vue +0 -201
  210. package/edit/harvesterhci.io.setting/overcommit-config.vue +0 -94
  211. package/edit/harvesterhci.io.setting/ssl-certificates.vue +0 -117
  212. package/edit/harvesterhci.io.setting/ssl-parameters.vue +0 -161
  213. package/edit/harvesterhci.io.setting/support-bundle-image.vue +0 -134
  214. package/edit/harvesterhci.io.setting/support-bundle-namespaces.vue +0 -73
  215. package/edit/harvesterhci.io.setting/vip-pools.vue +0 -244
  216. package/edit/harvesterhci.io.setting/vm-force-reset-policy.vue +0 -81
  217. package/edit/harvesterhci.io.virtualmachinebackup.vue +0 -256
  218. package/edit/harvesterhci.io.virtualmachineimage.vue +0 -364
  219. package/edit/harvesterhci.io.virtualmachinetemplateversion.vue +0 -340
  220. package/edit/harvesterhci.io.volume.vue +0 -195
  221. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/AccessCredentialsUsers.vue +0 -190
  222. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/index.vue +0 -212
  223. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/type/basicAuth.vue +0 -94
  224. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/type/sshkey.vue +0 -85
  225. package/edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/DataTemplate.vue +0 -153
  226. package/edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/index.vue +0 -279
  227. package/edit/kubevirt.io.virtualmachine/VirtualMachineCpuMemory.vue +0 -113
  228. package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/__tests__/HarvesterEditNetwork.test.ts +0 -41
  229. package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/base.vue +0 -281
  230. package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/index.vue +0 -142
  231. package/edit/kubevirt.io.virtualmachine/VirtualMachineReserved.vue +0 -54
  232. package/edit/kubevirt.io.virtualmachine/VirtualMachineSSHKey.vue +0 -256
  233. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/index.vue +0 -391
  234. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditContainer.test.ts +0 -40
  235. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditExisting.test.ts +0 -102
  236. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditVMImage.test.ts +0 -117
  237. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditVolume.test.ts +0 -74
  238. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/container.vue +0 -132
  239. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/existing.vue +0 -303
  240. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/vmImage.vue +0 -285
  241. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/volume.vue +0 -188
  242. package/edit/kubevirt.io.virtualmachine/index.vue +0 -642
  243. package/edit/network.harvesterhci.io.clusternetwork/index.vue +0 -19
  244. package/edit/network.harvesterhci.io.clusternetwork/vlan.vue +0 -134
  245. package/edit/workload/types/Deployment.vue +0 -377
  246. package/edit/workload/types/Generic.vue +0 -295
  247. package/list/harvesterhci.io.cloudtemplate.vue +0 -78
  248. package/list/harvesterhci.io.dashboard/HarvesterUpgrade.vue +0 -211
  249. package/list/harvesterhci.io.dashboard/UpgradeInfo.vue +0 -40
  250. package/list/harvesterhci.io.dashboard/index.vue +0 -752
  251. package/list/harvesterhci.io.host/index.vue +0 -186
  252. package/list/harvesterhci.io.networkattachmentdefinition.vue +0 -167
  253. package/list/harvesterhci.io.setting.vue +0 -241
  254. package/list/harvesterhci.io.virtualmachinebackup.vue +0 -172
  255. package/list/harvesterhci.io.virtualmachineimage.vue +0 -80
  256. package/list/harvesterhci.io.virtualmachinetemplateversion.vue +0 -173
  257. package/list/harvesterhci.io.volume.vue +0 -122
  258. package/list/kubevirt.io.virtualmachine.vue +0 -193
  259. package/mixins/harvester-vm/impl.js +0 -267
  260. package/mixins/harvester-vm/index.js +0 -1357
  261. package/models/harvester/configmap.js +0 -32
  262. package/models/harvester/harvesterhci.io.blockdevice.js +0 -55
  263. package/models/harvester/harvesterhci.io.keypair.js +0 -12
  264. package/models/harvester/harvesterhci.io.setting.js +0 -127
  265. package/models/harvester/harvesterhci.io.supportbundle.js +0 -35
  266. package/models/harvester/harvesterhci.io.upgrade.js +0 -226
  267. package/models/harvester/harvesterhci.io.virtualmachinebackup.js +0 -116
  268. package/models/harvester/harvesterhci.io.virtualmachineimage.js +0 -255
  269. package/models/harvester/harvesterhci.io.virtualmachinerestore.js +0 -43
  270. package/models/harvester/harvesterhci.io.virtualmachinetemplate.js +0 -69
  271. package/models/harvester/harvesterhci.io.virtualmachinetemplateversion.js +0 -227
  272. package/models/harvester/k8s.cni.cncf.io.networkattachmentdefinition.js +0 -32
  273. package/models/harvester/kubevirt.io.virtualmachine.js +0 -850
  274. package/models/harvester/kubevirt.io.virtualmachineinstance.js +0 -142
  275. package/models/harvester/management.cattle.io.managedchart.js +0 -191
  276. package/models/harvester/management.cattle.io.setting.js +0 -40
  277. package/models/harvester/network.harvesterhci.io.clusternetwork.js +0 -100
  278. package/models/harvester/network.harvesterhci.io.nodenetwork.js +0 -34
  279. package/models/harvester/node.js +0 -255
  280. package/models/harvester/persistentvolumeclaim.js +0 -166
  281. package/models/harvester/pod.js +0 -185
  282. package/pages/c/_cluster/harvester/airgapupgrade/index.vue +0 -309
  283. package/pages/c/_cluster/harvester/console/_uid/serial.vue +0 -51
  284. package/pages/c/_cluster/harvester/console/_uid/vnc.vue +0 -52
  285. package/pages/c/_cluster/harvester/index.vue +0 -24
  286. package/pages/c/_cluster/harvester/support/index.vue +0 -154
  287. package/pkg/model-loader.lib.js +0 -3
  288. package/plugins/lookup.js +0 -50
  289. package/promptRemove/kubevirt.io.virtualmachine.vue +0 -164
  290. package/store/harvester-common.js +0 -126
  291. package/utils/validators/vm-datavolumes.js +0 -38
  292. package/utils/validators/vm-image.js +0 -32
  293. package/utils/validators/vm.js +0 -221
  294. package/yarn-error.log +0 -196
package/store/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import Steve from '@shell/plugins/steve';
2
2
  import {
3
- COUNT, NAMESPACE, NORMAN, MANAGEMENT, FLEET, UI, VIRTUAL_HARVESTER_PROVIDER, HCI, DEFAULT_WORKSPACE
3
+ COUNT, NAMESPACE, NORMAN, MANAGEMENT, FLEET, UI, VIRTUAL_HARVESTER_PROVIDER, DEFAULT_WORKSPACE
4
4
  } from '@shell/config/types';
5
5
  import { CLUSTER as CLUSTER_PREF, NAMESPACE_FILTERS, LAST_NAMESPACE, WORKSPACE } from '@shell/store/prefs';
6
6
  import { allHash, allHashSettled } from '@shell/utils/promise';
@@ -14,7 +14,6 @@ import { setBrand, setVendor } from '@shell/config/private-label';
14
14
  import { addParam } from '@shell/utils/url';
15
15
  import { SETTING } from '@shell/config/settings';
16
16
  import semver from 'semver';
17
- import { NAME as VIRTUAL } from '@shell/config/product/harvester';
18
17
  import { BACK_TO } from '@shell/config/local-storage';
19
18
  import { STEVE_MODEL_TYPES } from '@shell/plugins/steve/getters';
20
19
  import { BY_TYPE } from '@shell/plugins/dashboard-store/classify';
@@ -52,12 +51,6 @@ export const plugins = [
52
51
  supportsStream: false, // The norman API doesn't support streaming
53
52
  modelBaseClass: STEVE_MODEL_TYPES.NORMAN,
54
53
  }),
55
- Steve({
56
- namespace: 'harvester',
57
- baseUrl: '', // URL is dynamically set for the selected cluster
58
- supportsStream: false, // true, -- Disabled due to report that it's sometimes much slower in Chrome
59
- }),
60
-
61
54
  ];
62
55
 
63
56
  const getActiveNamespaces = (state, getters) => {
@@ -450,47 +443,14 @@ export const getters = {
450
443
  return '/';
451
444
  },
452
445
 
453
- isSingleProduct(state, rootGetters) {
446
+ isSingleProduct(state) {
454
447
  if (state.isSingleProduct !== undefined) {
455
448
  return state.isSingleProduct;
456
449
  }
457
450
 
458
- if (rootGetters.isSingleVirtualCluster) {
459
- return {
460
- logo: require('~shell/assets/images/providers/harvester.svg'),
461
- productNameKey: 'product.harvester',
462
- version: rootGetters['harvester/byId'](HCI.SETTING, 'server-version')?.value,
463
- afterLoginRoute: {
464
- name: 'c-cluster-product',
465
- params: { product: VIRTUAL },
466
- },
467
- logoRoute: {
468
- name: 'c-cluster-product-resource',
469
- params: {
470
- product: VIRTUAL,
471
- resource: HCI.DASHBOARD,
472
- }
473
- },
474
- enableSessionCheck: true
475
- };
476
- }
477
-
478
451
  return false;
479
452
  },
480
453
 
481
- isSingleVirtualCluster(state, getters, rootState, rootGetters) {
482
- const clusterId = getters.defaultClusterId;
483
- const cluster = rootGetters['management/byId'](MANAGEMENT.CLUSTER, clusterId);
484
-
485
- return !getters.isMultiCluster && cluster?.status?.provider === VIRTUAL_HARVESTER_PROVIDER;
486
- },
487
-
488
- isMultiVirtualCluster(state, getters, rootState, rootGetters) {
489
- const localCluster = rootGetters['management/byId'](MANAGEMENT.CLUSTER, 'local');
490
-
491
- return getters.isMultiCluster && localCluster?.status?.provider !== VIRTUAL_HARVESTER_PROVIDER;
492
- },
493
-
494
454
  isVirtualCluster(state, getters) {
495
455
  const cluster = getters['currentCluster'];
496
456
 
@@ -509,9 +469,7 @@ export const mutations = {
509
469
  state.clusterReady = ready;
510
470
  },
511
471
 
512
- updateNamespaces(state, getters) {
513
- const { filters, all } = getters;
514
-
472
+ updateNamespaces(state, { filters, all }) {
515
473
  state.namespaceFilters = filters.filter(x => !!x);
516
474
 
517
475
  if ( all ) {
@@ -644,7 +602,7 @@ export const actions = {
644
602
  }
645
603
 
646
604
  res = await allHash(promises);
647
-
605
+ dispatch('i18n/init');
648
606
  let isMultiCluster = true;
649
607
 
650
608
  if ( res.clusters.length === 1 && res.clusters[0].metadata?.name === 'local' ) {
@@ -701,11 +659,6 @@ export const actions = {
701
659
  return;
702
660
  }
703
661
 
704
- if (oldProduct === VIRTUAL) {
705
- await dispatch('harvester/unsubscribe');
706
- commit('harvester/reset');
707
- }
708
-
709
662
  const oldPkgClusterStore = oldPkg?.stores.find(
710
663
  s => getters[`${ s.storeName }/isClusterStore`]
711
664
  )?.storeName;
@@ -767,7 +720,6 @@ export const actions = {
767
720
  // If we've entered a new store ensure everything has loaded correctly
768
721
  if (newPkgClusterStore) {
769
722
  // Mirror actions on the 'cluster' store for our specific pkg `cluster` store
770
- dispatch(`${ newPkgClusterStore }/loadSchemas`, true);
771
723
  await dispatch(`${ newPkgClusterStore }/loadCluster`, { id });
772
724
 
773
725
  commit('clusterReady', true);
@@ -872,135 +824,6 @@ export const actions = {
872
824
  commit('updateNamespaces', { filters: ids, ...getters });
873
825
  },
874
826
 
875
- async loadVirtual({
876
- state, commit, dispatch, getters
877
- }, { id, oldProduct }) {
878
- const isMultiCluster = getters['isMultiCluster'];
879
-
880
- if (isMultiCluster && id === 'local') {
881
- return;
882
- }
883
-
884
- if ( state.clusterId && state.clusterId === id && oldProduct === VIRTUAL) {
885
- // Do nothing, we're already connected/connecting to this cluster
886
- return;
887
- }
888
-
889
- if (oldProduct !== VIRTUAL) {
890
- await dispatch('cluster/unsubscribe');
891
- commit('cluster/reset');
892
- }
893
-
894
- if ( state.clusterId && id ) {
895
- commit('clusterReady', false);
896
-
897
- await dispatch('harvester/unsubscribe');
898
- commit('harvester/reset');
899
-
900
- await dispatch('management/watch', {
901
- type: MANAGEMENT.PROJECT,
902
- namespace: state.clusterId,
903
- stop: true
904
- });
905
-
906
- commit('management/forgetType', MANAGEMENT.PROJECT);
907
- }
908
-
909
- if (id) {
910
- commit('clusterId', id);
911
- }
912
-
913
- console.log(`Loading ${ isMultiCluster ? 'ECM ' : '' }cluster...`); // eslint-disable-line no-console
914
-
915
- // This is a workaround for a timing issue where the mgmt cluster schema may not be available
916
- // Try and wait until the schema exists before proceeding
917
- await dispatch('management/waitForSchema', { type: MANAGEMENT.CLUSTER });
918
-
919
- // See if it really exists
920
- const cluster = await dispatch('management/find', {
921
- type: MANAGEMENT.CLUSTER,
922
- id,
923
- opt: { url: `${ MANAGEMENT.CLUSTER }s/${ escape(id) }` }
924
- });
925
-
926
- let virtualBase = `/k8s/clusters/${ escape(id) }/v1/harvester`;
927
-
928
- if (id === 'local') {
929
- virtualBase = `/v1/harvester`;
930
- }
931
-
932
- if ( !cluster ) {
933
- commit('clusterId', null);
934
- commit('harvester/applyConfig', { baseUrl: null });
935
- throw new ClusterNotFoundError(id);
936
- }
937
-
938
- // Update the Steve client URLs
939
- commit('harvester/applyConfig', { baseUrl: virtualBase });
940
-
941
- await Promise.all([
942
- dispatch('harvester/loadSchemas', true),
943
- ]);
944
-
945
- dispatch('harvester/subscribe');
946
-
947
- let isRancher = false;
948
- const projectArgs = {
949
- type: MANAGEMENT.PROJECT,
950
- opt: {
951
- url: `${ MANAGEMENT.PROJECT }/${ escape(id) }`,
952
- watchNamespace: id
953
- }
954
- };
955
-
956
- if (getters['management/schemaFor'](MANAGEMENT.PROJECT)) {
957
- isRancher = true;
958
- }
959
-
960
- if (id !== 'local' && getters['harvester/schemaFor'](MANAGEMENT.SETTING)) { // multi-cluster
961
- const settings = await dispatch('harvester/findAll', {
962
- type: MANAGEMENT.SETTING,
963
- id: SETTING.SYSTEM_NAMESPACES,
964
- opt: { url: `${ virtualBase }/${ MANAGEMENT.SETTING }s/`, force: true }
965
- });
966
-
967
- const systemNamespaces = settings?.find(x => x.id === SETTING.SYSTEM_NAMESPACES);
968
-
969
- if (systemNamespaces) {
970
- const namespace = (systemNamespaces.value || systemNamespaces.default)?.split(',');
971
-
972
- commit('setSystemNamespaces', namespace);
973
- }
974
- }
975
-
976
- const hash = {
977
- projects: isRancher && dispatch('management/findAll', projectArgs),
978
- virtualCount: dispatch('harvester/findAll', { type: COUNT }),
979
- virtualNamespaces: dispatch('harvester/findAll', { type: NAMESPACE }),
980
- settings: dispatch('harvester/findAll', { type: HCI.SETTING }),
981
- };
982
-
983
- if (getters['harvester/schemaFor'](HCI.UPGRADE)) {
984
- hash.upgrades = dispatch('harvester/findAll', { type: HCI.UPGRADE });
985
- }
986
-
987
- const res = await allHash(hash);
988
-
989
- await dispatch('cleanNamespaces');
990
-
991
- const filters = getters['prefs/get'](NAMESPACE_FILTERS)?.[id];
992
-
993
- commit('updateNamespaces', {
994
- filters: filters || [ALL_USER],
995
- all: res.virtualNamespaces,
996
- ...getters
997
- });
998
-
999
- commit('clusterReady', true);
1000
-
1001
- console.log('Done loading virtual cluster.'); // eslint-disable-line no-console
1002
- },
1003
-
1004
827
  async cleanNamespaces({ getters, dispatch }) {
1005
828
  // Initialise / Remove any filters that the user no-longer has access to
1006
829
  await dispatch('management/findAll', { type: MANAGEMENT.CLUSTER }); // So they can be got byId below
package/store/prefs.js CHANGED
@@ -4,6 +4,11 @@ import { clone } from '@shell/utils/object';
4
4
  import { SETTING } from '@shell/config/settings';
5
5
 
6
6
  const definitions = {};
7
+ /**
8
+ * Key/value of prefrences are stored before login here and cookies due lack of access permission.
9
+ * Once user is logged in while setting asUserPreference, update stored before login Key/value to the backend in loadServer function.
10
+ */
11
+ let prefsBeforeLogin = {};
7
12
 
8
13
  export const create = function(name, def, opt = {}) {
9
14
  const parseJSON = opt.parseJSON === true;
@@ -243,7 +248,7 @@ export const mutations = {
243
248
  };
244
249
 
245
250
  export const actions = {
246
- async set({ dispatch, commit }, opt) {
251
+ async set({ dispatch, commit, rootGetters }, opt) {
247
252
  let { key, value } = opt; // eslint-disable-line prefer-const
248
253
  const definition = definitions[key];
249
254
  let server;
@@ -264,6 +269,15 @@ export const actions = {
264
269
  }
265
270
 
266
271
  if ( definition.asUserPreference ) {
272
+ const checkLogin = rootGetters['auth/loggedIn'];
273
+
274
+ // Check for login status
275
+ if (!checkLogin) {
276
+ prefsBeforeLogin[key] = value;
277
+
278
+ return;
279
+ }
280
+
267
281
  try {
268
282
  server = await dispatch('loadServer', key); // There's no watch on prefs, so get before set...
269
283
 
@@ -373,7 +387,9 @@ export const actions = {
373
387
  }
374
388
  },
375
389
 
376
- async loadServer({ state, dispatch, commit }, ignoreKey) {
390
+ async loadServer( {
391
+ state, dispatch, commit, rootState, rootGetters
392
+ }, ignoreKey) {
377
393
  let server = { data: {} };
378
394
 
379
395
  try {
@@ -399,6 +415,18 @@ export const actions = {
399
415
  return;
400
416
  }
401
417
 
418
+ // if prefsBeforeLogin has values from login page, update the backend
419
+ if (Object.keys(prefsBeforeLogin).length > 0) {
420
+ Object.keys(prefsBeforeLogin).forEach((key) => {
421
+ server.data[key] = prefsBeforeLogin[key];
422
+ });
423
+
424
+ await server.save({ redirectUnauthorized: false });
425
+
426
+ // Clear prefsBeforeLogin, as we have now saved theses
427
+ prefsBeforeLogin = {};
428
+ }
429
+
402
430
  for (const key in definitions) {
403
431
  const definition = definitions[key];
404
432
  let value = clone(server.data[key]);
package/store/type-map.js CHANGED
@@ -41,6 +41,7 @@
41
41
  // public, -- If true, show to all users. If false, only show when the Developer Tools pref is on (default true)
42
42
  // category, -- Group to show the product in for the nav hamburger menu
43
43
  // typeStoreMap, -- An object mapping types to the store that should be used to retrieve information about the type
44
+ // hideSystemResources -- Hide resources in namespaces where namespace.isSystem === true, or a namespace managed by fleet (per its annotation) and hide those namespaces from ns/project list and nsfilter (default false)
44
45
  // })
45
46
  //
46
47
  // externalLink(stringOrFn) The product has an external page (function gets context object
@@ -130,8 +131,7 @@ import {
130
131
  ensureRegex, escapeHtml, escapeRegex, ucFirst, pluralize
131
132
  } from '@shell/utils/string';
132
133
  import {
133
- importList, importDetail, importEdit, listProducts, loadProduct, importCustomPromptRemove, resolveList, resolveEdit, resolveWindowComponent, importWindowComponent, resolveDetail
134
-
134
+ importList, importDetail, importEdit, listProducts, loadProduct, importCustomPromptRemove, resolveList, resolveEdit, resolveWindowComponent, importWindowComponent, resolveDetail, importDialog
135
135
  } from '@shell/utils/dynamic-importer';
136
136
 
137
137
  import { NAME as EXPLORER } from '@shell/config/product/explorer';
@@ -167,7 +167,6 @@ export const IF_HAVE = {
167
167
  NO_PROJECT: 'no-project',
168
168
  NOT_V1_ISTIO: 'not-v1-istio',
169
169
  MULTI_CLUSTER: 'multi-cluster',
170
- HARVESTER_SINGLE_CLUSTER: 'harv-multi-cluster',
171
170
  NEUVECTOR_NAMESPACE: 'neuvector-namespace',
172
171
  };
173
172
 
@@ -217,7 +216,7 @@ export function DSL(store, product, module = 'type-map') {
217
216
  headers(type, headers) {
218
217
  headers.forEach((header) => {
219
218
  // If on the client, then use the value getter if there is one
220
- if (process.client && header.getValue) {
219
+ if (header.getValue) {
221
220
  header.value = header.getValue;
222
221
  }
223
222
 
@@ -1090,24 +1089,11 @@ export const getters = {
1090
1089
  };
1091
1090
  },
1092
1091
 
1093
- hasCustomPromptRemove(state, getters) {
1094
- return (rawType) => {
1095
- const type = getters.componentFor(rawType);
1096
-
1097
- const cache = state.cache.promptRemove;
1098
-
1099
- if ( cache[type] !== undefined ) {
1100
- return cache[type];
1101
- }
1102
-
1103
- try {
1104
- require.resolve(`@shell/promptRemove/${ type }`);
1105
- cache[type] = true;
1106
- } catch (e) {
1107
- cache[type] = false;
1108
- }
1092
+ hasCustomPromptRemove(state, getters, rootState) {
1093
+ return (rawType, subType) => {
1094
+ const key = getters.componentFor(rawType, subType);
1109
1095
 
1110
- return cache[type];
1096
+ return hasCustom(state, rootState, 'promptRemove', key, () => require.resolve(`@shell/promptRemove/${ key }`));
1111
1097
  };
1112
1098
  },
1113
1099
 
@@ -1125,6 +1111,12 @@ export const getters = {
1125
1111
  };
1126
1112
  },
1127
1113
 
1114
+ importDialog(state, getters, rootState) {
1115
+ return (rawType, subType) => {
1116
+ return loadExtension(rootState, 'dialog', getters.componentFor(rawType, subType), importDialog);
1117
+ };
1118
+ },
1119
+
1128
1120
  importList(state, getters, rootState) {
1129
1121
  return (rawType) => {
1130
1122
  return loadExtension(rootState, 'list', getters.componentFor(rawType), importList);
@@ -1143,11 +1135,9 @@ export const getters = {
1143
1135
  };
1144
1136
  },
1145
1137
 
1146
- importCustomPromptRemove(state, getters) {
1147
- return (rawType) => {
1148
- const type = getters.componentFor(rawType);
1149
-
1150
- return importCustomPromptRemove(type);
1138
+ importCustomPromptRemove(state, getters, rootState) {
1139
+ return (rawType, subType) => {
1140
+ return loadExtension(rootState, 'promptRemove', getters.componentFor(rawType, subType), importCustomPromptRemove);
1151
1141
  };
1152
1142
  },
1153
1143
 
@@ -1739,9 +1729,6 @@ function ifHave(getters, option) {
1739
1729
  case IF_HAVE.MULTI_CLUSTER: {
1740
1730
  return getters.isMultiCluster;
1741
1731
  }
1742
- case IF_HAVE.HARVESTER_SINGLE_CLUSTER: {
1743
- return getters.isSingleVirtualCluster;
1744
- }
1745
1732
  case IF_HAVE.NEUVECTOR_NAMESPACE: {
1746
1733
  return getters[`cluster/all`](NAMESPACE).find(n => n.metadata.name === NEU_VECTOR_NAMESPACE);
1747
1734
  }
File without changes
package/utils/cluster.js CHANGED
@@ -13,7 +13,7 @@ export function filterOnlyKubernetesClusters(mgmtClusters) {
13
13
 
14
14
  export function isHarvesterCluster(mgmtCluster) {
15
15
  // Use the provider if it is set otherwise use the label
16
- const provider = mgmtCluster?.status?.provider || mgmtCluster?.metadata?.labels?.[CAPI.PROVIDER];
16
+ const provider = mgmtCluster?.metadata?.labels?.[CAPI.PROVIDER] || mgmtCluster?.status?.provider;
17
17
 
18
18
  return provider === VIRTUAL_HARVESTER_PROVIDER;
19
19
  }
@@ -8,12 +8,7 @@ import { cronSchedule } from '@shell/utils/validators/cron-schedule';
8
8
  import { podAffinity } from '@shell/utils/validators/pod-affinity';
9
9
  import { roleTemplateRules } from '@shell/utils/validators/role-template';
10
10
  import { clusterName } from '@shell/utils/validators/cluster-name';
11
- import { isHttps, backupTarget } from '@shell/utils/validators/setting';
12
-
13
- import { imageUrl, fileRequired } from '@shell/utils/validators/vm-image';
14
-
15
- import { vmNetworks, vmDisks } from '@shell/utils/validators/vm';
16
- import { dataVolumeSize } from '@shell/utils/validators/vm-datavolumes';
11
+ import { isHttps } from '@shell/utils/validators/setting';
17
12
 
18
13
  /**
19
14
  * Custom validation functions beyond normal scalr types
@@ -36,10 +31,4 @@ export default {
36
31
  podAffinity,
37
32
  roleTemplateRules,
38
33
  isHttps,
39
- backupTarget,
40
- imageUrl,
41
- dataVolumeSize,
42
- vmNetworks,
43
- vmDisks,
44
- fileRequired,
45
34
  };
@@ -63,7 +63,7 @@ export function importDialog(name) {
63
63
  throw new Error('Name required');
64
64
  }
65
65
 
66
- return () => import(/* webpackChunkName: "dialog" */ `@shell/components/dialog/${name}`);
66
+ return () => import(/* webpackChunkName: "dialog" */ `@shell/dialog/${name}`);
67
67
  }
68
68
 
69
69
  export function importWindowComponent(name) {
@@ -11,38 +11,3 @@ export function isHttps(value, getters, errors, validatorArgs, displayKey) {
11
11
 
12
12
  return errors;
13
13
  }
14
-
15
- export function backupTarget(value, getters, errors, validatorArgs) {
16
- const t = getters['i18n/t'];
17
-
18
- const parseValue = JSON.parse(value);
19
- const type = parseValue.type;
20
-
21
- if (!type) {
22
- return errors;
23
- }
24
-
25
- if (type === 's3') {
26
- if (!parseValue.accessKeyId) {
27
- errors.push(t('validation.required', { key: 'accessKeyId' }));
28
- }
29
-
30
- if (!parseValue.secretAccessKey) {
31
- errors.push(t('validation.required', { key: 'secretAccessKey' }));
32
- }
33
-
34
- if (!parseValue.bucketRegion) {
35
- errors.push(t('validation.required', { key: 'bucketRegion' }));
36
- }
37
-
38
- if (!parseValue.bucketName) {
39
- errors.push(t('validation.required', { key: 'bucketName' }));
40
- }
41
- }
42
-
43
- if (!parseValue.endpoint) {
44
- errors.push(t('validation.required', { key: 'endpoint' }));
45
- }
46
-
47
- return errors;
48
- }