bfg-common 1.5.323 → 1.5.326

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 (147) hide show
  1. package/CODE_STYLE.md +109 -109
  2. package/assets/img/icons/icons-sprite-dark-3.svg +227 -227
  3. package/assets/img/icons/icons-sprite-dark-5.svg +488 -488
  4. package/assets/img/icons/icons-sprite-light-3.svg +227 -227
  5. package/assets/img/icons/icons-sprite-light-5.svg +488 -488
  6. package/assets/localization/local_be.json +2 -0
  7. package/assets/localization/local_en.json +2 -0
  8. package/assets/localization/local_hy.json +2 -0
  9. package/assets/localization/local_kk.json +2 -0
  10. package/assets/localization/local_ru.json +2 -0
  11. package/assets/localization/local_zh.json +2 -0
  12. package/components/atoms/TheIcon3.vue +50 -50
  13. package/components/atoms/collapse/CollapseNav.vue +170 -170
  14. package/components/atoms/collapse/CollapseNavItem.vue +226 -226
  15. package/components/atoms/nav/NavBar.vue +147 -147
  16. package/components/atoms/perPage/PerPage.vue +58 -58
  17. package/components/atoms/table/dataGrid/DataGrid.vue +1717 -1717
  18. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  19. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  20. package/components/atoms/tabs/VerticalTabs.vue +105 -105
  21. package/components/common/backup/storage/actions/add/lib/config/steps.ts +168 -168
  22. package/components/common/backup/storage/actions/add/steps/hostAccessibility/HostAccessibility.vue +52 -52
  23. package/components/common/backup/storage/actions/add/steps/readyComplete/ReadyComplete.vue +45 -45
  24. package/components/common/backup/storage/actions/delete/Delete.vue +65 -65
  25. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  26. package/components/common/context/lib/models/interfaces.ts +33 -33
  27. package/components/common/diagramMain/DiagramMain.vue +897 -897
  28. package/components/common/diagramMain/modals/lib/config/networkModal.ts +398 -398
  29. package/components/common/diagramMain/network/Network.vue +141 -141
  30. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  31. package/components/common/layout/theHeader/userMenu/modals/preferences/view/ViewOld.vue +112 -112
  32. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  33. package/components/common/monitor/overview/filters/lib/config/filterOptions.ts +100 -100
  34. package/components/common/pages/home/headline/Headline.vue +45 -45
  35. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  36. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  37. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  38. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  39. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  40. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  41. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  42. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  43. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  44. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  45. package/components/common/pages/packages/Packages.vue +208 -208
  46. package/components/common/pages/shortcuts/block/BlockOld.vue +68 -68
  47. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  48. package/components/common/recursionTree/RecursionTree.vue +223 -223
  49. package/components/common/select/button/ButtonDropdown.vue +112 -112
  50. package/components/common/spiceConsole/Drawer.vue +377 -377
  51. package/components/common/spiceConsole/SpiceConsole.vue +127 -127
  52. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  53. package/components/common/tools/Actions.vue +207 -207
  54. package/components/common/vm/actions/add/New.vue +647 -642
  55. package/components/common/vm/actions/add/Old.vue +388 -385
  56. package/components/common/vm/actions/add/folderTreeView/FolderTreeView.vue +72 -72
  57. package/components/common/vm/actions/add/folderTreeView/New.vue +40 -40
  58. package/components/common/vm/actions/add/folderTreeView/Old.vue +50 -50
  59. package/components/common/vm/actions/add/lib/config/steps.ts +22 -10
  60. package/components/common/vm/actions/clone/Clone.vue +823 -823
  61. package/components/common/vm/actions/clone/lib/config/steps.ts +291 -291
  62. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +116 -116
  63. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +3 -0
  64. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +2 -0
  65. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +2 -0
  66. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +321 -321
  67. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +227 -227
  68. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +100 -100
  69. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +232 -232
  70. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +168 -168
  71. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +78 -78
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/tooltip/TooltipNew.vue +154 -154
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/Memory.vue +307 -307
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +385 -385
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +154 -154
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/LocationOld.vue +85 -85
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +288 -288
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +94 -94
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +205 -205
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCard.vue +154 -154
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +53 -53
  97. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +155 -152
  98. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +130 -128
  99. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsOld.vue +113 -111
  100. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +32 -32
  101. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +60 -60
  102. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +174 -174
  103. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptions.vue +95 -83
  104. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +2 -1
  105. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsOld.vue +155 -154
  106. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  107. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapOld.vue +44 -44
  108. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  109. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  110. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  111. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  112. package/components/common/vm/actions/common/select/computeResource/treeView/TreeView.vue +118 -118
  113. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  114. package/components/common/vm/actions/common/select/createType/lib/config/items.ts +48 -48
  115. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  116. package/components/common/vm/actions/common/select/name/Name.vue +174 -174
  117. package/components/common/vm/actions/common/select/options/Options.vue +6 -1
  118. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  119. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  120. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  121. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  122. package/components/common/vm/actions/editSettings/EditSettings.vue +242 -239
  123. package/components/common/vm/actions/editSettings/EditSettingsOld.vue +2 -0
  124. package/components/common/vm/actions/editSettings/new/New.vue +2 -0
  125. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  126. package/components/common/vmt/actions/add/Add.vue +641 -641
  127. package/components/common/vmt/actions/add/lib/config/steps.ts +107 -107
  128. package/components/common/vmt/actions/add/lib/models/interfaces.ts +23 -23
  129. package/components/common/wizards/network/add/steps/SelectConnectionType.vue +104 -104
  130. package/components/common/wizards/network/add/steps/SelectedTargetDevice.vue +467 -467
  131. package/components/common/wizards/vm/migrate/Migrate.vue +349 -349
  132. package/components/common/wizards/vm/migrate/lib/config/constructDataReady.ts +220 -220
  133. package/components/common/wizards/vm/migrate/lib/config/steps.ts +157 -157
  134. package/components/common/wizards/vm/migrate/lib/validations.ts +68 -68
  135. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  136. package/components/common/wizards/vm/migrate/select/network/table/network/lib/config/advancedTable.ts +91 -91
  137. package/composables/productNameLocal.ts +30 -30
  138. package/composables/useAppVersion.ts +21 -21
  139. package/package.json +1 -1
  140. package/plugins/date.ts +233 -233
  141. package/plugins/panelStates.ts +70 -70
  142. package/plugins/text.ts +59 -59
  143. package/public/spice-console/lib/images/bitmap.js +203 -203
  144. package/public/spice-console/network/spicechannel.js +387 -387
  145. package/store/main/mutations.ts +7 -7
  146. package/store/main/state.ts +7 -7
  147. package/store/tasks/mappers/recentTasks.ts +64 -64
@@ -1,349 +1,349 @@
1
- <template>
2
- <div class="migrate-vm">
3
- <atoms-wizard
4
- show
5
- :wizard="wizard"
6
- :selected-scheme="selectedScheme"
7
- :title="title"
8
- :localization="localization"
9
- class="migrate-vm-wizard"
10
- test-id="migrate-vm-wizard"
11
- @change-steps="onChangeSteps"
12
- @hide="onHideModal"
13
- @submit="onFinish"
14
- >
15
- <template #description="{ selectedStep }">
16
- <div class="flex items-center justify-between">
17
- <h2 class="custom-sub-title">
18
- {{ selectedStep.subTitle }}
19
- </h2>
20
- <common-wizards-vm-migrate-vm-origin
21
- v-if="props.vmOrigin"
22
- :vm-origin="props.vmOrigin"
23
- />
24
- </div>
25
- </template>
26
- <template #modalBody="{ selectedStep }"
27
- >
28
- <common-pages-scheduled-tasks-modals-common-new-task-form
29
- v-if="selectedStep.id === dynamicSteps.schedulingOptions"
30
- v-model="modelSchedulerTask"
31
- :target="props.vmName"
32
- />
33
-
34
- <common-wizards-vm-migrate-select-type
35
- v-if="selectedStep.id === dynamicSteps.selectMigrationType"
36
- v-model="form.migrate_type"
37
- :project="props.project"
38
- />
39
-
40
- <common-wizards-vm-migrate-select-target-server
41
- v-if="selectedStep.id === dynamicSteps.selectTargetVCenterSer"
42
- v-model="form.target_server"
43
- v-model:connect-server="isConnectSourceServer"
44
- :wizard="wizard"
45
- />
46
-
47
- <common-wizards-vm-migrate-select-compute-resource
48
- v-if="isSphere"
49
- v-show="selectedStep.id === dynamicSteps.selectComputeResource"
50
- v-model="form"
51
- :vm-state="props.vmState"
52
- :alert-messages="alertMessages[3]"
53
- :get-compute-resource-data="props.getComputeResourceData"
54
- :compute-resource-data="props.computeResourceTableData"
55
- :compute-resource-tree="props.computeResourceTree"
56
- @hide-alert="onHideAlert"
57
- />
58
-
59
- <common-wizards-vm-migrate-select-storage
60
- v-show="selectedStep.id === dynamicSteps.selectStorage"
61
- v-model="form"
62
- :alert-messages="alertMessages[4]"
63
- :get-datastore-table-func="props.getDatastoreTableFunc"
64
- :datastore="props.datastore"
65
- :connected-storage-id-default="connectedStorageIdOnVm"
66
- :configure-per-disks="props.configurePerDisks"
67
- @hide-alert="onHideAlert"
68
- />
69
-
70
- <common-wizards-vm-migrate-select-network
71
- v-if="isSphere"
72
- v-show="selectedStep.id === dynamicSteps.selectNetworks"
73
- v-model="form.network"
74
- :vm-info="props.vmInfo"
75
- :networks="props.networks"
76
- />
77
-
78
- <common-wizards-vm-migrate-select-priority
79
- v-if="selectedStep.id === dynamicSteps.migrationStrategy"
80
- v-model="form.vMotion_priority"
81
- :vm-state="props.vmState"
82
- />
83
-
84
- <common-ready-to-complete
85
- v-if="selectedStep.id === dynamicSteps.readyComplete"
86
- :data="dataReadyView"
87
- />
88
- </template>
89
- </atoms-wizard>
90
- </div>
91
- </template>
92
-
93
- <script setup lang="ts">
94
- import type {
95
- UI_I_WizardStep,
96
- UI_I_ValidationReturn,
97
- } from '~/components/atoms/wizard/lib/models/interfaces'
98
- import Wizard from '~/components/atoms/wizard/lib/utils/utils'
99
- import {
100
- dynamicSteps,
101
- stepsFunc,
102
- stepsSchemeInitial,
103
- } from '~/components/common/wizards/vm/migrate/lib/config/steps'
104
- import type { UI_I_Localization } from '~/lib/models/interfaces'
105
- import type { UI_T_Project } from '~/lib/models/types'
106
- import type {
107
- UI_I_MigrateFormLocal,
108
- UI_I_ChangeStepsSchemes,
109
- } from '~/components/common/wizards/vm/migrate/lib/models/interfaces'
110
- import type { UI_T_VmMigrateType } from '~/components/common/wizards/vm/migrate/select/type/lib/models/types'
111
- import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
112
- import type { UI_I_DatastoreTableItem } from '~/lib/models/store/storage/interfaces'
113
- import type { UI_I_VmSettings } from '~/lib/models/store/vm/interfaces'
114
- import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
115
- import type { UI_I_StorageConfigurePerDiskItem } from '~/components/common/wizards/vm/migrate/select/storage/configure/disk/table/lib/models/interfaces'
116
- import type { UI_I_TableInfoItem } from '~/components/atoms/table/info/lib/models/interfaces'
117
- import type { UI_I_ScheduleNewTasksForm } from '~/components/common/pages/scheduledTasks/modals/lib/models/interfaces'
118
- import type { UI_I_VmOrigin } from '~/components/common/wizards/vm/migrate/vmOrigin/lib/models/interfaces'
119
- import { constructDataReadyViewFunc } from '~/components/common/wizards/vm/migrate/lib/config/constructDataReady'
120
- import * as validation from '~/components/common/wizards/vm/migrate/lib/validations'
121
-
122
- const props = withDefaults(
123
- defineProps<{
124
- project: UI_T_Project
125
- isScheduledTasks: boolean
126
- isEditScheduledTasks: boolean
127
- vmSettings: UI_I_VmSettings | null
128
- vmName: string
129
- getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
130
- getComputeResourceData: (payload: UI_I_TablePayload) => Promise<void>
131
- datastore: UI_I_DatastoreTableItem[]
132
- configurePerDisks: UI_I_StorageConfigurePerDiskItem[]
133
- computeResourceTableData?: any
134
- computeResourceTree?: UI_I_TreeNode | null
135
- vmState?: number
136
- vmInfo?: any | null
137
- networks?: any
138
- vmOrigin?: UI_I_VmOrigin | null
139
- defaultMigrateType?: UI_T_VmMigrateType
140
- }>(),
141
- {
142
- computeResourceTree: null,
143
- vmOrigin: null,
144
- }
145
- )
146
- const emits = defineEmits<{
147
- (event: 'finish', value: UI_I_MigrateFormLocal): void
148
- (event: 'get-networks', value: string): void
149
- (event: 'hide'): void
150
- }>()
151
- const modelSchedulerTask = defineModel<UI_I_ScheduleNewTasksForm>(
152
- 'schedulerForm',
153
- { required: true }
154
- )
155
-
156
- const localization = computed<UI_I_Localization>(() => useLocal())
157
-
158
- const isSphere = ref<boolean>(props.project === 'sphere')
159
-
160
- const wizard: Wizard = new Wizard(
161
- stepsFunc(localization.value, props.isScheduledTasks),
162
- stepsSchemeInitial
163
- )
164
-
165
- const selectedScheme = computed<number[]>(() => wizard.selectedScheme.value)
166
- const alertMessages = computed<string[][]>(() => wizard.alertMessages.value)
167
-
168
- const title = computed<string>(() => {
169
- const { scheduleNewTasks, scheduleTaskEdit, migrate } =
170
- localization.value.common
171
- let result = migrate
172
- if (props.isScheduledTasks) {
173
- const schedulerMode = props.isEditScheduledTasks
174
- ? scheduleTaskEdit
175
- : scheduleNewTasks
176
-
177
- result = `${schedulerMode} (${migrate})`
178
- }
179
-
180
- return result
181
- })
182
-
183
- const isConnectSourceServer = ref<boolean>(false)
184
- const form = ref<UI_I_MigrateFormLocal>({
185
- migrate_type: props.defaultMigrateType
186
- ? props.defaultMigrateType
187
- : props.project === 'procurator'
188
- ? 'storage'
189
- : 'resource',
190
- disk_format: 0,
191
- storage: null,
192
- configure: {
193
- type: 'batch-configure',
194
- disks: [],
195
- },
196
- target_server: {
197
- fqdn: '',
198
- user: '',
199
- password: '',
200
- },
201
- network: {},
202
- resource: {
203
- selectedNode: null,
204
- host: null,
205
- cluster: null,
206
- resourcePool: null,
207
- vApps: null,
208
- },
209
- vMotion_priority:
210
- props.vmState === 2 ? 'live' : props.vmState === 1 ? 'offline' : '',
211
- })
212
-
213
- const validationFunc = async (
214
- value: UI_I_WizardStep[],
215
- currentStep: UI_I_WizardStep,
216
- nextStep: UI_I_WizardStep
217
- ): Promise<UI_I_ValidationReturn> => {
218
- let stepHasError = false
219
-
220
- if (
221
- wizard.isValidateForStep(
222
- dynamicSteps.selectComputeResource,
223
- currentStep.id,
224
- nextStep.id
225
- )
226
- ) {
227
- const nameValidation = await validation.checkSelectedResourceSync(
228
- localization.value,
229
- form.value.resource,
230
- wizard,
231
- value
232
- )
233
-
234
- value = nameValidation.newValue
235
-
236
- stepHasError = nameValidation.stepHasError
237
- }
238
-
239
- if (
240
- wizard.isValidateForStep(
241
- dynamicSteps.selectStorage,
242
- currentStep.id,
243
- nextStep.id
244
- )
245
- ) {
246
- const nameValidation = await validation.checkSelectedDatastoreSync(
247
- localization.value,
248
- form.value.storage,
249
- wizard,
250
- value
251
- )
252
-
253
- value = nameValidation.newValue
254
-
255
- stepHasError = nameValidation.stepHasError
256
- }
257
-
258
- return {
259
- newValue: value,
260
- stepHasError,
261
- }
262
- }
263
- const onChangeSteps = async (value: UI_I_WizardStep[]): Promise<void> =>
264
- wizard.changeSteps(value, validationFunc)
265
-
266
- // Choosing Scheme
267
- watch(
268
- () => form.value.migrate_type,
269
- (newValue: UI_T_VmMigrateType) => {
270
- const schemes: UI_I_ChangeStepsSchemes = {
271
- procurator: {
272
- storage: props.isScheduledTasks ? 1 : 0,
273
- },
274
- sphere: {
275
- storage: props.isScheduledTasks ? 1 : 0,
276
- resource: props.isScheduledTasks ? 3 : 2,
277
- 'resource-storage': 4,
278
- server: 5,
279
- },
280
- }
281
-
282
- const projectSchemes = schemes[props.project]
283
-
284
- if (projectSchemes && projectSchemes[newValue] !== undefined) {
285
- wizard.changeScheme(projectSchemes[newValue] as number)
286
- }
287
- },
288
- { deep: true, immediate: true }
289
- )
290
- // Get networks
291
- watch(
292
- () => form.value.resource.host,
293
- (newValue) => {
294
- emits('get-networks', newValue.id)
295
- }
296
- )
297
-
298
- watch(
299
- modelSchedulerTask,
300
- (newValue: UI_I_ScheduleNewTasksForm) => {
301
- if (props.isScheduledTasks) wizard.setDisabledNextButton(newValue.isValid)
302
- },
303
- { immediate: true, deep: true }
304
- )
305
-
306
- const loading = ref<boolean>(false)
307
-
308
- const connectedStorageIdOnVm = computed<string>(
309
- () => props.vmSettings?.storage.id || ''
310
- )
311
-
312
- const dataReadyView = computed<UI_I_TableInfoItem>(() =>
313
- constructDataReadyViewFunc(props.vmName, form.value)
314
- )
315
- const onFinish = (): void => {
316
- loading.value = true
317
- emits('finish', form.value)
318
- loading.value = false
319
- }
320
-
321
- const onHideModal = (): void => {
322
- emits('hide')
323
- }
324
-
325
- const onHideAlert = (stepId: number): void => {
326
- wizard.hideAlertMessagesByStepId(stepId)
327
- }
328
- </script>
329
-
330
- <style scoped lang="scss">
331
- @import 'assets/scss/common/mixins.scss';
332
- .migrate-vm {
333
- .custom-sub-title {
334
- font-weight: 400;
335
- font-size: 13px;
336
- line-height: inherit;
337
- color: var(--add-vm-context-sub-title);
338
- }
339
-
340
- :deep(.modal-body) {
341
- height: inherit;
342
- @include flex($dir: column);
343
-
344
- .content-heading > div {
345
- width: 100%;
346
- }
347
- }
348
- }
349
- </style>
1
+ <template>
2
+ <div class="migrate-vm">
3
+ <atoms-wizard
4
+ show
5
+ :wizard="wizard"
6
+ :selected-scheme="selectedScheme"
7
+ :title="title"
8
+ :localization="localization"
9
+ class="migrate-vm-wizard"
10
+ test-id="migrate-vm-wizard"
11
+ @change-steps="onChangeSteps"
12
+ @hide="onHideModal"
13
+ @submit="onFinish"
14
+ >
15
+ <template #description="{ selectedStep }">
16
+ <div class="flex items-center justify-between">
17
+ <h2 class="custom-sub-title">
18
+ {{ selectedStep.subTitle }}
19
+ </h2>
20
+ <common-wizards-vm-migrate-vm-origin
21
+ v-if="props.vmOrigin"
22
+ :vm-origin="props.vmOrigin"
23
+ />
24
+ </div>
25
+ </template>
26
+ <template #modalBody="{ selectedStep }"
27
+ >
28
+ <common-pages-scheduled-tasks-modals-common-new-task-form
29
+ v-if="selectedStep.id === dynamicSteps.schedulingOptions"
30
+ v-model="modelSchedulerTask"
31
+ :target="props.vmName"
32
+ />
33
+
34
+ <common-wizards-vm-migrate-select-type
35
+ v-if="selectedStep.id === dynamicSteps.selectMigrationType"
36
+ v-model="form.migrate_type"
37
+ :project="props.project"
38
+ />
39
+
40
+ <common-wizards-vm-migrate-select-target-server
41
+ v-if="selectedStep.id === dynamicSteps.selectTargetVCenterSer"
42
+ v-model="form.target_server"
43
+ v-model:connect-server="isConnectSourceServer"
44
+ :wizard="wizard"
45
+ />
46
+
47
+ <common-wizards-vm-migrate-select-compute-resource
48
+ v-if="isSphere"
49
+ v-show="selectedStep.id === dynamicSteps.selectComputeResource"
50
+ v-model="form"
51
+ :vm-state="props.vmState"
52
+ :alert-messages="alertMessages[3]"
53
+ :get-compute-resource-data="props.getComputeResourceData"
54
+ :compute-resource-data="props.computeResourceTableData"
55
+ :compute-resource-tree="props.computeResourceTree"
56
+ @hide-alert="onHideAlert"
57
+ />
58
+
59
+ <common-wizards-vm-migrate-select-storage
60
+ v-show="selectedStep.id === dynamicSteps.selectStorage"
61
+ v-model="form"
62
+ :alert-messages="alertMessages[4]"
63
+ :get-datastore-table-func="props.getDatastoreTableFunc"
64
+ :datastore="props.datastore"
65
+ :connected-storage-id-default="connectedStorageIdOnVm"
66
+ :configure-per-disks="props.configurePerDisks"
67
+ @hide-alert="onHideAlert"
68
+ />
69
+
70
+ <common-wizards-vm-migrate-select-network
71
+ v-if="isSphere"
72
+ v-show="selectedStep.id === dynamicSteps.selectNetworks"
73
+ v-model="form.network"
74
+ :vm-info="props.vmInfo"
75
+ :networks="props.networks"
76
+ />
77
+
78
+ <common-wizards-vm-migrate-select-priority
79
+ v-if="selectedStep.id === dynamicSteps.migrationStrategy"
80
+ v-model="form.vMotion_priority"
81
+ :vm-state="props.vmState"
82
+ />
83
+
84
+ <common-ready-to-complete
85
+ v-if="selectedStep.id === dynamicSteps.readyComplete"
86
+ :data="dataReadyView"
87
+ />
88
+ </template>
89
+ </atoms-wizard>
90
+ </div>
91
+ </template>
92
+
93
+ <script setup lang="ts">
94
+ import type {
95
+ UI_I_WizardStep,
96
+ UI_I_ValidationReturn,
97
+ } from '~/components/atoms/wizard/lib/models/interfaces'
98
+ import Wizard from '~/components/atoms/wizard/lib/utils/utils'
99
+ import {
100
+ dynamicSteps,
101
+ stepsFunc,
102
+ stepsSchemeInitial,
103
+ } from '~/components/common/wizards/vm/migrate/lib/config/steps'
104
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
105
+ import type { UI_T_Project } from '~/lib/models/types'
106
+ import type {
107
+ UI_I_MigrateFormLocal,
108
+ UI_I_ChangeStepsSchemes,
109
+ } from '~/components/common/wizards/vm/migrate/lib/models/interfaces'
110
+ import type { UI_T_VmMigrateType } from '~/components/common/wizards/vm/migrate/select/type/lib/models/types'
111
+ import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
112
+ import type { UI_I_DatastoreTableItem } from '~/lib/models/store/storage/interfaces'
113
+ import type { UI_I_VmSettings } from '~/lib/models/store/vm/interfaces'
114
+ import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
115
+ import type { UI_I_StorageConfigurePerDiskItem } from '~/components/common/wizards/vm/migrate/select/storage/configure/disk/table/lib/models/interfaces'
116
+ import type { UI_I_TableInfoItem } from '~/components/atoms/table/info/lib/models/interfaces'
117
+ import type { UI_I_ScheduleNewTasksForm } from '~/components/common/pages/scheduledTasks/modals/lib/models/interfaces'
118
+ import type { UI_I_VmOrigin } from '~/components/common/wizards/vm/migrate/vmOrigin/lib/models/interfaces'
119
+ import { constructDataReadyViewFunc } from '~/components/common/wizards/vm/migrate/lib/config/constructDataReady'
120
+ import * as validation from '~/components/common/wizards/vm/migrate/lib/validations'
121
+
122
+ const props = withDefaults(
123
+ defineProps<{
124
+ project: UI_T_Project
125
+ isScheduledTasks: boolean
126
+ isEditScheduledTasks: boolean
127
+ vmSettings: UI_I_VmSettings | null
128
+ vmName: string
129
+ getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
130
+ getComputeResourceData: (payload: UI_I_TablePayload) => Promise<void>
131
+ datastore: UI_I_DatastoreTableItem[]
132
+ configurePerDisks: UI_I_StorageConfigurePerDiskItem[]
133
+ computeResourceTableData?: any
134
+ computeResourceTree?: UI_I_TreeNode | null
135
+ vmState?: number
136
+ vmInfo?: any | null
137
+ networks?: any
138
+ vmOrigin?: UI_I_VmOrigin | null
139
+ defaultMigrateType?: UI_T_VmMigrateType
140
+ }>(),
141
+ {
142
+ computeResourceTree: null,
143
+ vmOrigin: null,
144
+ }
145
+ )
146
+ const emits = defineEmits<{
147
+ (event: 'finish', value: UI_I_MigrateFormLocal): void
148
+ (event: 'get-networks', value: string): void
149
+ (event: 'hide'): void
150
+ }>()
151
+ const modelSchedulerTask = defineModel<UI_I_ScheduleNewTasksForm>(
152
+ 'schedulerForm',
153
+ { required: true }
154
+ )
155
+
156
+ const localization = computed<UI_I_Localization>(() => useLocal())
157
+
158
+ const isSphere = ref<boolean>(props.project === 'sphere')
159
+
160
+ const wizard: Wizard = new Wizard(
161
+ stepsFunc(localization.value, props.isScheduledTasks),
162
+ stepsSchemeInitial
163
+ )
164
+
165
+ const selectedScheme = computed<number[]>(() => wizard.selectedScheme.value)
166
+ const alertMessages = computed<string[][]>(() => wizard.alertMessages.value)
167
+
168
+ const title = computed<string>(() => {
169
+ const { scheduleNewTasks, scheduleTaskEdit, migrate } =
170
+ localization.value.common
171
+ let result = migrate
172
+ if (props.isScheduledTasks) {
173
+ const schedulerMode = props.isEditScheduledTasks
174
+ ? scheduleTaskEdit
175
+ : scheduleNewTasks
176
+
177
+ result = `${schedulerMode} (${migrate})`
178
+ }
179
+
180
+ return result
181
+ })
182
+
183
+ const isConnectSourceServer = ref<boolean>(false)
184
+ const form = ref<UI_I_MigrateFormLocal>({
185
+ migrate_type: props.defaultMigrateType
186
+ ? props.defaultMigrateType
187
+ : props.project === 'procurator'
188
+ ? 'storage'
189
+ : 'resource',
190
+ disk_format: 0,
191
+ storage: null,
192
+ configure: {
193
+ type: 'batch-configure',
194
+ disks: [],
195
+ },
196
+ target_server: {
197
+ fqdn: '',
198
+ user: '',
199
+ password: '',
200
+ },
201
+ network: {},
202
+ resource: {
203
+ selectedNode: null,
204
+ host: null,
205
+ cluster: null,
206
+ resourcePool: null,
207
+ vApps: null,
208
+ },
209
+ vMotion_priority:
210
+ props.vmState === 2 ? 'live' : props.vmState === 1 ? 'offline' : '',
211
+ })
212
+
213
+ const validationFunc = async (
214
+ value: UI_I_WizardStep[],
215
+ currentStep: UI_I_WizardStep,
216
+ nextStep: UI_I_WizardStep
217
+ ): Promise<UI_I_ValidationReturn> => {
218
+ let stepHasError = false
219
+
220
+ if (
221
+ wizard.isValidateForStep(
222
+ dynamicSteps.selectComputeResource,
223
+ currentStep.id,
224
+ nextStep.id
225
+ )
226
+ ) {
227
+ const nameValidation = await validation.checkSelectedResourceSync(
228
+ localization.value,
229
+ form.value.resource,
230
+ wizard,
231
+ value
232
+ )
233
+
234
+ value = nameValidation.newValue
235
+
236
+ stepHasError = nameValidation.stepHasError
237
+ }
238
+
239
+ if (
240
+ wizard.isValidateForStep(
241
+ dynamicSteps.selectStorage,
242
+ currentStep.id,
243
+ nextStep.id
244
+ )
245
+ ) {
246
+ const nameValidation = await validation.checkSelectedDatastoreSync(
247
+ localization.value,
248
+ form.value.storage,
249
+ wizard,
250
+ value
251
+ )
252
+
253
+ value = nameValidation.newValue
254
+
255
+ stepHasError = nameValidation.stepHasError
256
+ }
257
+
258
+ return {
259
+ newValue: value,
260
+ stepHasError,
261
+ }
262
+ }
263
+ const onChangeSteps = async (value: UI_I_WizardStep[]): Promise<void> =>
264
+ wizard.changeSteps(value, validationFunc)
265
+
266
+ // Choosing Scheme
267
+ watch(
268
+ () => form.value.migrate_type,
269
+ (newValue: UI_T_VmMigrateType) => {
270
+ const schemes: UI_I_ChangeStepsSchemes = {
271
+ procurator: {
272
+ storage: props.isScheduledTasks ? 1 : 0,
273
+ },
274
+ sphere: {
275
+ storage: props.isScheduledTasks ? 1 : 0,
276
+ resource: props.isScheduledTasks ? 3 : 2,
277
+ 'resource-storage': 4,
278
+ server: 5,
279
+ },
280
+ }
281
+
282
+ const projectSchemes = schemes[props.project]
283
+
284
+ if (projectSchemes && projectSchemes[newValue] !== undefined) {
285
+ wizard.changeScheme(projectSchemes[newValue] as number)
286
+ }
287
+ },
288
+ { deep: true, immediate: true }
289
+ )
290
+ // Get networks
291
+ watch(
292
+ () => form.value.resource.host,
293
+ (newValue) => {
294
+ emits('get-networks', newValue.id)
295
+ }
296
+ )
297
+
298
+ watch(
299
+ modelSchedulerTask,
300
+ (newValue: UI_I_ScheduleNewTasksForm) => {
301
+ if (props.isScheduledTasks) wizard.setDisabledNextButton(newValue.isValid)
302
+ },
303
+ { immediate: true, deep: true }
304
+ )
305
+
306
+ const loading = ref<boolean>(false)
307
+
308
+ const connectedStorageIdOnVm = computed<string>(
309
+ () => props.vmSettings?.storage.id || ''
310
+ )
311
+
312
+ const dataReadyView = computed<UI_I_TableInfoItem>(() =>
313
+ constructDataReadyViewFunc(props.vmName, form.value)
314
+ )
315
+ const onFinish = (): void => {
316
+ loading.value = true
317
+ emits('finish', form.value)
318
+ loading.value = false
319
+ }
320
+
321
+ const onHideModal = (): void => {
322
+ emits('hide')
323
+ }
324
+
325
+ const onHideAlert = (stepId: number): void => {
326
+ wizard.hideAlertMessagesByStepId(stepId)
327
+ }
328
+ </script>
329
+
330
+ <style scoped lang="scss">
331
+ @import 'assets/scss/common/mixins.scss';
332
+ .migrate-vm {
333
+ .custom-sub-title {
334
+ font-weight: 400;
335
+ font-size: 13px;
336
+ line-height: inherit;
337
+ color: var(--add-vm-context-sub-title);
338
+ }
339
+
340
+ :deep(.modal-body) {
341
+ height: inherit;
342
+ @include flex($dir: column);
343
+
344
+ .content-heading > div {
345
+ width: 100%;
346
+ }
347
+ }
348
+ }
349
+ </style>