@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
@@ -2,7 +2,6 @@
2
2
  import { mapGetters } from 'vuex';
3
3
  import debounce from 'lodash/debounce';
4
4
  import { NORMAN, STEVE } from '@shell/config/types';
5
- import { NAME as VIRTUAL } from '@shell/config/product/harvester';
6
5
  import { ucFirst } from '@shell/utils/string';
7
6
  import { isMac } from '@shell/utils/platform';
8
7
  import Import from '@shell/components/Import';
@@ -13,7 +12,6 @@ import ClusterBadge from '@shell/components/ClusterBadge';
13
12
  import { LOGGED_OUT } from '@shell/config/query-params';
14
13
  import NamespaceFilter from './NamespaceFilter';
15
14
  import WorkspaceSwitcher from './WorkspaceSwitcher';
16
- import HarvesterUpgrade from './HarvesterUpgrade.vue';
17
15
  import TopLevelMenu from './TopLevelMenu';
18
16
  import Jump from './Jump';
19
17
  import { allHash } from '@shell/utils/promise';
@@ -31,7 +29,6 @@ export default {
31
29
  BrandImage,
32
30
  ClusterBadge,
33
31
  ClusterProviderIcon,
34
- HarvesterUpgrade
35
32
  },
36
33
 
37
34
  props: {
@@ -51,14 +48,14 @@ export default {
51
48
  kubeConfigCopying: false,
52
49
  searchShortcut,
53
50
  shellShortcut,
54
- VIRTUAL,
55
51
  LOGGED_OUT,
52
+ navHeaderRight: null
56
53
  };
57
54
  },
58
55
 
59
56
  computed: {
60
57
  ...mapGetters(['clusterReady', 'isExplorer', 'isMultiCluster', 'isRancher', 'currentCluster',
61
- 'currentProduct', 'backToRancherLink', 'backToRancherGlobalLink', 'pageActions', 'isSingleProduct', 'isVirtualCluster']),
58
+ 'currentProduct', 'backToRancherLink', 'backToRancherGlobalLink', 'pageActions', 'isSingleProduct']),
62
59
  ...mapGetters('type-map', ['activeProducts']),
63
60
 
64
61
  appName() {
@@ -94,12 +91,12 @@ export default {
94
91
  },
95
92
 
96
93
  showPreferencesLink() {
97
- return (this.$store.getters['management/schemaFor'](STEVE.PREFERENCE)?.resourceMethods || []).includes('PUT');
94
+ return (this.$store.getters['management/schemaFor'](STEVE.PREFERENCE, false, false)?.resourceMethods || []).includes('PUT');
98
95
  },
99
96
 
100
97
  showAccountAndApiKeyLink() {
101
98
  // Keep this simple for the moment and only check if the user can see tokens... plus the usual isRancher/isSingleProduct
102
- const canSeeTokens = this.$store.getters['rancher/schemaFor'](NORMAN.TOKEN);
99
+ const canSeeTokens = this.$store.getters['rancher/schemaFor'](NORMAN.TOKEN, false, false);
103
100
 
104
101
  return canSeeTokens && (this.isRancher || this.isSingleProduct);
105
102
  },
@@ -152,6 +149,7 @@ export default {
152
149
  }
153
150
  };
154
151
  },
152
+
155
153
  },
156
154
 
157
155
  watch: {
@@ -168,6 +166,8 @@ export default {
168
166
  window.addEventListener('resize', this.debouncedLayoutHeader);
169
167
 
170
168
  this.$nextTick(() => this.layoutHeader(null, true));
169
+
170
+ this.navHeaderRight = this.$plugin?.getDynamic('component', 'NavHeaderRight');
171
171
  },
172
172
 
173
173
  beforeDestroy() {
@@ -329,7 +329,8 @@ export default {
329
329
  <div class="spacer"></div>
330
330
 
331
331
  <div class="rd-header-right">
332
- <HarvesterUpgrade v-if="isVirtualCluster && currentProduct.name === VIRTUAL" />
332
+ <component :is="navHeaderRight" />
333
+
333
334
  <div
334
335
  v-if="(currentCluster || (currentProduct && currentProduct.customNamespaceFilter)) && !simple && (currentProduct.showNamespaceFilter || currentProduct.showWorkspaceSwitcher)"
335
336
  class="top"
@@ -457,7 +458,6 @@ export default {
457
458
  </div>
458
459
 
459
460
  <div class="header-spacer"></div>
460
-
461
461
  <div
462
462
  v-if="showUserMenu"
463
463
  class="user user-menu"
@@ -4,7 +4,6 @@ import { NAMESPACE_FILTERS, DEV } from '@shell/store/prefs';
4
4
  import { NAMESPACE, MANAGEMENT } from '@shell/config/types';
5
5
  import { sortBy } from '@shell/utils/sort';
6
6
  import { isArray, addObjects, findBy, filterBy } from '@shell/utils/array';
7
-
8
7
  import {
9
8
  NAMESPACE_FILTER_SPECIAL as SPECIAL,
10
9
  NAMESPACE_FILTER_ALL_USER as ALL_USER,
@@ -29,7 +28,7 @@ export default {
29
28
  },
30
29
 
31
30
  computed: {
32
- ...mapGetters(['isVirtualCluster', 'isMultiVirtualCluster', 'currentProduct']),
31
+ ...mapGetters(['currentProduct']),
33
32
 
34
33
  hasFilter() {
35
34
  return this.filter.length > 0;
@@ -97,7 +96,7 @@ export default {
97
96
  });
98
97
  }
99
98
 
100
- if (!this.isVirtualCluster) {
99
+ if (!this.currentProduct?.hideSystemResources) {
101
100
  out = [
102
101
  {
103
102
  id: ALL,
@@ -137,12 +136,16 @@ export default {
137
136
 
138
137
  namespaces = this.filterNamespaces(namespaces);
139
138
 
140
- if (this.$store.getters['isRancher'] || this.isMultiVirtualCluster) {
139
+ // isRancher = mgmt schemas are loaded and there's a project schema
140
+ if (this.$store.getters['isRancher']) {
141
141
  const cluster = this.$store.getters['currentCluster'];
142
142
  let projects = this.$store.getters['management/all'](
143
143
  MANAGEMENT.PROJECT
144
144
  );
145
145
 
146
+ projects = projects.filter((p) => {
147
+ return this.currentProduct?.hideSystemResources ? !p.isSystem && p.spec.clusterName === cluster.id : p.spec.clusterName === cluster.id;
148
+ });
146
149
  projects = sortBy(filterBy(projects, 'spec.clusterName', cluster.id), [
147
150
  'nameDisplay',
148
151
  ]);
@@ -1,6 +1,7 @@
1
1
  <script>
2
2
  import BrandImage from '@shell/components/BrandImage';
3
3
  import ClusterProviderIcon from '@shell/components/ClusterProviderIcon';
4
+ import LocaleSelector from '@shell/components/LocaleSelector';
4
5
  import { mapGetters } from 'vuex';
5
6
  import $ from 'jquery';
6
7
  import { CAPI, MANAGEMENT } from '@shell/config/types';
@@ -19,7 +20,9 @@ const UI_COMMIT = process.env.COMMIT || UNKNOWN;
19
20
 
20
21
  export default {
21
22
 
22
- components: { BrandImage, ClusterProviderIcon },
23
+ components: {
24
+ BrandImage, ClusterProviderIcon, LocaleSelector
25
+ },
23
26
 
24
27
  data() {
25
28
  const { displayVersion, fullVersion } = getVersionInfo(this.$store);
@@ -46,7 +49,6 @@ export default {
46
49
  ...mapGetters(['clusterId']),
47
50
  ...mapGetters(['clusterReady', 'isRancher', 'currentCluster', 'currentProduct']),
48
51
  ...mapGetters('type-map', ['activeProducts']),
49
- ...mapGetters('i18n', ['selectedLocaleLabel', 'availableLocales']),
50
52
  ...mapGetters({ features: 'features/get' }),
51
53
 
52
54
  value: {
@@ -108,14 +110,6 @@ export default {
108
110
 
109
111
  maxClustersToShow: mapPref(MENU_MAX_CLUSTERS),
110
112
 
111
- showLocale() {
112
- return Object.keys(this.availableLocales).length > 1 || this.dev;
113
- },
114
-
115
- showNone() {
116
- return !!process.env.dev && this.dev;
117
- },
118
-
119
113
  multiClusterApps() {
120
114
  const options = this.options;
121
115
 
@@ -151,7 +145,7 @@ export default {
151
145
 
152
146
  options() {
153
147
  const cluster = this.clusterId || this.$store.getters['defaultClusterId'];
154
-
148
+ // TODO plugin routes
155
149
  const entries = this.activeProducts.map((p) => {
156
150
  // Try product-specific index first
157
151
  const to = p.to || {
@@ -232,10 +226,6 @@ export default {
232
226
  this.setClusterListHeight(this.maxClustersToShow);
233
227
  });
234
228
  },
235
-
236
- switchLocale(locale) {
237
- this.$store.dispatch('i18n/switchTo', locale);
238
- },
239
229
  }
240
230
  };
241
231
  </script>
@@ -359,34 +349,7 @@ export default {
359
349
  v-html="displayVersion"
360
350
  />
361
351
  </div>
362
- <div v-if="showLocale">
363
- <v-popover
364
- popover-class="localeSelector"
365
- placement="top"
366
- trigger="click"
367
- >
368
- <a
369
- data-testid="locale-selector"
370
- class="locale-chooser"
371
- >
372
- {{ selectedLocaleLabel }}
373
- </a>
374
-
375
- <template slot="popover">
376
- <ul class="list-unstyled dropdown" style="margin: -1px;">
377
- <li v-if="showNone" v-t="'locale.none'" class="hand" @click="switchLocale('none')" />
378
- <li
379
- v-for="(label, name) in availableLocales"
380
- :key="name"
381
- class="hand"
382
- @click="switchLocale(name)"
383
- >
384
- {{ label }}
385
- </li>
386
- </ul>
387
- </template>
388
- </v-popover>
389
- </div>
352
+ <LocaleSelector></LocaleSelector>
390
353
  </div>
391
354
  </div>
392
355
  </transition>
@@ -13,7 +13,7 @@ import Select from '@shell/components/form/Select';
13
13
  import day from 'dayjs';
14
14
 
15
15
  import { escapeHtml, escapeRegex } from '@shell/utils/string';
16
- import { NAME as VIRTUAL } from '@shell/config/product/harvester';
16
+ import { HARVESTER_NAME as VIRTUAL } from '@shell/config/product/harvester-manager';
17
17
 
18
18
  import Socket, {
19
19
  EVENT_CONNECTED,
@@ -3,9 +3,60 @@ import { HARVESTER, MULTI_CLUSTER } from '@shell/store/features';
3
3
  import { DSL } from '@shell/store/type-map';
4
4
  import { STATE, NAME as NAME_COL, AGE, VERSION } from '@shell/config/table-headers';
5
5
  import { allHash } from '@shell/utils/promise';
6
+ import dynamicPluginLoader from '@shell/pkg/dynamic-plugin-loader';
7
+ import { BLANK_CLUSTER } from '@shell/store';
8
+
9
+ dynamicPluginLoader.register({
10
+ load: async({ route, store }) => {
11
+ // Check that we've either got here either
12
+ // - directly (page refresh/load -> have path but no name)
13
+ // - via router name (have name but no path)
14
+ let clusterId;
15
+ const pathParts = route.path.split('/');
16
+
17
+ if (pathParts?.[1] === HARVESTER_NAME && pathParts?.[3] ) {
18
+ clusterId = pathParts?.[3];
19
+ } else {
20
+ const nameParts = route.name?.split('-');
21
+
22
+ if (nameParts?.[0] === HARVESTER_NAME) {
23
+ clusterId = route.params?.cluster;
24
+ }
25
+ }
26
+
27
+ // If we have a cluster id, try to load the plugin via the harvester cluster's `loadClusterPlugin`
28
+ if (clusterId) {
29
+ const provClusters = await store.dispatch('management/findAll', { type: CAPI.RANCHER_CLUSTER });
30
+ const provCluster = provClusters.find(p => p.mgmt.id === clusterId);
31
+
32
+ if (provCluster) {
33
+ const harvCluster = await store.dispatch('management/create', {
34
+ ...provCluster,
35
+ type: HCI.CLUSTER
36
+ });
37
+
38
+ if (harvCluster) {
39
+ try {
40
+ await harvCluster.loadClusterPlugin();
41
+
42
+ return route;
43
+ } catch (err) {
44
+ // If we've failed to load the harvester plugin nav to the harvester cluster list (probably got here from a bookmarked
45
+ // harvester instance that hasn't been updated to serve a plugin)
46
+ console.error('Failed to load harvester package: ', typeof error === 'object' ? JSON.stringify(err) : err); // eslint-disable-line no-console
47
+
48
+ return harvesterClustersLocation;
49
+ }
50
+ }
51
+ }
52
+ }
53
+ }
54
+ });
6
55
 
7
56
  export const NAME = 'harvesterManager';
8
57
 
58
+ export const HARVESTER_NAME = 'harvester';
59
+
9
60
  const MACHINE_POOLS = {
10
61
  name: 'summary',
11
62
  labelKey: 'tableHeaders.machines',
@@ -16,6 +67,15 @@ const MACHINE_POOLS = {
16
67
  width: 100,
17
68
  };
18
69
 
70
+ const harvesterClustersLocation = {
71
+ name: 'c-cluster-product-resource',
72
+ params: {
73
+ cluster: BLANK_CLUSTER,
74
+ product: NAME,
75
+ resource: HCI.CLUSTER
76
+ }
77
+ };
78
+
19
79
  export function init(store) {
20
80
  const {
21
81
  product,
@@ -33,6 +93,7 @@ export function init(store) {
33
93
  removable: false,
34
94
  showClusterSwitcher: false,
35
95
  weight: 100,
96
+ to: harvesterClustersLocation,
36
97
  });
37
98
 
38
99
  configureType(HCI.CLUSTER, { showListMasthead: false });
@@ -41,7 +102,8 @@ export function init(store) {
41
102
  NAME_COL,
42
103
  {
43
104
  ...VERSION,
44
- value: 'kubernetesVersion'
105
+ value: 'kubernetesVersion',
106
+ getValue: row => row.kubernetesVersion
45
107
  },
46
108
  MACHINE_POOLS,
47
109
  AGE,
@@ -54,7 +116,7 @@ export function init(store) {
54
116
  ]);
55
117
  basicType([HCI.CLUSTER]);
56
118
  spoofedType({
57
- label: store.getters['i18n/t']('harvester.manager.cluster.label'),
119
+ label: store.getters['i18n/t']('harvesterManager.cluster.label'),
58
120
  name: HCI.CLUSTER,
59
121
  type: HCI.CLUSTER,
60
122
  namespaced: false,
@@ -7,6 +7,7 @@ import {
7
7
  } from '@shell/config/types';
8
8
  import { MULTI_CLUSTER } from '@shell/store/features';
9
9
  import { DSL } from '@shell/store/type-map';
10
+ import { BLANK_CLUSTER } from '@shell/store';
10
11
 
11
12
  export const NAME = 'manager';
12
13
 
@@ -28,6 +29,14 @@ export function init(store) {
28
29
  icon: 'cluster-management',
29
30
  removable: false,
30
31
  showClusterSwitcher: false,
32
+ to: {
33
+ name: 'c-cluster-product-resource',
34
+ params: {
35
+ cluster: BLANK_CLUSTER,
36
+ product: NAME,
37
+ resource: CAPI.RANCHER_CLUSTER
38
+ }
39
+ },
31
40
  });
32
41
 
33
42
  virtualType({
@@ -1,5 +1,6 @@
1
1
  // Settings
2
2
  import { MANAGEMENT } from './types';
3
+
3
4
  // Adapted from: https://github.com/rancher/ui/blob/08c379a9529f740666a704b52522a468986c3520/lib/shared/addon/utils/constants.js#L564
4
5
  // Setting IDs
5
6
  export const SETTING = {
@@ -15,12 +16,12 @@ export const SETTING = {
15
16
  API_HOST: 'api-host',
16
17
  CA_CERTS: 'cacerts',
17
18
 
18
- // Allow the local cluste to be hidden
19
+ // Allow the local cluster to be hidden
19
20
  HIDE_LOCAL_CLUSTER: 'hide-local-cluster',
20
21
  AUTH_TOKEN_MAX_TTL_MINUTES: 'auth-token-max-ttl-minutes',
21
22
  KUBECONFIG_GENERATE_TOKEN: 'kubeconfig-generate-token',
22
23
  KUBECONFIG_TOKEN_TTL_MINUTES: 'kubeconfig-token-ttl-minutes',
23
- KUBECONFIG_DEFAULT_TOKEN_TTL_MINUTES: 'kubeconfig-default-token-ttl-minutes',
24
+ KUBECONFIG_DEFAULT_TOKEN_TTL_MINUTES: 'kubeconfig-default-token-ttl-minutes',
24
25
  ENGINE_URL: 'engine-install-url',
25
26
  ENGINE_ISO_URL: 'engine-iso-url',
26
27
  FIRST_LOGIN: 'first-login',
@@ -33,9 +34,11 @@ export const SETTING = {
33
34
  AUTH_USER_SESSION_TTL_MINUTES: 'auth-user-session-ttl-minutes',
34
35
  AUTH_USER_INFO_RESYNC_CRON: 'auth-user-info-resync-cron',
35
36
  AUTH_LOCAL_VALIDATE_DESC: 'auth-password-requirements-description',
37
+ CATTLE_PASSWORD_MIN_LENGTH: 'password-min-length',
36
38
  CLUSTER_TEMPLATE_ENFORCEMENT: 'cluster-template-enforcement',
37
39
  UI_INDEX: 'ui-index',
38
40
  UI_DASHBOARD_INDEX: 'ui-dashboard-index',
41
+ UI_DASHBOARD_HARVESTER_LEGACY_PLUGIN: 'ui-dashboard-harvester-legacy-plugin',
39
42
  UI_OFFLINE_PREFERRED: 'ui-offline-preferred',
40
43
  SYSTEM_DEFAULT_REGISTRY: 'system-default-registry',
41
44
  UI_ISSUES: 'ui-issues',
@@ -63,11 +66,9 @@ export const SETTING = {
63
66
  // These are the settings that are allowed to be edited via the UI
64
67
  export const ALLOWED_SETTINGS = {
65
68
  [SETTING.CA_CERTS]: { kind: 'multiline', readOnly: true },
66
- // [SETTING.CLUSTER_DEFAULTS]: { kind: 'json' },
67
69
  [SETTING.ENGINE_URL]: {},
68
70
  [SETTING.ENGINE_ISO_URL]: {},
69
- // [SETTING.PL]: {},
70
- // [SETTING.ISSUES]: {},
71
+ [SETTING.CATTLE_PASSWORD_MIN_LENGTH]: { kind: 'integer' },
71
72
  [SETTING.INGRESS_IP_DOMAIN]: {},
72
73
  [SETTING.AUTH_USER_INFO_MAX_AGE_SECONDS]: {},
73
74
  [SETTING.AUTH_USER_SESSION_TTL_MINUTES]: {},
@@ -78,7 +79,6 @@ export const ALLOWED_SETTINGS = {
78
79
  [SETTING.AUTH_USER_INFO_RESYNC_CRON]: {},
79
80
  [SETTING.SERVER_URL]: { kind: 'url', canReset: true },
80
81
  [SETTING.RKE_METADATA_CONFIG]: { kind: 'json' },
81
- // [SETTING.BANNERS]: { kind: 'json' },
82
82
  [SETTING.SYSTEM_DEFAULT_REGISTRY]: {},
83
83
  [SETTING.UI_INDEX]: {},
84
84
  [SETTING.UI_DASHBOARD_INDEX]: {},
@@ -94,74 +94,19 @@ export const ALLOWED_SETTINGS = {
94
94
  },
95
95
  [SETTING.HIDE_LOCAL_CLUSTER]: { kind: 'boolean' },
96
96
  };
97
- // harvester Settings ID
98
- export const HCI_SETTING = {
99
- BACKUP_TARGET: 'backup-target',
100
- LOG_LEVEL: 'log-level',
101
- SERVER_VERSION: 'server-version',
102
- UI_INDEX: 'ui-index',
103
- UPGRADE_CHECKER_ENABLED: 'upgrade-checker-enabled',
104
- UPGRADE_CHECKER_URL: 'upgrade-checker-url',
105
- VLAN: 'vlan',
106
- UI_SOURCE: 'ui-source',
107
- HTTP_PROXY: 'http-proxy',
108
- ADDITIONAL_CA: 'additional-ca',
109
- OVERCOMMIT_CONFIG: 'overcommit-config',
110
- CLUSTER_REGISTRATION_URL: 'cluster-registration-url',
111
- DEFAULT_STORAGE_CLASS: 'default-storage-class',
112
- VIP: 'vip-pools',
113
- SUPPORT_BUNDLE_TIMEOUT: 'support-bundle-timeout',
114
- SUPPORT_BUNDLE_IMAGE: 'support-bundle-image',
115
- VM_FORCE_RESET_POLICY: 'vm-force-reset-policy',
116
- SSL_CERTIFICATES: 'ssl-certificates',
117
- SSL_PARAMETERS: 'ssl-parameters',
118
- SUPPORT_BUNDLE_NAMESPACES: 'support-bundle-namespaces',
119
- AUTO_DISK_PROVISION_PATHS: 'auto-disk-provision-paths',
120
- RANCHER_MONITORING: 'fleet-local/rancher-monitoring',
121
- RELEASE_DOWNLOAD_URL: 'release-download-url'
122
- };
123
- export const HCI_ALLOWED_SETTINGS = {
124
- [HCI_SETTING.BACKUP_TARGET]: { kind: 'json', from: 'import' },
125
- [HCI_SETTING.LOG_LEVEL]: {
126
- kind: 'enum',
127
- options: ['info', 'debug', 'trace']
128
- },
129
- [HCI_SETTING.VLAN]: {
130
- kind: 'custom', from: 'import', alias: 'vlan'
131
- },
132
- [HCI_SETTING.SERVER_VERSION]: { readOnly: true },
133
- [HCI_SETTING.UPGRADE_CHECKER_ENABLED]: { kind: 'boolean' },
134
- [HCI_SETTING.UPGRADE_CHECKER_URL]: { kind: 'url' },
135
- [HCI_SETTING.HTTP_PROXY]: { kind: 'json', from: 'import' },
136
- [HCI_SETTING.ADDITIONAL_CA]: {
137
- kind: 'multiline', canReset: true, from: 'import'
138
- },
139
- [HCI_SETTING.OVERCOMMIT_CONFIG]: { kind: 'json', from: 'import' },
140
- [HCI_SETTING.SUPPORT_BUNDLE_TIMEOUT]: {},
141
- [HCI_SETTING.SUPPORT_BUNDLE_IMAGE]: { kind: 'json', from: 'import' },
142
- [HCI_SETTING.VM_FORCE_RESET_POLICY]: { kind: 'json', from: 'import' },
143
- [HCI_SETTING.SSL_CERTIFICATES]: { kind: 'json', from: 'import' },
144
- [HCI_SETTING.VIP]: {
145
- kind: 'json', from: 'import', canReset: true
146
- },
147
- [HCI_SETTING.SSL_PARAMETERS]: {
148
- kind: 'json', from: 'import', canReset: true
149
- },
150
- [HCI_SETTING.SUPPORT_BUNDLE_NAMESPACES]: { from: 'import', canReset: true },
151
- [HCI_SETTING.AUTO_DISK_PROVISION_PATHS]: { canReset: true },
152
- [HCI_SETTING.RANCHER_MONITORING]: {
153
- kind: 'custom', from: 'import', canReset: true, customFormatter: 'json', alias: 'harvester-monitoring'
97
+
98
+ export const DEFAULT_PERF_SETTING = {
99
+ incrementalLoading: {
100
+ enabled: true,
101
+ threshold: 1500,
154
102
  },
155
- [HCI_SETTING.RELEASE_DOWNLOAD_URL]: { kind: 'url' },
156
- };
157
- export const HCI_SINGLE_CLUSTER_ALLOWED_SETTING = {
158
- [HCI_SETTING.UI_SOURCE]: {
159
- kind: 'enum',
160
- options: ['auto', 'external', 'bundled']
103
+ manualRefresh: {
104
+ enabled: false,
105
+ threshold: 1500,
161
106
  },
162
- [HCI_SETTING.UI_INDEX]: { kind: 'url' },
163
- [HCI_SETTING.CLUSTER_REGISTRATION_URL]: { kind: 'url' },
107
+ disableWebsocketNotification: false
164
108
  };
109
+
165
110
  export const fetchOrCreateSetting = async(store, id, val, save = true) => {
166
111
  let setting;
167
112
 
@@ -181,6 +126,7 @@ export const fetchOrCreateSetting = async(store, id, val, save = true) => {
181
126
 
182
127
  return setting;
183
128
  };
129
+
184
130
  export const setSetting = async(store, id, val) => {
185
131
  const setting = await fetchOrCreateSetting(store, id, val, false);
186
132
 
@@ -870,7 +870,6 @@ export const FEATURE_DESCRIPTION = {
870
870
  value: 'status.description',
871
871
  align: 'left',
872
872
  sort: ['status.description'],
873
- width: 300,
874
873
  formatter: 'Translate',
875
874
  formatterOpts: { prefix: 'featureFlags.description' },
876
875
  };
package/config/types.js CHANGED
@@ -79,7 +79,8 @@ export const WORKLOAD_TYPES = {
79
79
  JOB: 'batch.job',
80
80
  STATEFUL_SET: 'apps.statefulset',
81
81
  REPLICA_SET: 'apps.replicaset',
82
- REPLICATION_CONTROLLER: 'replicationcontroller'
82
+ REPLICATION_CONTROLLER: 'replicationcontroller',
83
+ POD: 'pod'
83
84
  };
84
85
 
85
86
  const {
@@ -169,7 +170,9 @@ export const MANAGEMENT = {
169
170
  POD_SECURITY_POLICY_TEMPLATE: 'management.cattle.io.podsecuritypolicytemplate',
170
171
  MANAGED_CHART: 'management.cattle.io.managedchart',
171
172
  USER_NOTIFICATION: 'management.cattle.io.rancherusernotification',
172
- GLOBAL_DNS_PROVIDER: 'management.cattle.io.globaldnsprovider'
173
+ GLOBAL_DNS_PROVIDER: 'management.cattle.io.globaldnsprovider',
174
+ RKE_TEMPLATE: 'management.cattle.io.clustertemplate',
175
+ RKE_TEMPLATE_REVISION: 'management.cattle.io.clustertemplaterevision',
173
176
  };
174
177
 
175
178
  export const CAPI = {
@@ -265,30 +268,9 @@ export const VIRTUAL_TYPES = {
265
268
 
266
269
  // harvester
267
270
  export const HCI = {
268
- VM: 'kubevirt.io.virtualmachine',
269
- VMI: 'kubevirt.io.virtualmachineinstance',
270
- VMIM: 'kubevirt.io.virtualmachineinstancemigration',
271
- VM_TEMPLATE: 'harvesterhci.io.virtualmachinetemplate',
272
- VM_VERSION: 'harvesterhci.io.virtualmachinetemplateversion',
273
- IMAGE: 'harvesterhci.io.virtualmachineimage',
274
- SSH: 'harvesterhci.io.keypair',
275
- VOLUME: 'harvesterhci.io.volume',
276
- USER: 'harvesterhci.io.user',
277
- SETTING: 'harvesterhci.io.setting',
278
- UPGRADE: 'harvesterhci.io.upgrade',
279
- BACKUP: 'harvesterhci.io.virtualmachinebackup',
280
- RESTORE: 'harvesterhci.io.virtualmachinerestore',
281
- NODE_NETWORK: 'network.harvesterhci.io.nodenetwork',
282
- CLUSTER_NETWORK: 'network.harvesterhci.io.clusternetwork',
283
- SUPPORT_BUNDLE: 'harvesterhci.io.supportbundle',
284
- NETWORK_ATTACHMENT: 'harvesterhci.io.networkattachmentdefinition',
285
- CLUSTER: 'harvesterhci.io.management.cluster',
286
- DASHBOARD: 'harvesterhci.io.dashboard',
287
- BLOCK_DEVICE: 'harvesterhci.io.blockdevice',
288
- CLOUD_TEMPLATE: 'harvesterhci.io.cloudtemplate',
289
- HOST: 'harvesterhci.io.host',
290
- VERSION: 'harvesterhci.io.version',
291
- MANAGED_CHART: 'harvesterhci.io.managedchart',
271
+ CLUSTER: 'harvesterhci.io.management.cluster',
272
+ DASHBOARD: 'harvesterhci.io.dashboard',
273
+ IMAGE: 'harvesterhci.io.virtualmachineimage',
292
274
  };
293
275
 
294
276
  export const VIRTUAL_HARVESTER_PROVIDER = 'harvester';