@rancher/shell 0.1.2 → 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 (258) hide show
  1. package/assets/translations/en-us.yaml +27 -769
  2. package/assets/translations/zh-hans.yaml +8 -769
  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 +18 -11
  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/WorkloadPorts.vue +1 -1
  24. package/components/formatter/WorkloadHealthScale.vue +1 -1
  25. package/components/nav/Header.vue +9 -9
  26. package/components/nav/NamespaceFilter.vue +7 -4
  27. package/components/nav/TopLevelMenu.vue +6 -43
  28. package/components/nav/WindowManager/ContainerLogs.vue +1 -1
  29. package/config/product/harvester-manager.js +64 -2
  30. package/config/product/manager.js +9 -0
  31. package/config/settings.js +17 -71
  32. package/config/table-headers.js +0 -1
  33. package/config/types.js +5 -25
  34. package/core/plugin-routes.ts +34 -22
  35. package/core/plugin.ts +15 -3
  36. package/core/plugins-loader.js +2 -0
  37. package/core/plugins.js +79 -36
  38. package/core/types.ts +7 -1
  39. package/detail/provisioning.cattle.io.cluster.vue +13 -0
  40. package/detail/workload/index.vue +11 -5
  41. package/{components/dialog → dialog}/AddClusterMemberDialog.vue +0 -0
  42. package/{components/dialog → dialog}/AddCustomBadgeDialog.vue +0 -0
  43. package/{components/dialog → dialog}/AddProjectMemberDialog.vue +0 -0
  44. package/{components/dialog → dialog}/AddonConfigConfirmationDialog.vue +0 -0
  45. package/{components/dialog → dialog}/DrainNode.vue +0 -0
  46. package/{components/dialog → dialog}/ForceMachineRemoveDialog.vue +0 -0
  47. package/{components/dialog → dialog}/GenericPrompt.vue +0 -0
  48. package/{components/dialog → dialog}/RollbackWorkloadDialog.vue +0 -0
  49. package/{components/dialog → dialog}/RotateCertificatesDialog.vue +0 -0
  50. package/{components/dialog → dialog}/RotateEncryptionKeyDialog.vue +0 -0
  51. package/{components/dialog → dialog}/SaveAsRKETemplateDialog.vue +0 -0
  52. package/{components/dialog → dialog}/ScaleMachineDownDialog.vue +0 -0
  53. package/edit/auth/azuread.vue +20 -1
  54. package/edit/management.cattle.io.project.vue +2 -2
  55. package/edit/namespace.vue +17 -10
  56. package/edit/persistentvolumeclaim.vue +1 -0
  57. package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +1 -1
  58. package/edit/provisioning.cattle.io.cluster/MachinePool.vue +33 -5
  59. package/edit/service.vue +1 -1
  60. package/edit/workload/index.vue +363 -15
  61. package/edit/workload/mixins/workload.js +62 -7
  62. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +1 -0
  63. package/layouts/default.vue +52 -27
  64. package/layouts/error.vue +5 -1
  65. package/layouts/home.vue +6 -2
  66. package/list/harvesterhci.io.management.cluster.vue +74 -33
  67. package/list/namespace.vue +3 -5
  68. package/machine-config/amazonec2.vue +2 -0
  69. package/machine-config/harvester.vue +96 -49
  70. package/middleware/authenticated.js +56 -52
  71. package/mixins/form-validation.js +1 -1
  72. package/mixins/resource-fetch.js +3 -1
  73. package/models/fleet.cattle.io.bundle.js +26 -19
  74. package/models/harvesterhci.io.management.cluster.js +194 -5
  75. package/models/management.cattle.io.cluster.js +1 -1
  76. package/models/management.cattle.io.clusterroletemplatebinding.js +9 -0
  77. package/models/management.cattle.io.project.js +23 -2
  78. package/models/namespace.js +19 -3
  79. package/models/pod.js +19 -2
  80. package/models/provisioning.cattle.io.cluster.js +4 -0
  81. package/models/workload.js +4 -243
  82. package/models/workload.service.js +314 -0
  83. package/nuxt.config.js +11 -9
  84. package/package.json +3 -3
  85. package/pages/auth/login.vue +11 -2
  86. package/pages/auth/setup.vue +1 -1
  87. package/pages/c/_cluster/_product/members/index.vue +3 -93
  88. package/pages/c/_cluster/_product/projectsnamespaces.vue +6 -403
  89. package/pages/c/_cluster/settings/performance.vue +19 -16
  90. package/pages/fail-whale.vue +1 -10
  91. package/pages/index.vue +18 -4
  92. package/pages/plugins.vue +2 -2
  93. package/pages/prefs.vue +8 -6
  94. package/pkg/auto-import.js +44 -7
  95. package/pkg/dynamic-plugin-loader.js +28 -0
  96. package/pkg/import.js +2 -2
  97. package/pkg/model-loader-require.lib.js +3 -0
  98. package/pkg/vue.config.js +9 -6
  99. package/plugins/dashboard-store/model-loader-require.js +12 -0
  100. package/plugins/dashboard-store/model-loader.js +4 -1
  101. package/plugins/dashboard-store/resource-class.js +10 -3
  102. package/plugins/steve/actions.js +1 -1
  103. package/plugins/steve/index.js +6 -4
  104. package/plugins/steve/subscribe.js +34 -23
  105. package/rancher-components/Form/Checkbox/Checkbox.test.ts +77 -0
  106. package/rancher-components/Form/Checkbox/Checkbox.vue +12 -2
  107. package/scripts/build-pkg.sh +48 -2
  108. package/scripts/drone-build-pkg.sh +31 -0
  109. package/scripts/publish-shell.sh +10 -11
  110. package/scripts/serve-pkgs +17 -10
  111. package/store/catalog.js +3 -1
  112. package/store/i18n.js +16 -11
  113. package/store/index.js +4 -181
  114. package/store/prefs.js +30 -2
  115. package/store/type-map.js +16 -29
  116. package/utils/cluster.js +1 -1
  117. package/utils/custom-validators.js +1 -12
  118. package/utils/dynamic-importer.js +1 -1
  119. package/utils/validators/setting.js +0 -35
  120. package/components/FilterLabel.vue +0 -254
  121. package/components/HarvesterUpgradeProgressBarList.vue +0 -109
  122. package/components/VMConsoleBar.vue +0 -87
  123. package/components/dialog/harvester/AddHotplugModal.vue +0 -159
  124. package/components/dialog/harvester/BackupModal.vue +0 -117
  125. package/components/dialog/harvester/CloneTemplate.vue +0 -125
  126. package/components/dialog/harvester/EjectCDROMDialog.vue +0 -157
  127. package/components/dialog/harvester/ExportImageDialog.vue +0 -152
  128. package/components/dialog/harvester/MaintenanceDialog.vue +0 -94
  129. package/components/dialog/harvester/MigrationDialog.vue +0 -154
  130. package/components/dialog/harvester/RestoreDialog.vue +0 -153
  131. package/components/dialog/harvester/SupportBundle.vue +0 -217
  132. package/components/dialog/harvester/UnplugVolume.vue +0 -108
  133. package/components/form/SerialConsole/index.vue +0 -267
  134. package/components/formatter/AttachVMWithName.vue +0 -46
  135. package/components/formatter/CloudInitType.vue +0 -27
  136. package/components/formatter/HarvesterBackupTargetValidation.vue +0 -43
  137. package/components/formatter/HarvesterCPUUsed.vue +0 -122
  138. package/components/formatter/HarvesterDiskState.vue +0 -66
  139. package/components/formatter/HarvesterHostName.vue +0 -66
  140. package/components/formatter/HarvesterIpAddress.vue +0 -90
  141. package/components/formatter/HarvesterMemoryUsed.vue +0 -140
  142. package/components/formatter/HarvesterMigrationState.vue +0 -85
  143. package/components/formatter/HarvesterNodeName.vue +0 -49
  144. package/components/formatter/HarvesterStorageUsed.vue +0 -194
  145. package/components/formatter/HarvesterVmState.vue +0 -123
  146. package/components/nav/HarvesterUpgrade.vue +0 -232
  147. package/components/novnc/NovncConsole.vue +0 -93
  148. package/components/novnc/NovncConsoleItem.vue +0 -89
  149. package/components/novnc/NovncConsoleWrapper.vue +0 -243
  150. package/config/harvester-map.js +0 -44
  151. package/config/harvester-table-headers.js +0 -27
  152. package/config/product/harvester.js +0 -305
  153. package/detail/harvesterhci.io.host/HarvesterHostBasic.vue +0 -364
  154. package/detail/harvesterhci.io.host/HarvesterHostDisk.vue +0 -200
  155. package/detail/harvesterhci.io.host/HarvesterHostNetwork.vue +0 -89
  156. package/detail/harvesterhci.io.host/VirtualMachineInstance.vue +0 -134
  157. package/detail/harvesterhci.io.host/index.vue +0 -243
  158. package/detail/harvesterhci.io.virtualmachinebackup/index.vue +0 -221
  159. package/detail/harvesterhci.io.virtualmachineimage.vue +0 -118
  160. package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineBasics.vue +0 -279
  161. package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineEvents.vue +0 -75
  162. package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineKeypairs.vue +0 -114
  163. package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineMigration.vue +0 -79
  164. package/detail/kubevirt.io.virtualmachine/index.vue +0 -213
  165. package/edit/harvesterhci.io.cloudtemplate.vue +0 -123
  166. package/edit/harvesterhci.io.host/HarvesterDisk.vue +0 -262
  167. package/edit/harvesterhci.io.host/index.vue +0 -533
  168. package/edit/harvesterhci.io.keypair.vue +0 -112
  169. package/edit/harvesterhci.io.managedchart/index.vue +0 -25
  170. package/edit/harvesterhci.io.managedchart/rancher-monitoring.vue +0 -172
  171. package/edit/harvesterhci.io.networkattachmentdefinition.vue +0 -210
  172. package/edit/harvesterhci.io.setting/additional-ca.vue +0 -36
  173. package/edit/harvesterhci.io.setting/backup-target.vue +0 -182
  174. package/edit/harvesterhci.io.setting/http-proxy.vue +0 -79
  175. package/edit/harvesterhci.io.setting/index.vue +0 -201
  176. package/edit/harvesterhci.io.setting/overcommit-config.vue +0 -94
  177. package/edit/harvesterhci.io.setting/ssl-certificates.vue +0 -117
  178. package/edit/harvesterhci.io.setting/ssl-parameters.vue +0 -161
  179. package/edit/harvesterhci.io.setting/support-bundle-image.vue +0 -134
  180. package/edit/harvesterhci.io.setting/support-bundle-namespaces.vue +0 -73
  181. package/edit/harvesterhci.io.setting/vip-pools.vue +0 -244
  182. package/edit/harvesterhci.io.setting/vm-force-reset-policy.vue +0 -81
  183. package/edit/harvesterhci.io.virtualmachinebackup.vue +0 -256
  184. package/edit/harvesterhci.io.virtualmachineimage.vue +0 -364
  185. package/edit/harvesterhci.io.virtualmachinetemplateversion.vue +0 -340
  186. package/edit/harvesterhci.io.volume.vue +0 -195
  187. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/AccessCredentialsUsers.vue +0 -190
  188. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/index.vue +0 -212
  189. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/type/basicAuth.vue +0 -94
  190. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/type/sshkey.vue +0 -85
  191. package/edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/DataTemplate.vue +0 -153
  192. package/edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/index.vue +0 -279
  193. package/edit/kubevirt.io.virtualmachine/VirtualMachineCpuMemory.vue +0 -113
  194. package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/__tests__/HarvesterEditNetwork.test.ts +0 -41
  195. package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/base.vue +0 -281
  196. package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/index.vue +0 -142
  197. package/edit/kubevirt.io.virtualmachine/VirtualMachineReserved.vue +0 -54
  198. package/edit/kubevirt.io.virtualmachine/VirtualMachineSSHKey.vue +0 -256
  199. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/index.vue +0 -391
  200. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditContainer.test.ts +0 -40
  201. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditExisting.test.ts +0 -102
  202. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditVMImage.test.ts +0 -117
  203. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditVolume.test.ts +0 -74
  204. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/container.vue +0 -132
  205. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/existing.vue +0 -303
  206. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/vmImage.vue +0 -285
  207. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/volume.vue +0 -188
  208. package/edit/kubevirt.io.virtualmachine/index.vue +0 -642
  209. package/edit/network.harvesterhci.io.clusternetwork/index.vue +0 -19
  210. package/edit/network.harvesterhci.io.clusternetwork/vlan.vue +0 -134
  211. package/edit/workload/types/Deployment.vue +0 -377
  212. package/edit/workload/types/Generic.vue +0 -295
  213. package/list/harvesterhci.io.cloudtemplate.vue +0 -78
  214. package/list/harvesterhci.io.dashboard/HarvesterUpgrade.vue +0 -211
  215. package/list/harvesterhci.io.dashboard/UpgradeInfo.vue +0 -40
  216. package/list/harvesterhci.io.dashboard/index.vue +0 -752
  217. package/list/harvesterhci.io.host/index.vue +0 -186
  218. package/list/harvesterhci.io.networkattachmentdefinition.vue +0 -167
  219. package/list/harvesterhci.io.setting.vue +0 -241
  220. package/list/harvesterhci.io.virtualmachinebackup.vue +0 -172
  221. package/list/harvesterhci.io.virtualmachineimage.vue +0 -80
  222. package/list/harvesterhci.io.virtualmachinetemplateversion.vue +0 -173
  223. package/list/harvesterhci.io.volume.vue +0 -122
  224. package/list/kubevirt.io.virtualmachine.vue +0 -193
  225. package/mixins/harvester-vm/impl.js +0 -267
  226. package/mixins/harvester-vm/index.js +0 -1357
  227. package/models/harvester/configmap.js +0 -32
  228. package/models/harvester/harvesterhci.io.blockdevice.js +0 -55
  229. package/models/harvester/harvesterhci.io.keypair.js +0 -12
  230. package/models/harvester/harvesterhci.io.setting.js +0 -127
  231. package/models/harvester/harvesterhci.io.supportbundle.js +0 -35
  232. package/models/harvester/harvesterhci.io.upgrade.js +0 -226
  233. package/models/harvester/harvesterhci.io.virtualmachinebackup.js +0 -116
  234. package/models/harvester/harvesterhci.io.virtualmachineimage.js +0 -255
  235. package/models/harvester/harvesterhci.io.virtualmachinerestore.js +0 -43
  236. package/models/harvester/harvesterhci.io.virtualmachinetemplate.js +0 -69
  237. package/models/harvester/harvesterhci.io.virtualmachinetemplateversion.js +0 -227
  238. package/models/harvester/k8s.cni.cncf.io.networkattachmentdefinition.js +0 -32
  239. package/models/harvester/kubevirt.io.virtualmachine.js +0 -850
  240. package/models/harvester/kubevirt.io.virtualmachineinstance.js +0 -142
  241. package/models/harvester/management.cattle.io.managedchart.js +0 -191
  242. package/models/harvester/management.cattle.io.setting.js +0 -40
  243. package/models/harvester/network.harvesterhci.io.clusternetwork.js +0 -100
  244. package/models/harvester/network.harvesterhci.io.nodenetwork.js +0 -34
  245. package/models/harvester/node.js +0 -255
  246. package/models/harvester/persistentvolumeclaim.js +0 -166
  247. package/models/harvester/pod.js +0 -185
  248. package/pages/c/_cluster/harvester/airgapupgrade/index.vue +0 -309
  249. package/pages/c/_cluster/harvester/console/_uid/serial.vue +0 -51
  250. package/pages/c/_cluster/harvester/console/_uid/vnc.vue +0 -52
  251. package/pages/c/_cluster/harvester/index.vue +0 -24
  252. package/pages/c/_cluster/harvester/support/index.vue +0 -154
  253. package/pkg/model-loader.lib.js +0 -3
  254. package/promptRemove/kubevirt.io.virtualmachine.vue +0 -164
  255. package/store/harvester-common.js +0 -126
  256. package/utils/validators/vm-datavolumes.js +0 -38
  257. package/utils/validators/vm-image.js +0 -32
  258. package/utils/validators/vm.js +0 -221
@@ -1,32 +0,0 @@
1
- import { clone } from '@shell/utils/object';
2
- import { HCI } from '@shell/config/types';
3
- import SteveModel from '@shell/plugins/steve/steve-class';
4
-
5
- export default class HciConfigMap extends SteveModel {
6
- get detailLocation() {
7
- const detailLocation = clone(this._detailLocation);
8
-
9
- detailLocation.params.resource = HCI.CLOUD_TEMPLATE;
10
-
11
- return detailLocation;
12
- }
13
-
14
- get doneOverride() {
15
- const detailLocation = clone(this._detailLocation);
16
-
17
- delete detailLocation.params.namespace;
18
- delete detailLocation.params.id;
19
- detailLocation.params.resource = HCI.CLOUD_TEMPLATE;
20
- detailLocation.name = 'c-cluster-product-resource';
21
-
22
- return detailLocation;
23
- }
24
-
25
- get parentNameOverride() {
26
- return this.$rootGetters['i18n/t'](`typeLabel."${ HCI.CLOUD_TEMPLATE }"`, { count: 1 })?.trim();
27
- }
28
-
29
- get parentLocationOverride() {
30
- return this.doneOverride;
31
- }
32
- }
@@ -1,55 +0,0 @@
1
- import { HCI } from '@shell/config/types';
2
- import SteveModel from '@shell/plugins/steve/steve-class';
3
-
4
- export default class HciBlockDevice extends SteveModel {
5
- get childParts() {
6
- const inStore = this.$rootGetters['currentProduct'].inStore;
7
- const bds = this.$rootGetters[`${ inStore }/all`](HCI.BLOCK_DEVICE);
8
-
9
- const parts = bds.filter((b) => {
10
- return b.status?.deviceStatus?.parentDevice === this.spec?.devPath &&
11
- b.spec.nodeName === this.spec.nodeName;
12
- });
13
-
14
- return parts;
15
- }
16
-
17
- get isChildPartProvisioned() {
18
- const parts = this.childParts.filter(p => p.spec?.fileSystem?.provisioned) || [];
19
-
20
- return parts.length > 0;
21
- }
22
-
23
- get provisionPhase() {
24
- const label = this?.status?.provisionPhase;
25
- let color = '';
26
- let icon = '';
27
-
28
- switch (label) {
29
- case 'Provisioned':
30
- color = 'bg-success';
31
- icon = 'icon-checkmark';
32
- break;
33
- case 'Unprovisioning':
34
- color = 'bg-warning';
35
- icon = 'icon-warning';
36
- break;
37
- case 'NotProvisioned':
38
- color = 'bg-error';
39
- icon = 'icon-warning';
40
- break;
41
- default:
42
- break;
43
- }
44
-
45
- return {
46
- label,
47
- color,
48
- icon,
49
- };
50
- }
51
-
52
- get displayName() {
53
- return this.status?.deviceStatus?.devPath || this?.metadata?.name;
54
- }
55
- }
@@ -1,12 +0,0 @@
1
- import { get } from '@shell/utils/object';
2
- import { findBy } from '@shell/utils/array';
3
- import SteveModel from '@shell/plugins/steve/steve-class';
4
-
5
- export default class HciKeypair extends SteveModel {
6
- get stateDisplay() {
7
- const conditions = get(this, 'status.conditions');
8
- const status = (findBy(conditions, 'type', 'validated') || {}).status ;
9
-
10
- return status === 'True' ? 'Validated' : 'Not Validated';
11
- }
12
- }
@@ -1,127 +0,0 @@
1
- import { findBy } from '@shell/utils/array';
2
- import { HCI } from '@shell/config/types';
3
- import SteveModel from '@shell/plugins/steve/steve-class';
4
- import { HCI_ALLOWED_SETTINGS, HCI_SETTING } from '@shell/config/settings';
5
-
6
- export default class HciSetting extends SteveModel {
7
- get _availableActions() {
8
- const toFilter = ['cloneYaml', 'download', 'goToEditYaml', 'goToViewYaml', 'goToViewConfig', 'promptRemove'];
9
- const settingMetadata = HCI_ALLOWED_SETTINGS[this.id];
10
-
11
- let out = super._availableActions;
12
-
13
- // Some settings are not editable
14
- if ( settingMetadata?.readOnly || this.fromEnv ) {
15
- toFilter.push('goToEdit');
16
- }
17
-
18
- out = out.filter((action) => {
19
- return (!toFilter.includes(action.action));
20
- });
21
-
22
- // Change the label on the first action (edit)
23
- const editAction = out.find(action => action.action === 'goToEdit');
24
-
25
- if (editAction) {
26
- editAction.label = this.t('advancedSettings.edit.label');
27
- }
28
-
29
- const schema = this.$getters['schemaFor'](HCI.UPGRADE);
30
- const hasUpgradeAccess = !!schema?.collectionMethods.find(x => ['post'].includes(x.toLowerCase()));
31
-
32
- if (this.id === HCI_SETTING.SERVER_VERSION && hasUpgradeAccess) {
33
- const latestUpgrade = this.$getters['all'](HCI.UPGRADE).find(upgrade => upgrade.isLatestUpgrade);
34
-
35
- out.unshift({
36
- action: 'goToAirgapUpgrade',
37
- enabled: true,
38
- icon: 'icon icon-refresh',
39
- label: this.t('harvester.upgradePage.upgrade'),
40
- disabled: !!latestUpgrade && !latestUpgrade?.isUpgradeSucceeded
41
- });
42
- }
43
-
44
- return out;
45
- }
46
-
47
- goToAirgapUpgrade() {
48
- const router = this.currentRouter();
49
-
50
- router.push({
51
- name: 'c-cluster-harvester-airgapupgrade',
52
- params: { cluster: this.$rootGetters['currentCluster'].id, product: 'harvester' },
53
- });
54
- }
55
-
56
- get backupTargetIsEmpty() {
57
- return !this.value;
58
- }
59
-
60
- get errMessage() {
61
- if (this.metadata?.state?.error === true) {
62
- return this.metadata.state.message;
63
- } else {
64
- return false;
65
- }
66
- }
67
-
68
- get configuredCondition() {
69
- return findBy((this?.status?.conditions || []), 'type', 'configured') || {};
70
- }
71
-
72
- get valueOrDefaultValue() {
73
- return this.value || this.default;
74
- }
75
-
76
- get currentVersion() {
77
- return this.value || '';
78
- }
79
-
80
- get displayValue() { // Select the field you want to display
81
- if (this.id === 'backup-target') {
82
- return this.parseValue?.endpoint || ' ';
83
- }
84
-
85
- return null;
86
- }
87
-
88
- get parseValue() {
89
- let parseDefaultValue = {};
90
-
91
- try {
92
- parseDefaultValue = JSON.parse(this.value);
93
- } catch (err) {
94
- parseDefaultValue = JSON.parse(this.default);
95
- }
96
-
97
- return parseDefaultValue;
98
- }
99
-
100
- get isS3() {
101
- return this.parseValue.type === 's3';
102
- }
103
-
104
- get isNFS() {
105
- return this.parseValue.type === 'nfs';
106
- }
107
-
108
- get customValidationRules() {
109
- const id = this.id;
110
-
111
- const out = [];
112
-
113
- switch (id) {
114
- case 'backup-target':
115
- out.push( {
116
- nullable: false,
117
- path: 'value',
118
- required: true,
119
- type: 'string',
120
- validators: ['backupTarget'],
121
- });
122
- break;
123
- }
124
-
125
- return out;
126
- }
127
- }
@@ -1,35 +0,0 @@
1
- import SteveModel from '@shell/plugins/steve/steve-class';
2
-
3
- export default class HciSupportBundle extends SteveModel {
4
- get bundleState() {
5
- const state = this?.status?.state;
6
-
7
- // ready、generating
8
- return state;
9
- }
10
-
11
- get bundleMessage() {
12
- const state = this?.metadata?.state;
13
-
14
- if (state.error) {
15
- return state?.message;
16
- }
17
-
18
- return false;
19
- }
20
-
21
- get precent() {
22
- return this?.status?.progress / 100 || 0;
23
- }
24
-
25
- get customValidationRules() {
26
- return [
27
- {
28
- nullable: false,
29
- path: 'spec.description',
30
- required: true,
31
- translationKey: 'harvester.modal.bundle.description',
32
- },
33
- ];
34
- }
35
- }
@@ -1,226 +0,0 @@
1
- import jsyaml from 'js-yaml';
2
- import { NODE } from '@shell/config/types';
3
- import SteveModel from '@shell/plugins/steve/steve-class';
4
- import { colorForState } from '@shell/plugins/dashboard-store/resource-class';
5
- import { HCI } from '@shell/config/labels-annotations';
6
-
7
- export default class HciUpgrade extends SteveModel {
8
- get isLatestUpgrade() {
9
- return this?.metadata?.labels?.[HCI.LATEST_UPGRADE] === 'true';
10
- }
11
-
12
- get isUpgradeSucceeded() {
13
- return this?.metadata?.labels?.[HCI.UPGRADE_STATE] === 'Succeeded';
14
- }
15
-
16
- get hasReadMessage() {
17
- return this?.metadata?.labels?.[HCI.REAY_MESSAGE] === 'true';
18
- }
19
-
20
- get repoInfo() {
21
- const repoInfo = this?.status?.repoInfo;
22
-
23
- if (repoInfo) {
24
- try {
25
- return jsyaml.load(repoInfo);
26
- } catch (e) {
27
- return false;
28
- }
29
- }
30
-
31
- return false;
32
- }
33
-
34
- get stateDisplay() {
35
- const conditions = this?.status?.conditions || [];
36
- const completedCondition = conditions.find( cond => cond.type === 'Completed');
37
- const status = completedCondition?.status;
38
-
39
- if (status === 'True') {
40
- return 'Success';
41
- } else if (status === 'False') {
42
- return 'Fail';
43
- } else {
44
- return 'on-going';
45
- }
46
- }
47
-
48
- get stateColor() {
49
- return colorForState(this.stateDisplay);
50
- }
51
-
52
- get nodes() {
53
- return this.$rootGetters['harvester/all'](NODE);
54
- }
55
-
56
- get upgradeImage() {
57
- return this?.status?.imageID;
58
- }
59
-
60
- get upgradeMessage() {
61
- const upgradeMessage = [];
62
- const nodeStatuses = this?.status?.nodeStatuses || {};
63
- const conditions = this?.status?.conditions || [];
64
-
65
- for (const key in nodeStatuses) {
66
- const state = nodeStatuses[key]?.state;
67
-
68
- if (nodeStatuses[key] && state !== 'Succeeded' && state !== 'succeeded') {
69
- upgradeMessage.push({
70
- id: key,
71
- message: `The node ${ key } is ${ nodeStatuses[key]?.state }`
72
- });
73
- }
74
- }
75
-
76
- for (let i = 0; i < conditions.length; i++) {
77
- const type = conditions[i].type;
78
-
79
- if (type === 'systemServiceUpgraded' && conditions[i]?.status !== 'True') {
80
- upgradeMessage.push({
81
- id: 'systemService',
82
- message: `The systemService is upgrading`
83
- });
84
- }
85
- }
86
-
87
- if (this.metadata?.state?.message && this.metadata?.state?.error) {
88
- upgradeMessage.push({
89
- id: 'message',
90
- message: `${ this.metadata.state.message }`
91
- });
92
- }
93
-
94
- return upgradeMessage;
95
- }
96
-
97
- get createRepo() {
98
- const conditions = this?.status?.conditions || [];
99
- const repoCondition = conditions.find( cond => cond.type === 'RepoReady');
100
- const isReady = repoCondition?.status === 'True';
101
-
102
- return {
103
- isReady,
104
- message: repoCondition?.message || repoCondition?.reason
105
- };
106
- }
107
-
108
- get overallMessage() {
109
- const conditions = this?.status?.conditions || [];
110
- const completedCondition = conditions.find( cond => cond.type === 'Completed');
111
- const hasError = completedCondition?.status === 'False';
112
- const message = completedCondition?.message || completedCondition?.reason;
113
-
114
- return hasError ? message : '';
115
- }
116
-
117
- get upgradeImageMessage() {
118
- const conditions = this?.status?.conditions || [];
119
- const imageReady = conditions.find( cond => cond.type === 'ImageReady');
120
- const hasError = imageReady?.status === 'False';
121
- const message = imageReady?.message || imageReady?.reason;
122
-
123
- return hasError ? message : '';
124
- }
125
-
126
- get nodeUpgradeMessage() {
127
- const message = [];
128
- const nodeStatuses = this?.status?.nodeStatuses || {};
129
-
130
- for (const key in nodeStatuses) {
131
- const state = nodeStatuses[key]?.state;
132
- const _message = nodeStatuses[key]?.message;
133
-
134
- let percent = 0;
135
-
136
- if (state === 'Upgrading') {
137
- percent = 50;
138
- } else if (state === 'Succeeded' || state === 'succeeded') {
139
- percent = 100;
140
- }
141
-
142
- message.push({
143
- name: key,
144
- state,
145
- percent,
146
- message: _message
147
- });
148
- }
149
-
150
- for (const node of this.nodes) {
151
- const hasNode = message.find( O => O.name === node.id);
152
-
153
- if (!hasNode) {
154
- message.push({
155
- name: node.id,
156
- state: 'Pending',
157
- percent: 0,
158
- });
159
- }
160
- }
161
-
162
- return message;
163
- }
164
-
165
- get nodeTotalPercent() {
166
- let out = 0;
167
-
168
- for (let i = 0; i < this.nodeUpgradeMessage.length; i++) {
169
- out += this.nodeUpgradeMessage[i].percent;
170
- }
171
-
172
- out = Math.floor(out / this.nodeUpgradeMessage.length);
173
- const conditions = this?.status?.conditions || [];
174
- const nodeUpgradedCondition = conditions.find( cond => cond.type === 'NodesUpgraded');
175
-
176
- if (out === 100 && !nodeUpgradedCondition) {
177
- out = 99;
178
- }
179
-
180
- return out;
181
- }
182
-
183
- get sysServiceUpgradeMessage() {
184
- let percent = 0;
185
- let state = 'Pending';
186
- const message = [];
187
- const conditions = this?.status?.conditions || [];
188
-
189
- for (let i = 0; i < conditions.length; i++) {
190
- const type = conditions[i].type;
191
-
192
- if (type === 'SystemServicesUpgraded') {
193
- if (conditions[i].status === 'True') {
194
- percent = 100;
195
- state = 'Succeeded';
196
- } else {
197
- percent = 50;
198
- }
199
-
200
- message.push({
201
- name: 'system services',
202
- state,
203
- percent,
204
- message: conditions[i]?.message
205
- });
206
- }
207
- }
208
-
209
- if (message.length === 0) {
210
- message.push({
211
- name: 'system services',
212
- state,
213
- percent,
214
- });
215
- }
216
-
217
- return message;
218
- }
219
-
220
- get totalPercent() {
221
- const nodePercent = this.nodeTotalPercent * this.nodeUpgradeMessage.length;
222
- const servicePercent = this.sysServiceUpgradeMessage?.[0].percent;
223
-
224
- return Math.floor((nodePercent + servicePercent) / (this.nodeUpgradeMessage.length + 1));
225
- }
226
- }
@@ -1,116 +0,0 @@
1
- import { HCI } from '@shell/config/types';
2
- import { get } from '@shell/utils/object';
3
- import { findBy } from '@shell/utils/array';
4
- import { colorForState } from '@shell/plugins/dashboard-store/resource-class';
5
- import SteveModel from '@shell/plugins/steve/steve-class';
6
- import { _CREATE } from '@shell/config/query-params';
7
-
8
- export default class HciVmBackup extends SteveModel {
9
- detailPageHeaderActionOverride(realMode) {
10
- if (realMode === _CREATE) {
11
- return this.t('harvester.backup.title');
12
- }
13
- }
14
-
15
- get _availableActions() {
16
- const toFilter = ['goToEdit', 'cloneYaml', 'goToClone', 'download'];
17
-
18
- const out = super._availableActions.filter((action) => {
19
- if (!toFilter.includes(action.action)) {
20
- return action;
21
- }
22
- });
23
-
24
- const schema = this.$getters['schemaFor'](HCI.VM);
25
- let canCreateVM = true;
26
-
27
- if ( schema && !schema?.collectionMethods.find(x => ['post'].includes(x.toLowerCase())) ) {
28
- canCreateVM = false;
29
- }
30
-
31
- return [
32
- {
33
- action: 'restoreExistingVM',
34
- enabled: canCreateVM && this.attachVmExisting && this?.status?.readyToUse,
35
- icon: 'icons icon-refresh',
36
- label: this.t('harvester.action.restoreExistingVM'),
37
- },
38
- {
39
- action: 'restoreNewVM',
40
- enabled: canCreateVM && this?.status?.readyToUse,
41
- icon: 'icons icon-backup',
42
- label: this.t('harvester.action.restoreNewVM'),
43
- },
44
- ...out
45
- ];
46
- }
47
-
48
- restoreExistingVM(resource = this) {
49
- const router = this.currentRouter();
50
-
51
- router.push({
52
- name: `c-cluster-product-resource-create`,
53
- params: { resource: HCI.BACKUP },
54
- query: { restoreMode: 'existing', backupName: resource.name }
55
- });
56
- }
57
-
58
- restoreNewVM(resource = this) {
59
- const router = this.currentRouter();
60
-
61
- router.push({
62
- name: `c-cluster-product-resource-create`,
63
- params: { resource: HCI.BACKUP },
64
- query: { restoreMode: 'new', backupName: resource.name }
65
- });
66
- }
67
-
68
- get state() {
69
- let out = 'Pending';
70
- const conditions = get(this, 'status.conditions');
71
- const isProgress = findBy(conditions, 'type', 'InProgress')?.status === 'True';
72
- const isReady = findBy(conditions, 'type', 'Ready')?.status === 'True';
73
-
74
- if (this?.status?.readyToUse) {
75
- out = 'Ready';
76
- } else if (isProgress) {
77
- out = 'Progressing';
78
- } else if (!isReady) {
79
- out = 'error';
80
- }
81
-
82
- return out;
83
- }
84
-
85
- get stateColor() {
86
- const state = this.state;
87
-
88
- return colorForState(state);
89
- }
90
-
91
- get attachVM() {
92
- return this.spec.source.name;
93
- }
94
-
95
- get backupContentName() {
96
- return this?.status?.virtualMachineBackupContentName || '';
97
- }
98
-
99
- get backupTarget() {
100
- return this?.status?.backupTarget?.endpoint || '';
101
- }
102
-
103
- get attachVmExisting() {
104
- const vmList = this.$rootGetters['harvester/all'](HCI.VM);
105
-
106
- return !!vmList.find( V => V.metadata.name === this.attachVM);
107
- }
108
-
109
- remove() {
110
- const opt = { ...arguments };
111
-
112
- opt.params = { propagationPolicy: 'Foreground' };
113
-
114
- return this._remove(opt);
115
- }
116
- }