bfg-common 1.5.153 → 1.5.154

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