bfg-common 1.3.239 → 1.3.241

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 (163) hide show
  1. package/components/common/BadBrowser.vue +16 -12
  2. package/components/common/accordion/Accordion.vue +1 -0
  3. package/components/common/accordion/Recursion.vue +2 -0
  4. package/components/common/accordion/lib/models/interfaces.ts +1 -0
  5. package/components/common/adapterManager/AddAdapterModal.vue +11 -4
  6. package/components/common/adapterManager/AddAdapterWarningModal.vue +1 -0
  7. package/components/common/adapterManager/ui/actions/AddAdapterButton.vue +2 -0
  8. package/components/common/adapterManager/ui/actions/MoveDownAdapterButton.vue +2 -0
  9. package/components/common/adapterManager/ui/actions/MoveUpAdapterButton.vue +2 -0
  10. package/components/common/adapterManager/ui/actions/RemoveAdapterButton.vue +2 -0
  11. package/components/common/adapterManager/ui/table/Adapters.vue +14 -13
  12. package/components/common/adapterManager/ui/table/Header.vue +6 -4
  13. package/components/common/adapterManager/ui/table/Table.vue +13 -4
  14. package/components/common/browse/Browse.vue +5 -1
  15. package/components/common/browse/blocks/Container.vue +3 -0
  16. package/components/common/browse/blocks/contents/Files.vue +1 -0
  17. package/components/common/context/ContextRecursion.vue +6 -1
  18. package/components/common/details/DetailsItem.vue +3 -0
  19. package/components/common/diagramMain/Header.vue +4 -0
  20. package/components/common/diagramMain/adapter/AdapterItem.vue +2 -0
  21. package/components/common/diagramMain/adapter/Contents.vue +2 -0
  22. package/components/common/diagramMain/lib/models/interfaces.ts +10 -0
  23. package/components/common/diagramMain/modals/editSettings/tabs/NetworkProperties.vue +1 -0
  24. package/components/common/diagramMain/modals/editSettings/tabs/Security.vue +13 -27
  25. package/components/common/diagramMain/modals/editSettings/tabs/SwitchProperties.vue +1 -0
  26. package/components/common/diagramMain/modals/editSettings/tabs/TeamingFailover.vue +3 -0
  27. package/components/common/diagramMain/modals/editSettings/tabs/TrafficShaping.vue +8 -0
  28. package/components/common/diagramMain/modals/editSettings/tabs/port/IpvFourSettings.vue +6 -0
  29. package/components/common/diagramMain/modals/editSettings/tabs/port/PortProperties.vue +2 -0
  30. package/components/common/diagramMain/modals/lib/config/networkModal.ts +4 -0
  31. package/components/common/diagramMain/modals/lib/config/portModal.ts +7 -2
  32. package/components/common/diagramMain/modals/lib/mappers/mappers.ts +36 -0
  33. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/ConnectionSettings.vue +19 -13
  34. package/components/common/diagramMain/modals/remove/RemoveModal.vue +5 -0
  35. package/components/common/diagramMain/modals/viewSettings/ViewSettings.vue +11 -7
  36. package/components/common/diagramMain/network/Contents.vue +5 -4
  37. package/components/common/diagramMain/port/Port.vue +1 -0
  38. package/components/common/feedback/Buttons.vue +2 -0
  39. package/components/common/feedback/Feedback.vue +9 -2
  40. package/components/common/feedback/Message.vue +9 -0
  41. package/components/common/feedback/VisitPortal.vue +11 -2
  42. package/components/common/help/navbar/left/Left.vue +1 -0
  43. package/components/common/help/navbar/right/Right.vue +12 -2
  44. package/components/common/help/navbar/right/lib/models/interfaces.ts +1 -0
  45. package/components/common/home/alertsTable/AlertsTable.vue +1 -0
  46. package/components/common/modals/Confirmation.vue +10 -2
  47. package/components/common/modals/Rename.vue +1 -0
  48. package/components/common/monitor/advanced/tools/Tools.vue +10 -1
  49. package/components/common/monitor/advanced/tools/chartOptionsModal/actions/Actions.vue +7 -1
  50. package/components/common/monitor/advanced/tools/chartOptionsModal/actions/saveOptionsModal/SaveOptionsModal.vue +6 -1
  51. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/form/Form.vue +14 -1
  52. package/components/common/monitor/overview/filters/Filters.vue +12 -5
  53. package/components/common/monitor/overview/filters/customIntervalModal/CustomIntervalModal.vue +4 -0
  54. package/components/common/pages/Tasks.vue +120 -120
  55. package/components/common/perPage/PerPage.vue +1 -0
  56. package/components/common/recursionTree/RecursionTree.vue +205 -203
  57. package/components/common/recursionTree/lib/models/interfaces.ts +4 -2
  58. package/components/common/select/button/ButtonDropdown.vue +2 -0
  59. package/components/common/select/button/lib/models/interfaces.ts +1 -0
  60. package/components/common/select/input/Input.vue +1 -0
  61. package/components/common/select/radio/RadioGroup.vue +2 -0
  62. package/components/common/select/radio/lib/models/interfaces.ts +1 -0
  63. package/components/common/shortcuts/Block.vue +2 -0
  64. package/components/common/shortcuts/Category.vue +1 -0
  65. package/components/common/shortcuts/lib/models/interfaces.ts +1 -0
  66. package/components/common/spiceConsole/Drawer.vue +4 -0
  67. package/components/common/spiceConsole/keyboard/Keyboard.vue +1 -0
  68. package/components/common/spiceConsole/keyboard/lib/config/keyboardRows.ts +81 -6
  69. package/components/common/spiceConsole/keyboard/lib/models/interfaces.ts +1 -0
  70. package/components/common/split/horizontal/Horizontal.vue +1 -0
  71. package/components/common/vm/actions/add/Add.vue +576 -575
  72. package/components/common/vm/actions/clone/select/options/Options.vue +9 -3
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +5 -1
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +7 -2
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +2 -0
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/CoresPerSocket.vue +1 -0
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/CpuHotPlug.vue +1 -0
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/CpuModel.vue +225 -220
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Hv.vue +2 -0
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Iommu.vue +1 -0
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Pc.vue +1 -0
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Sa.vue +2 -0
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +5 -1
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/tooltip/Tooltip.vue +1 -0
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +2 -1
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/Memory.vue +1 -0
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/MemoryHotPlug.vue +1 -0
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/Location.vue +6 -6
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +5 -6
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/cache/Cache.vue +1 -0
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/limitIops/LimitIops.vue +1 -0
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/Mode.vue +1 -0
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/provisioning/Provisioning.vue +1 -0
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/Sharing.vue +1 -0
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/Location.vue +2 -0
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +295 -294
  97. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/adapterType/AdapterType.vue +1 -0
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +12 -4
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIo.vue +5 -1
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +2 -1
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/typeSelection/TypeSelection.vue +2 -1
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbController.vue +1 -0
  103. package/components/common/vm/actions/common/customizeHardware/virtualHardware/reservation/Reservation.vue +3 -1
  104. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/Graphics.vue +6 -1
  105. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/TotalVideoMemory.vue +2 -1
  106. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCard.vue +1 -0
  107. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/model/Model.vue +1 -0
  108. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +1 -0
  109. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/Menu.vue +6 -1
  110. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/Secure.vue +6 -1
  111. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +5 -1
  112. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +1 -0
  113. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +5 -1
  114. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/lib/models/interfaces.ts +1 -0
  115. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptions.vue +4 -1
  116. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/CopyPaste.vue +1 -0
  117. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/FileTransfer.vue +1 -0
  118. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/FolderSharing.vue +1 -0
  119. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/PlaybackCompression.vue +1 -0
  120. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/PowerControl.vue +1 -0
  121. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/imgCompression/ImgCompression.vue +1 -0
  122. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/jpegCompression/JpegCompression.vue +1 -0
  123. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +2 -1
  124. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/mouseMode/MouseMode.vue +6 -1
  125. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +7 -1
  126. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/sharePolicy/SharePolicy.vue +5 -1
  127. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/streamingMode/StreamingMode.vue +1 -0
  128. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/type/Type.vue +1 -0
  129. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +2 -1
  130. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/zlibCompression/ZlibCompression.vue +1 -0
  131. package/components/common/vm/actions/common/customizeHardware/vmoptions/tools/Tools.vue +6 -1
  132. package/components/common/vm/actions/common/select/compatibility/Compatibility.vue +31 -27
  133. package/components/common/vm/actions/common/select/name/Name.vue +7 -1
  134. package/components/common/vm/actions/common/select/os/os.vue +7 -1
  135. package/components/common/weekSelect/WeekSelect.vue +143 -112
  136. package/components/common/weekSelect/lib/models/interfaces.ts +1 -0
  137. package/components/common/wizards/datastore/add/local/createName/CreateName.vue +1 -0
  138. package/components/common/wizards/datastore/add/nfs/accessibility/Accessibility.vue +8 -7
  139. package/components/common/wizards/datastore/add/nfs/configuration/Configuration.vue +9 -1
  140. package/components/common/wizards/datastore/add/nfs/configuration/serversList/DeletePopover.vue +6 -3
  141. package/components/common/wizards/datastore/add/nfs/kerberosAuthentication/KerberosAuthentication.vue +1 -0
  142. package/components/common/wizards/datastore/add/nfs/kerberosAuthentication/lib/config/radioOptions.ts +3 -0
  143. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/DeviceSelection.vue +2 -0
  144. package/components/common/wizards/datastore/add/sharedStorm/partitionConfiguration/PartitionConfiguration.vue +2 -0
  145. package/components/common/wizards/datastore/add/types/Types.vue +1 -0
  146. package/components/common/wizards/network/add/modals/SelectNetwork.vue +16 -3
  147. package/components/common/wizards/network/add/modals/SelectStandardSwitch.vue +10 -2
  148. package/components/common/wizards/network/add/modals/SelectSwitch.vue +10 -2
  149. package/components/common/wizards/network/add/steps/ConnectionSettings.vue +5 -1
  150. package/components/common/wizards/network/add/steps/IpFourSettings.vue +12 -2
  151. package/components/common/wizards/network/add/steps/PortProperties.vue +16 -3
  152. package/components/common/wizards/network/add/steps/SelectConnectionType.vue +6 -3
  153. package/components/common/wizards/network/add/steps/SelectedTargetDevice.vue +11 -0
  154. package/components/common/wizards/vm/common/tooltip/Tooltip.vue +2 -0
  155. package/components/common/wizards/vm/migrate/select/network/Network.vue +1 -0
  156. package/components/common/wizards/vm/migrate/select/network/table/network/Network.vue +1 -0
  157. package/components/common/wizards/vm/migrate/select/storage/Storage.vue +5 -1
  158. package/components/common/wizards/vm/migrate/select/storage/configure/disk/Disk.vue +1 -0
  159. package/components/common/wizards/vm/migrate/select/storage/diskFormat/DiskFormat.vue +1 -0
  160. package/components/common/wizards/vm/migrate/select/storage/policy/Policy.vue +1 -0
  161. package/components/common/wizards/vm/migrate/select/storage/selectedPerDisk/SelectedPerDisk.vue +1 -0
  162. package/components/common/wizards/vm/migrate/select/targetServer/new/New.vue +9 -1
  163. package/package.json +1 -1
@@ -1,575 +1,576 @@
1
- <template>
2
- <div class="add-vm">
3
- <atoms-wizard
4
- show
5
- :steps="wizard.steps"
6
- :selected-scheme="selectedScheme"
7
- :is-loading="wizard.wizardLoader.status"
8
- :loader-messages="wizard.wizardLoader.messages"
9
- :title="localization.newVirtualMachine2"
10
- :was-completed="wasCompleted"
11
- :localization="localization"
12
- @change-steps="onChangeSteps"
13
- @hide="onHideModal"
14
- @submit="onFinish"
15
- >
16
- <template #modalBody="{ selectedStep }">
17
- <div class="add-vm-content">
18
- <common-vm-actions-common-select-create-type
19
- v-show="selectedStep.id === 0"
20
- :import-from-v-m-warev-sphere="props.importFromVMWarevSphere"
21
- />
22
- <common-vm-actions-common-select-name
23
- v-show="selectedStep.id === 1 || selectedStep.id === 2"
24
- :show="selectedStep.id === 1 || selectedStep.id === 2"
25
- :name-form-submit="nameFormSubmit"
26
- :project="props.project"
27
- :data-center="props.dataCenter"
28
- @submit="onChangeName(...$event)"
29
- @check-name="emits('check-name', $event)"
30
- />
31
- <common-vm-actions-common-select-compute-resource
32
- v-if="isSphere"
33
- v-show="selectedStep.id === 3"
34
- v-model="vmForm.computeResource"
35
- :compute-resource-submit="computeResourceSubmit"
36
- :data-center="vmForm.dataCenter"
37
- :compute-resource="props.computeResource"
38
- :compute-resource-tree="props.computeResourceTree"
39
- @submit="onChangeComputeResource"
40
- @select-compute-resource-tree="onSelectComputeResourceTree"
41
- @get-compute-resource-tree="
42
- emits('get-compute-resource-tree', $event)
43
- "
44
- @show-compute-resource-tree="
45
- emits('show-compute-resource-tree', $event)
46
- "
47
- @clear-compute-resource-tree="
48
- emits('clear-compute-resource-tree', $event)
49
- "
50
- />
51
- <common-vm-actions-common-select-storage
52
- v-show="selectedStep.id === 4"
53
- :storage-submit="storageSubmit"
54
- :datastore="props.datastore"
55
- :get-datastore-table-func="props.getDatastoreTableFunc"
56
- @submit="onChangeStorage"
57
- />
58
- <common-vm-actions-common-select-compatibility
59
- v-show="selectedStep.id === 5"
60
- :options="compatibility"
61
- :error-validation-fields="props.errorValidationFields"
62
- @change="onChangeCompatibility"
63
- @remove-error-by-title="emits('remove-error-by-title', $event)"
64
- />
65
- <common-vm-actions-common-select-os
66
- v-show="selectedStep.id === 6 || selectedStep.id === 7"
67
- :families-options="guestOsFamilies"
68
- :versions-options="guestOsVersions"
69
- :machine-types-options="machineTypes"
70
- :error-validation-fields="props.errorValidationFields"
71
- @change="onChangeOs"
72
- @remove-error-by-title="emits('remove-error-by-title', $event)"
73
- />
74
- <common-vm-actions-common-customize-hardware
75
- v-show="selectedStep.id === 8"
76
- :vm-name="vmForm.name"
77
- :guest-machine-type="vmForm.guestMachineType"
78
- :guest-os-family="vmForm.guestOsFamily"
79
- :guest-os-version="vmForm.guestOsVersion"
80
- :storage="vmForm.storage"
81
- :hard-disks-for-boot-options="virtualHardwareHardDisksLocal"
82
- :cd-dvd-drives-for-boot-options="virtualHardwareCdDvdDrivesLocal"
83
- :networks-for-boot-options="virtualHardwareNetworksLocal"
84
- :cd-dvd-drives="virtualHardwareCdDvdDrivesLocal"
85
- :customize-hardware-submit="customizeHardwareSubmit"
86
- :max-cpus="maxCpus"
87
- :max-memory="maxMemory"
88
- :cpu-models="cpuModels"
89
- :selected-nav-item="selectedNavItem"
90
- :nodes="props.nodes"
91
- :files="props.files"
92
- :networks-table="props.networksTable"
93
- :error-validation-fields="props.errorValidationFields"
94
- :get-datastore-table-func="props.getDatastoreTableFunc"
95
- :datastore="props.datastore"
96
- :vm-cpu-help-text-second="props.vmCpuHelpTextSecond"
97
- :passthrough-devices="props.passthroughDevices"
98
- @change-boot-order="onChangeBootOrder"
99
- @send-data="onChangeCustomizeHardware"
100
- @get-storage="emits('get-storage', $event)"
101
- @get-folders-or-files="emits('get-folders-or-files', $event)"
102
- @get-active-device-child="emits('get-active-device-child', $event)"
103
- @show-datastore-child="emits('show-datastore-child', $event)"
104
- @remove-error-by-title="emits('remove-error-by-title', $event)"
105
- @get-networks-table="emits('get-networks-table', $event)"
106
- @get-pci-devices="emits('get-pci-devices')"
107
- />
108
- <common-vm-actions-common-ready-to-complete
109
- v-if="selectedStep.id === 9"
110
- :ready-complete-table-info="props.readyCompleteTableInfo"
111
- />
112
- <span v-if="selectedStep.id > 5" class="vm-hardware-version">{{
113
- compatibilityInfo
114
- }}</span>
115
- </div>
116
- </template>
117
-
118
- <template #modalFooterContent>
119
- <div v-if="isShowPowerOn" class="power-on-by-default-wrap">
120
- <input
121
- id="power-on-by-default"
122
- v-model="isPowerOnByDefault"
123
- type="checkbox"
124
- />
125
- <label for="power-on-by-default" class="label-text-normal">{{
126
- localization.powerOnByDefault
127
- }}</label>
128
- </div>
129
- </template>
130
- </atoms-wizard>
131
- </div>
132
- </template>
133
-
134
- <script setup lang="ts">
135
- import type {
136
- UI_I_Localization,
137
- UI_I_ArbitraryObject,
138
- } from '~/lib/models/interfaces'
139
- import type { UI_T_Project } from '~/lib/models/types'
140
- import type { UI_I_FileTreeNode } from '~/components/lib/models/interfaces'
141
- import type { UI_I_NetworkTableItem } from '~/lib/models/store/network/interfaces'
142
- import type {
143
- UI_I_DatastoreTableItem,
144
- UI_I_FolderOrFileTreePayload,
145
- } from '~/lib/models/store/storage/interfaces'
146
- import type {
147
- API_UI_I_Error,
148
- UI_I_ErrorValidationField,
149
- } from '~/lib/models/store/interfaces'
150
- import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
151
- import type { UI_I_TableInfoItem } from '~/components/atoms/table/info/lib/models/interfaces'
152
- import type {
153
- UI_T_AddVmFinishFunc,
154
- UI_T_SelectedNavItem,
155
- } from '~/components/common/vm/actions/common/lib/models/types'
156
- import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
157
- import type {
158
- UI_I_ValidationReturn,
159
- UI_I_WizardStep,
160
- } from '~/components/atoms/wizard/lib/models/interfaces'
161
- import type {
162
- UI_I_VmForm,
163
- UI_I_VmFormCash,
164
- } from '~/components/common/vm/actions/common/lib/models/interfaces'
165
- import type { UI_I_SendDataCustomizeHardware } from '~/components/common/vm/actions/common/customizeHardware/lib/models/interfaces'
166
- import type { UI_I_OsChange } from '~/components/common/vm/actions/common/select/lib/models/interfaces'
167
- import type {
168
- UI_I_SendDataCpu,
169
- UI_I_SendDataMemory,
170
- UI_I_SendDataNewCdDvdDrive,
171
- UI_I_SendDataNewHardDisk,
172
- UI_I_SendDataNewNetwork,
173
- } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
174
- import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
175
- import type { UI_T_ChangeBootOrder } from '~/components/common/vm/actions/lib/models/types'
176
- import type { UI_I_PciDevice } from '~/lib/models/store/vm/interfaces'
177
- import { capabilities } from '~/components/common/vm/actions/common/lib/config/capabilities'
178
- import {
179
- stepsSchemeInitial,
180
- stepsFunc,
181
- } from '~/components/common/vm/actions/add/lib/config/steps'
182
- import Wizard from '~/components/atoms/wizard/lib/utils/utils'
183
-
184
- const props = defineProps<{
185
- project: UI_T_Project
186
- nodes: UI_I_FileTreeNode[]
187
- files: UI_I_FileTreeNode[]
188
- networksTable: UI_I_NetworkTableItem[]
189
- datastore: UI_I_DatastoreTableItem[]
190
- errorValidationFields: UI_I_ErrorValidationField[]
191
- readyCompleteTableInfo: UI_I_TableInfoItem[]
192
- vmCpuHelpTextSecond: string
193
- importFromVMWarevSphere: string
194
- finishFunc: UI_T_AddVmFinishFunc
195
- getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
196
- validateSendDataFunc: UI_T_AddVmFinishFunc<
197
- [UI_T_SelectedNavItem, null | number] | null
198
- >
199
- passthroughDevices: UI_I_PciDevice[]
200
- vmNameInWizard: string
201
- dataCenter?: UI_I_TreeNode // для сферы
202
- computeResource?: UI_I_TreeNode // для сферы
203
- computeResourceTree?: UI_I_TreeNode[] // для сферы
204
- }>()
205
-
206
- const emits = defineEmits<{
207
- (event: 'check-name', value: [string, (error: API_UI_I_Error) => void]): void
208
- (event: 'get-storage', value: UI_I_TablePayload): void
209
- (event: 'get-folders-or-files', value: UI_I_FolderOrFileTreePayload): void
210
- (event: 'get-active-device-child', value: UI_I_FileTreeNode): void
211
- (event: 'show-datastore-child', value: UI_I_FileTreeNode): void
212
- (event: 'remove-error-by-title', value: string): void
213
- (event: 'get-networks-table', value: UI_I_TablePayload): void
214
- (event: 'get-pci-devices'): void
215
- (event: 'get-pci-devices'): void
216
- (event: 'hide'): void
217
- (
218
- event: 'get-compute-resource-tree',
219
- value: { id: string | number; cb: () => void }
220
- ): void // для сферы
221
- (event: 'show-compute-resource-tree', value: UI_I_TreeNode): void // для сферы
222
- (event: 'select-compute-resource-tree', value: UI_I_TreeNode): void // для сферы
223
- (event: 'clear-compute-resource-tree'): void // для сферы
224
- }>()
225
-
226
- const isSphere = computed<boolean>(() => props.project === 'sphere')
227
-
228
- const { $recursion } = useNuxtApp()
229
-
230
- const localization = computed<UI_I_Localization>(() => useLocal())
231
-
232
- const wizard: Wizard = new Wizard(
233
- stepsFunc(localization.value),
234
- stepsSchemeInitial
235
- )
236
- if (isSphere.value) wizard.changeScheme(1)
237
- const wasCompleted = computed<boolean>(() => wizard.wasCompleted())
238
- const selectedScheme = computed<number[]>(() => wizard.selectedScheme.value)
239
- const alertMessages = computed<string[][]>(() => wizard.alertMessages.value)
240
-
241
- const isShowPowerOn = computed<boolean>(() => wizard.selectedStepId > 8)
242
-
243
- const onChangeSteps = async (value: UI_I_WizardStep[]): Promise<void> => {
244
- wizard.changeSteps(value, validationFunc, validateSendData)
245
- }
246
- const validationFunc = async (
247
- value: UI_I_WizardStep[],
248
- currentStep: UI_I_WizardStep,
249
- nextStep: UI_I_WizardStep
250
- ): Promise<UI_I_ValidationReturn> => {
251
- let stepHasError = false
252
- let stepShouldStop = {
253
- ifOnCurrentStep: false,
254
- ifFromAnyStep: false,
255
- stoppageStepId: -1,
256
- }
257
-
258
- wizard.setLoader(true)
259
- if (
260
- wizard.isValidateForStep(
261
- isSphere.value ? 2 : 1,
262
- currentStep.id,
263
- nextStep.id
264
- )
265
- ) {
266
- const nameValidation = await checkName(value)
267
-
268
- value = nameValidation.newValue
269
- stepHasError = stepHasError || nameValidation.stepHasError
270
- } else if (wizard.isValidateForStep(4, currentStep.id, nextStep.id)) {
271
- const storageValidation = await checkStorage(value)
272
-
273
- value = storageValidation.newValue
274
-
275
- stepHasError = stepHasError || storageValidation.stepHasError
276
- } else if (wizard.isValidateForStep(8, currentStep.id, nextStep.id)) {
277
- const storageValidation = await checkCustomizeHardware(value)
278
-
279
- value = storageValidation.newValue
280
-
281
- stepHasError = stepHasError || storageValidation.stepHasError
282
- }
283
- wizard.setLoader(false)
284
-
285
- return {
286
- newValue: value,
287
- stepHasError,
288
- stepShouldStop,
289
- }
290
- }
291
- const checkName = async (
292
- value: UI_I_WizardStep[]
293
- ): Promise<UI_I_ValidationReturn> => {
294
- let stepHasError = false
295
-
296
- return new Promise((resolve) => {
297
- const step = isSphere.value ? 2 : 1
298
- nameFormSubmit.value = (isValid: boolean) => {
299
- if (!isValid) {
300
- stepHasError = wizard.setValidation(step, 'name', {
301
- fieldMessage: 'aaa',
302
- alertMessage: 'aaa',
303
- })
304
- } else if (wizard.hasMessage(step, 'name')) {
305
- value = wizard.removeValidation(step, 'name', value)
306
- }
307
-
308
- resolve({
309
- stepHasError,
310
- newValue: value,
311
- })
312
- nameFormSubmit.value = null
313
- }
314
- })
315
- }
316
- const checkStorage = async (
317
- value: UI_I_WizardStep[]
318
- ): Promise<UI_I_ValidationReturn> => {
319
- let stepHasError = false
320
-
321
- return new Promise((resolve) => {
322
- storageSubmit.value = (isValid: boolean) => {
323
- if (!isValid) {
324
- stepHasError = wizard.setValidation(4, 'storage', {
325
- fieldMessage: 'aaa',
326
- alertMessage: 'aaa',
327
- })
328
- } else if (wizard.hasMessage(4, 'storage')) {
329
- value = wizard.removeValidation(4, 'storage', value)
330
- }
331
-
332
- resolve({
333
- stepHasError,
334
- newValue: value,
335
- })
336
- storageSubmit.value = null
337
- }
338
- })
339
- }
340
- const checkCustomizeHardware = async (
341
- value: UI_I_WizardStep[]
342
- ): Promise<UI_I_ValidationReturn> => {
343
- let stepHasError = false
344
-
345
- return new Promise((resolve) => {
346
- customizeHardwareSubmit.value = (isValid: boolean) => {
347
- if (!isValid) {
348
- stepHasError = wizard.setValidation(8, 'customizeHardware', {
349
- fieldMessage: 'aaa',
350
- alertMessage: 'aaa',
351
- })
352
- } else if (wizard.hasMessage(8, 'customizeHardware')) {
353
- value = wizard.removeValidation(8, 'customizeHardware', value)
354
- }
355
-
356
- resolve({
357
- stepHasError,
358
- newValue: value,
359
- })
360
- storageSubmit.value = null
361
- }
362
- })
363
- }
364
-
365
- const storageIdCash = ref<string | null>(null)
366
- const vmForm = ref<UI_I_VmForm>({
367
- name: '',
368
- compatibility: '',
369
- guestMachineType: null,
370
- guestOsFamily: null,
371
- guestOsVersion: null,
372
- computeResource: null,
373
- storage: null,
374
- locationPath: '',
375
- dataCenter: null,
376
- })
377
- const vmFormCash = ref<UI_I_VmFormCash>({
378
- dataCenterId: null,
379
- computeResourceTypeAndId: null,
380
- })
381
-
382
- const onChangeName = (name: string, node: UI_I_TreeNode): void => {
383
- vmForm.value.name = name
384
- if (isSphere.value) {
385
- vmForm.value.locationPath = $recursion.createAbsolutePathRecursion(
386
- node,
387
- 'id',
388
- 'parent'
389
- )
390
- vmForm.value.dataCenter = $recursion.findParentByValue(
391
- node,
392
- 'datacenter',
393
- 'type',
394
- 'parent'
395
- )
396
- vmFormCash.value.dataCenterId = vmForm.value.dataCenter?.id || null
397
- }
398
- }
399
- // // Для сферы
400
- const computeResourcePath = ref<string>('')
401
- const onSelectComputeResourceTree = (node: UI_I_TreeNode): void => {
402
- emits('select-compute-resource-tree', node)
403
- computeResourcePath.value = $recursion.createAbsolutePathRecursion(
404
- node,
405
- 'id',
406
- 'parent'
407
- )
408
- }
409
- const onChangeComputeResource = (node: UI_I_TreeNode): void => {
410
- vmForm.value.computeResource = node
411
- // const type = node.type.toUpperCase()
412
- // schedRequirementsTemplate.value = `sched_requirements="(${type}_ID=${node.id})"\\`
413
- vmFormCash.value.computeResourceTypeAndId = `${node.type}${node.id}` || null
414
- }
415
- const onChangeStorage = (storage: UI_I_DatastoreTableItem | null): void => {
416
- if (!storage) return
417
-
418
- vmForm.value.storage = storage
419
- storageIdCash.value = storage.id
420
- }
421
- const compatibilityInfo = ref<string>('')
422
- const onChangeCompatibility = (compatibility: UI_I_OptionItem): void => {
423
- vmForm.value.compatibility = compatibility.value
424
-
425
- const version = compatibility.value.split('-')[1]
426
- compatibilityInfo.value = `${localization.value.compatibility}: ${compatibility.text} (${localization.value.vmVersion} ${version})`
427
- }
428
- const onChangeOs = (data: UI_I_OsChange): void => {
429
- vmForm.value.guestMachineType = data.selectedMachineType
430
- vmForm.value.guestOsFamily = data.selectedOS
431
- vmForm.value.guestOsVersion = data.selectedVersion
432
- }
433
- const customizeHardware = ref<UI_I_SendDataCustomizeHardware | null>(null)
434
- const onChangeCustomizeHardware = (
435
- data: UI_I_SendDataCustomizeHardware
436
- ): void => {
437
- customizeHardware.value = data
438
- }
439
-
440
- const virtualHardwareHardDisksLocal = computed<
441
- UI_I_SendDataNewHardDisk[] | null
442
- >(() => customizeHardware.value?.virtualHardware?.hardDisks || null)
443
- const virtualHardwareNetworksLocal = computed<UI_I_SendDataNewNetwork[] | null>(
444
- () => customizeHardware.value?.virtualHardware?.networks || null
445
- )
446
- const virtualHardwareCdDvdDrivesLocal = computed<
447
- UI_I_SendDataNewCdDvdDrive[] | null
448
- >(() => customizeHardware.value?.virtualHardware?.cdDvdDrives || null)
449
-
450
- const virtualHardwareCpu = computed<UI_I_SendDataCpu | null>(
451
- () => customizeHardware.value?.virtualHardware?.cpu || null
452
- )
453
- const virtualHardwareMemory = computed<UI_I_SendDataMemory | null>(
454
- () => customizeHardware.value?.virtualHardware?.memory || null
455
- )
456
- const virtualHardwareHardDisks = ref<UI_I_SendDataNewHardDisk[] | null>(null)
457
- const virtualHardwareCdDvdDrives = ref<UI_I_SendDataNewCdDvdDrive[] | null>(
458
- null
459
- )
460
- const virtualHardwareNetworks = ref<UI_I_SendDataNewNetwork[] | null>(null)
461
- const onChangeBootOrder = (data: UI_T_ChangeBootOrder): void => {
462
- virtualHardwareHardDisks.value = data[0]
463
- virtualHardwareCdDvdDrives.value = data[1]
464
- virtualHardwareNetworks.value = data[2]
465
- }
466
-
467
- const isPowerOnByDefault = ref<boolean>(true)
468
-
469
- watch(
470
- () => props.vmNameInWizard,
471
- (newValue) => {
472
- vmForm.value.name = newValue
473
- }
474
- )
475
-
476
- const validateSendData = async (
477
- value: UI_I_WizardStep[]
478
- ): Promise<UI_I_ValidationReturn> => {
479
- wizard.setLoader(true)
480
- let stepHasError = false
481
-
482
- const data = await props.validateSendDataFunc(
483
- vmForm.value,
484
- virtualHardwareCpu.value,
485
- virtualHardwareMemory.value,
486
- customizeHardware.value,
487
- virtualHardwareNetworks.value,
488
- virtualHardwareHardDisks.value,
489
- virtualHardwareCdDvdDrives.value,
490
- isPowerOnByDefault.value,
491
- localization.value,
492
- vmForm.value.locationPath, // для сферы
493
- computeResourcePath.value // для сферы
494
- )
495
-
496
- wizard.setLoader(false)
497
- if (data) {
498
- stepHasError = true
499
- selectedNavItem.value = data[0]
500
- // data[1] !== null && (stepPosition.value = data[1])
501
- }
502
-
503
- return {
504
- stepHasError,
505
- newValue: value,
506
- }
507
- }
508
- const onFinish = (): void => {
509
- wizard.setLoader(false)
510
- props
511
- .finishFunc(
512
- vmForm.value,
513
- virtualHardwareCpu.value,
514
- virtualHardwareMemory.value,
515
- customizeHardware.value,
516
- virtualHardwareNetworks.value,
517
- virtualHardwareHardDisks.value,
518
- virtualHardwareCdDvdDrives.value,
519
- isPowerOnByDefault.value,
520
- localization.value,
521
- vmForm.value.locationPath, // для сферы
522
- computeResourcePath.value, // для сферы
523
- false
524
- )
525
- .then(() => {
526
- onHideModal()
527
- wizard.setLoader(false)
528
- })
529
- }
530
-
531
- const selectedNavItem = ref<UI_T_SelectedNavItem>(0)
532
-
533
- const nameFormSubmit = ref<null | Function>(null)
534
- const computeResourceSubmit = ref<null | Function>(null)
535
- const storageSubmit = ref<null | Function>(null)
536
- const customizeHardwareSubmit = ref<null | Function>(null)
537
- const compatibility = ref<UI_I_OptionItem[]>(capabilities.compatibility)
538
- const guestOsFamilies = ref<UI_I_OptionItem[]>(capabilities.guestOsFamilies)
539
- const guestOsVersions = ref<UI_I_ArbitraryObject<UI_I_OptionItem[]>>(
540
- capabilities.guestOsVersions
541
- )
542
- const machineTypes = ref<UI_I_OptionItem[]>(capabilities.machineTypes)
543
- const cpuModels = ref<UI_I_OptionItem[]>(capabilities.cpuModels)
544
- const maxCpus = ref<number>(capabilities.maxCpus)
545
- const maxMemory = ref<number>(capabilities.maxMemory)
546
-
547
- const onHideModal = (): void => {
548
- emits('hide')
549
- }
550
- </script>
551
-
552
- <style scoped lang="scss">
553
- :deep(.modal-body) {
554
- display: flex;
555
- flex-direction: column;
556
- }
557
- .add-vm-content {
558
- display: flex;
559
- flex-direction: column;
560
- flex: 1;
561
- }
562
- .vm-hardware-version {
563
- align-self: flex-end;
564
- margin-top: auto;
565
- }
566
- .power-on-by-default-wrap {
567
- display: flex;
568
- align-items: center;
569
- margin-right: auto;
570
-
571
- input {
572
- margin-right: 6px;
573
- }
574
- }
575
- </style>
1
+ <template>
2
+ <div class="add-vm">
3
+ <atoms-wizard
4
+ show
5
+ :steps="wizard.steps"
6
+ :selected-scheme="selectedScheme"
7
+ :is-loading="wizard.wizardLoader.status"
8
+ :loader-messages="wizard.wizardLoader.messages"
9
+ :title="localization.newVirtualMachine2"
10
+ :was-completed="wasCompleted"
11
+ :localization="localization"
12
+ @change-steps="onChangeSteps"
13
+ @hide="onHideModal"
14
+ @submit="onFinish"
15
+ >
16
+ <template #modalBody="{ selectedStep }">
17
+ <div class="add-vm-content">
18
+ <common-vm-actions-common-select-create-type
19
+ v-show="selectedStep.id === 0"
20
+ :import-from-v-m-warev-sphere="props.importFromVMWarevSphere"
21
+ />
22
+ <common-vm-actions-common-select-name
23
+ v-show="selectedStep.id === 1 || selectedStep.id === 2"
24
+ :show="selectedStep.id === 1 || selectedStep.id === 2"
25
+ :name-form-submit="nameFormSubmit"
26
+ :project="props.project"
27
+ :data-center="props.dataCenter"
28
+ @submit="onChangeName(...$event)"
29
+ @check-name="emits('check-name', $event)"
30
+ />
31
+ <common-vm-actions-common-select-compute-resource
32
+ v-if="isSphere"
33
+ v-show="selectedStep.id === 3"
34
+ v-model="vmForm.computeResource"
35
+ :compute-resource-submit="computeResourceSubmit"
36
+ :data-center="vmForm.dataCenter"
37
+ :compute-resource="props.computeResource"
38
+ :compute-resource-tree="props.computeResourceTree"
39
+ @submit="onChangeComputeResource"
40
+ @select-compute-resource-tree="onSelectComputeResourceTree"
41
+ @get-compute-resource-tree="
42
+ emits('get-compute-resource-tree', $event)
43
+ "
44
+ @show-compute-resource-tree="
45
+ emits('show-compute-resource-tree', $event)
46
+ "
47
+ @clear-compute-resource-tree="
48
+ emits('clear-compute-resource-tree', $event)
49
+ "
50
+ />
51
+ <common-vm-actions-common-select-storage
52
+ v-show="selectedStep.id === 4"
53
+ :storage-submit="storageSubmit"
54
+ :datastore="props.datastore"
55
+ :get-datastore-table-func="props.getDatastoreTableFunc"
56
+ @submit="onChangeStorage"
57
+ />
58
+ <common-vm-actions-common-select-compatibility
59
+ v-show="selectedStep.id === 5"
60
+ :options="compatibility"
61
+ :error-validation-fields="props.errorValidationFields"
62
+ @change="onChangeCompatibility"
63
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
64
+ />
65
+ <common-vm-actions-common-select-os
66
+ v-show="selectedStep.id === 6 || selectedStep.id === 7"
67
+ :families-options="guestOsFamilies"
68
+ :versions-options="guestOsVersions"
69
+ :machine-types-options="machineTypes"
70
+ :error-validation-fields="props.errorValidationFields"
71
+ @change="onChangeOs"
72
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
73
+ />
74
+ <common-vm-actions-common-customize-hardware
75
+ v-show="selectedStep.id === 8"
76
+ :vm-name="vmForm.name"
77
+ :guest-machine-type="vmForm.guestMachineType"
78
+ :guest-os-family="vmForm.guestOsFamily"
79
+ :guest-os-version="vmForm.guestOsVersion"
80
+ :storage="vmForm.storage"
81
+ :hard-disks-for-boot-options="virtualHardwareHardDisksLocal"
82
+ :cd-dvd-drives-for-boot-options="virtualHardwareCdDvdDrivesLocal"
83
+ :networks-for-boot-options="virtualHardwareNetworksLocal"
84
+ :cd-dvd-drives="virtualHardwareCdDvdDrivesLocal"
85
+ :customize-hardware-submit="customizeHardwareSubmit"
86
+ :max-cpus="maxCpus"
87
+ :max-memory="maxMemory"
88
+ :cpu-models="cpuModels"
89
+ :selected-nav-item="selectedNavItem"
90
+ :nodes="props.nodes"
91
+ :files="props.files"
92
+ :networks-table="props.networksTable"
93
+ :error-validation-fields="props.errorValidationFields"
94
+ :get-datastore-table-func="props.getDatastoreTableFunc"
95
+ :datastore="props.datastore"
96
+ :vm-cpu-help-text-second="props.vmCpuHelpTextSecond"
97
+ :passthrough-devices="props.passthroughDevices"
98
+ @change-boot-order="onChangeBootOrder"
99
+ @send-data="onChangeCustomizeHardware"
100
+ @get-storage="emits('get-storage', $event)"
101
+ @get-folders-or-files="emits('get-folders-or-files', $event)"
102
+ @get-active-device-child="emits('get-active-device-child', $event)"
103
+ @show-datastore-child="emits('show-datastore-child', $event)"
104
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
105
+ @get-networks-table="emits('get-networks-table', $event)"
106
+ @get-pci-devices="emits('get-pci-devices')"
107
+ />
108
+ <common-vm-actions-common-ready-to-complete
109
+ v-if="selectedStep.id === 9"
110
+ :ready-complete-table-info="props.readyCompleteTableInfo"
111
+ />
112
+ <span v-if="selectedStep.id > 5" class="vm-hardware-version">{{
113
+ compatibilityInfo
114
+ }}</span>
115
+ </div>
116
+ </template>
117
+
118
+ <template #modalFooterContent>
119
+ <div v-if="isShowPowerOn" class="power-on-by-default-wrap">
120
+ <input
121
+ id="power-on-by-default"
122
+ v-model="isPowerOnByDefault"
123
+ data-id="power-on-by-default"
124
+ type="checkbox"
125
+ />
126
+ <label for="power-on-by-default" class="label-text-normal">{{
127
+ localization.powerOnByDefault
128
+ }}</label>
129
+ </div>
130
+ </template>
131
+ </atoms-wizard>
132
+ </div>
133
+ </template>
134
+
135
+ <script setup lang="ts">
136
+ import type {
137
+ UI_I_Localization,
138
+ UI_I_ArbitraryObject,
139
+ } from '~/lib/models/interfaces'
140
+ import type { UI_T_Project } from '~/lib/models/types'
141
+ import type { UI_I_FileTreeNode } from '~/components/lib/models/interfaces'
142
+ import type { UI_I_NetworkTableItem } from '~/lib/models/store/network/interfaces'
143
+ import type {
144
+ UI_I_DatastoreTableItem,
145
+ UI_I_FolderOrFileTreePayload,
146
+ } from '~/lib/models/store/storage/interfaces'
147
+ import type {
148
+ API_UI_I_Error,
149
+ UI_I_ErrorValidationField,
150
+ } from '~/lib/models/store/interfaces'
151
+ import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
152
+ import type { UI_I_TableInfoItem } from '~/components/atoms/table/info/lib/models/interfaces'
153
+ import type {
154
+ UI_T_AddVmFinishFunc,
155
+ UI_T_SelectedNavItem,
156
+ } from '~/components/common/vm/actions/common/lib/models/types'
157
+ import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
158
+ import type {
159
+ UI_I_ValidationReturn,
160
+ UI_I_WizardStep,
161
+ } from '~/components/atoms/wizard/lib/models/interfaces'
162
+ import type {
163
+ UI_I_VmForm,
164
+ UI_I_VmFormCash,
165
+ } from '~/components/common/vm/actions/common/lib/models/interfaces'
166
+ import type { UI_I_SendDataCustomizeHardware } from '~/components/common/vm/actions/common/customizeHardware/lib/models/interfaces'
167
+ import type { UI_I_OsChange } from '~/components/common/vm/actions/common/select/lib/models/interfaces'
168
+ import type {
169
+ UI_I_SendDataCpu,
170
+ UI_I_SendDataMemory,
171
+ UI_I_SendDataNewCdDvdDrive,
172
+ UI_I_SendDataNewHardDisk,
173
+ UI_I_SendDataNewNetwork,
174
+ } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
175
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
176
+ import type { UI_T_ChangeBootOrder } from '~/components/common/vm/actions/lib/models/types'
177
+ import type { UI_I_PciDevice } from '~/lib/models/store/vm/interfaces'
178
+ import { capabilities } from '~/components/common/vm/actions/common/lib/config/capabilities'
179
+ import {
180
+ stepsSchemeInitial,
181
+ stepsFunc,
182
+ } from '~/components/common/vm/actions/add/lib/config/steps'
183
+ import Wizard from '~/components/atoms/wizard/lib/utils/utils'
184
+
185
+ const props = defineProps<{
186
+ project: UI_T_Project
187
+ nodes: UI_I_FileTreeNode[]
188
+ files: UI_I_FileTreeNode[]
189
+ networksTable: UI_I_NetworkTableItem[]
190
+ datastore: UI_I_DatastoreTableItem[]
191
+ errorValidationFields: UI_I_ErrorValidationField[]
192
+ readyCompleteTableInfo: UI_I_TableInfoItem[]
193
+ vmCpuHelpTextSecond: string
194
+ importFromVMWarevSphere: string
195
+ finishFunc: UI_T_AddVmFinishFunc
196
+ getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
197
+ validateSendDataFunc: UI_T_AddVmFinishFunc<
198
+ [UI_T_SelectedNavItem, null | number] | null
199
+ >
200
+ passthroughDevices: UI_I_PciDevice[]
201
+ vmNameInWizard: string
202
+ dataCenter?: UI_I_TreeNode // для сферы
203
+ computeResource?: UI_I_TreeNode // для сферы
204
+ computeResourceTree?: UI_I_TreeNode[] // для сферы
205
+ }>()
206
+
207
+ const emits = defineEmits<{
208
+ (event: 'check-name', value: [string, (error: API_UI_I_Error) => void]): void
209
+ (event: 'get-storage', value: UI_I_TablePayload): void
210
+ (event: 'get-folders-or-files', value: UI_I_FolderOrFileTreePayload): void
211
+ (event: 'get-active-device-child', value: UI_I_FileTreeNode): void
212
+ (event: 'show-datastore-child', value: UI_I_FileTreeNode): void
213
+ (event: 'remove-error-by-title', value: string): void
214
+ (event: 'get-networks-table', value: UI_I_TablePayload): void
215
+ (event: 'get-pci-devices'): void
216
+ (event: 'get-pci-devices'): void
217
+ (event: 'hide'): void
218
+ (
219
+ event: 'get-compute-resource-tree',
220
+ value: { id: string | number; cb: () => void }
221
+ ): void // для сферы
222
+ (event: 'show-compute-resource-tree', value: UI_I_TreeNode): void // для сферы
223
+ (event: 'select-compute-resource-tree', value: UI_I_TreeNode): void // для сферы
224
+ (event: 'clear-compute-resource-tree'): void // для сферы
225
+ }>()
226
+
227
+ const isSphere = computed<boolean>(() => props.project === 'sphere')
228
+
229
+ const { $recursion } = useNuxtApp()
230
+
231
+ const localization = computed<UI_I_Localization>(() => useLocal())
232
+
233
+ const wizard: Wizard = new Wizard(
234
+ stepsFunc(localization.value),
235
+ stepsSchemeInitial
236
+ )
237
+ if (isSphere.value) wizard.changeScheme(1)
238
+ const wasCompleted = computed<boolean>(() => wizard.wasCompleted())
239
+ const selectedScheme = computed<number[]>(() => wizard.selectedScheme.value)
240
+ const alertMessages = computed<string[][]>(() => wizard.alertMessages.value)
241
+
242
+ const isShowPowerOn = computed<boolean>(() => wizard.selectedStepId > 8)
243
+
244
+ const onChangeSteps = async (value: UI_I_WizardStep[]): Promise<void> => {
245
+ wizard.changeSteps(value, validationFunc, validateSendData)
246
+ }
247
+ const validationFunc = async (
248
+ value: UI_I_WizardStep[],
249
+ currentStep: UI_I_WizardStep,
250
+ nextStep: UI_I_WizardStep
251
+ ): Promise<UI_I_ValidationReturn> => {
252
+ let stepHasError = false
253
+ let stepShouldStop = {
254
+ ifOnCurrentStep: false,
255
+ ifFromAnyStep: false,
256
+ stoppageStepId: -1,
257
+ }
258
+
259
+ wizard.setLoader(true)
260
+ if (
261
+ wizard.isValidateForStep(
262
+ isSphere.value ? 2 : 1,
263
+ currentStep.id,
264
+ nextStep.id
265
+ )
266
+ ) {
267
+ const nameValidation = await checkName(value)
268
+
269
+ value = nameValidation.newValue
270
+ stepHasError = stepHasError || nameValidation.stepHasError
271
+ } else if (wizard.isValidateForStep(4, currentStep.id, nextStep.id)) {
272
+ const storageValidation = await checkStorage(value)
273
+
274
+ value = storageValidation.newValue
275
+
276
+ stepHasError = stepHasError || storageValidation.stepHasError
277
+ } else if (wizard.isValidateForStep(8, currentStep.id, nextStep.id)) {
278
+ const storageValidation = await checkCustomizeHardware(value)
279
+
280
+ value = storageValidation.newValue
281
+
282
+ stepHasError = stepHasError || storageValidation.stepHasError
283
+ }
284
+ wizard.setLoader(false)
285
+
286
+ return {
287
+ newValue: value,
288
+ stepHasError,
289
+ stepShouldStop,
290
+ }
291
+ }
292
+ const checkName = async (
293
+ value: UI_I_WizardStep[]
294
+ ): Promise<UI_I_ValidationReturn> => {
295
+ let stepHasError = false
296
+
297
+ return new Promise((resolve) => {
298
+ const step = isSphere.value ? 2 : 1
299
+ nameFormSubmit.value = (isValid: boolean) => {
300
+ if (!isValid) {
301
+ stepHasError = wizard.setValidation(step, 'name', {
302
+ fieldMessage: 'aaa',
303
+ alertMessage: 'aaa',
304
+ })
305
+ } else if (wizard.hasMessage(step, 'name')) {
306
+ value = wizard.removeValidation(step, 'name', value)
307
+ }
308
+
309
+ resolve({
310
+ stepHasError,
311
+ newValue: value,
312
+ })
313
+ nameFormSubmit.value = null
314
+ }
315
+ })
316
+ }
317
+ const checkStorage = async (
318
+ value: UI_I_WizardStep[]
319
+ ): Promise<UI_I_ValidationReturn> => {
320
+ let stepHasError = false
321
+
322
+ return new Promise((resolve) => {
323
+ storageSubmit.value = (isValid: boolean) => {
324
+ if (!isValid) {
325
+ stepHasError = wizard.setValidation(4, 'storage', {
326
+ fieldMessage: 'aaa',
327
+ alertMessage: 'aaa',
328
+ })
329
+ } else if (wizard.hasMessage(4, 'storage')) {
330
+ value = wizard.removeValidation(4, 'storage', value)
331
+ }
332
+
333
+ resolve({
334
+ stepHasError,
335
+ newValue: value,
336
+ })
337
+ storageSubmit.value = null
338
+ }
339
+ })
340
+ }
341
+ const checkCustomizeHardware = async (
342
+ value: UI_I_WizardStep[]
343
+ ): Promise<UI_I_ValidationReturn> => {
344
+ let stepHasError = false
345
+
346
+ return new Promise((resolve) => {
347
+ customizeHardwareSubmit.value = (isValid: boolean) => {
348
+ if (!isValid) {
349
+ stepHasError = wizard.setValidation(8, 'customizeHardware', {
350
+ fieldMessage: 'aaa',
351
+ alertMessage: 'aaa',
352
+ })
353
+ } else if (wizard.hasMessage(8, 'customizeHardware')) {
354
+ value = wizard.removeValidation(8, 'customizeHardware', value)
355
+ }
356
+
357
+ resolve({
358
+ stepHasError,
359
+ newValue: value,
360
+ })
361
+ storageSubmit.value = null
362
+ }
363
+ })
364
+ }
365
+
366
+ const storageIdCash = ref<string | null>(null)
367
+ const vmForm = ref<UI_I_VmForm>({
368
+ name: '',
369
+ compatibility: '',
370
+ guestMachineType: null,
371
+ guestOsFamily: null,
372
+ guestOsVersion: null,
373
+ computeResource: null,
374
+ storage: null,
375
+ locationPath: '',
376
+ dataCenter: null,
377
+ })
378
+ const vmFormCash = ref<UI_I_VmFormCash>({
379
+ dataCenterId: null,
380
+ computeResourceTypeAndId: null,
381
+ })
382
+
383
+ const onChangeName = (name: string, node: UI_I_TreeNode): void => {
384
+ vmForm.value.name = name
385
+ if (isSphere.value) {
386
+ vmForm.value.locationPath = $recursion.createAbsolutePathRecursion(
387
+ node,
388
+ 'id',
389
+ 'parent'
390
+ )
391
+ vmForm.value.dataCenter = $recursion.findParentByValue(
392
+ node,
393
+ 'datacenter',
394
+ 'type',
395
+ 'parent'
396
+ )
397
+ vmFormCash.value.dataCenterId = vmForm.value.dataCenter?.id || null
398
+ }
399
+ }
400
+ // // Для сферы
401
+ const computeResourcePath = ref<string>('')
402
+ const onSelectComputeResourceTree = (node: UI_I_TreeNode): void => {
403
+ emits('select-compute-resource-tree', node)
404
+ computeResourcePath.value = $recursion.createAbsolutePathRecursion(
405
+ node,
406
+ 'id',
407
+ 'parent'
408
+ )
409
+ }
410
+ const onChangeComputeResource = (node: UI_I_TreeNode): void => {
411
+ vmForm.value.computeResource = node
412
+ // const type = node.type.toUpperCase()
413
+ // schedRequirementsTemplate.value = `sched_requirements="(${type}_ID=${node.id})"\\`
414
+ vmFormCash.value.computeResourceTypeAndId = `${node.type}${node.id}` || null
415
+ }
416
+ const onChangeStorage = (storage: UI_I_DatastoreTableItem | null): void => {
417
+ if (!storage) return
418
+
419
+ vmForm.value.storage = storage
420
+ storageIdCash.value = storage.id
421
+ }
422
+ const compatibilityInfo = ref<string>('')
423
+ const onChangeCompatibility = (compatibility: UI_I_OptionItem): void => {
424
+ vmForm.value.compatibility = compatibility.value
425
+
426
+ const version = compatibility.value.split('-')[1]
427
+ compatibilityInfo.value = `${localization.value.compatibility}: ${compatibility.text} (${localization.value.vmVersion} ${version})`
428
+ }
429
+ const onChangeOs = (data: UI_I_OsChange): void => {
430
+ vmForm.value.guestMachineType = data.selectedMachineType
431
+ vmForm.value.guestOsFamily = data.selectedOS
432
+ vmForm.value.guestOsVersion = data.selectedVersion
433
+ }
434
+ const customizeHardware = ref<UI_I_SendDataCustomizeHardware | null>(null)
435
+ const onChangeCustomizeHardware = (
436
+ data: UI_I_SendDataCustomizeHardware
437
+ ): void => {
438
+ customizeHardware.value = data
439
+ }
440
+
441
+ const virtualHardwareHardDisksLocal = computed<
442
+ UI_I_SendDataNewHardDisk[] | null
443
+ >(() => customizeHardware.value?.virtualHardware?.hardDisks || null)
444
+ const virtualHardwareNetworksLocal = computed<UI_I_SendDataNewNetwork[] | null>(
445
+ () => customizeHardware.value?.virtualHardware?.networks || null
446
+ )
447
+ const virtualHardwareCdDvdDrivesLocal = computed<
448
+ UI_I_SendDataNewCdDvdDrive[] | null
449
+ >(() => customizeHardware.value?.virtualHardware?.cdDvdDrives || null)
450
+
451
+ const virtualHardwareCpu = computed<UI_I_SendDataCpu | null>(
452
+ () => customizeHardware.value?.virtualHardware?.cpu || null
453
+ )
454
+ const virtualHardwareMemory = computed<UI_I_SendDataMemory | null>(
455
+ () => customizeHardware.value?.virtualHardware?.memory || null
456
+ )
457
+ const virtualHardwareHardDisks = ref<UI_I_SendDataNewHardDisk[] | null>(null)
458
+ const virtualHardwareCdDvdDrives = ref<UI_I_SendDataNewCdDvdDrive[] | null>(
459
+ null
460
+ )
461
+ const virtualHardwareNetworks = ref<UI_I_SendDataNewNetwork[] | null>(null)
462
+ const onChangeBootOrder = (data: UI_T_ChangeBootOrder): void => {
463
+ virtualHardwareHardDisks.value = data[0]
464
+ virtualHardwareCdDvdDrives.value = data[1]
465
+ virtualHardwareNetworks.value = data[2]
466
+ }
467
+
468
+ const isPowerOnByDefault = ref<boolean>(true)
469
+
470
+ watch(
471
+ () => props.vmNameInWizard,
472
+ (newValue) => {
473
+ vmForm.value.name = newValue
474
+ }
475
+ )
476
+
477
+ const validateSendData = async (
478
+ value: UI_I_WizardStep[]
479
+ ): Promise<UI_I_ValidationReturn> => {
480
+ wizard.setLoader(true)
481
+ let stepHasError = false
482
+
483
+ const data = await props.validateSendDataFunc(
484
+ vmForm.value,
485
+ virtualHardwareCpu.value,
486
+ virtualHardwareMemory.value,
487
+ customizeHardware.value,
488
+ virtualHardwareNetworks.value,
489
+ virtualHardwareHardDisks.value,
490
+ virtualHardwareCdDvdDrives.value,
491
+ isPowerOnByDefault.value,
492
+ localization.value,
493
+ vmForm.value.locationPath, // для сферы
494
+ computeResourcePath.value // для сферы
495
+ )
496
+
497
+ wizard.setLoader(false)
498
+ if (data) {
499
+ stepHasError = true
500
+ selectedNavItem.value = data[0]
501
+ // data[1] !== null && (stepPosition.value = data[1])
502
+ }
503
+
504
+ return {
505
+ stepHasError,
506
+ newValue: value,
507
+ }
508
+ }
509
+ const onFinish = (): void => {
510
+ wizard.setLoader(false)
511
+ props
512
+ .finishFunc(
513
+ vmForm.value,
514
+ virtualHardwareCpu.value,
515
+ virtualHardwareMemory.value,
516
+ customizeHardware.value,
517
+ virtualHardwareNetworks.value,
518
+ virtualHardwareHardDisks.value,
519
+ virtualHardwareCdDvdDrives.value,
520
+ isPowerOnByDefault.value,
521
+ localization.value,
522
+ vmForm.value.locationPath, // для сферы
523
+ computeResourcePath.value, // для сферы
524
+ false
525
+ )
526
+ .then(() => {
527
+ onHideModal()
528
+ wizard.setLoader(false)
529
+ })
530
+ }
531
+
532
+ const selectedNavItem = ref<UI_T_SelectedNavItem>(0)
533
+
534
+ const nameFormSubmit = ref<null | Function>(null)
535
+ const computeResourceSubmit = ref<null | Function>(null)
536
+ const storageSubmit = ref<null | Function>(null)
537
+ const customizeHardwareSubmit = ref<null | Function>(null)
538
+ const compatibility = ref<UI_I_OptionItem[]>(capabilities.compatibility)
539
+ const guestOsFamilies = ref<UI_I_OptionItem[]>(capabilities.guestOsFamilies)
540
+ const guestOsVersions = ref<UI_I_ArbitraryObject<UI_I_OptionItem[]>>(
541
+ capabilities.guestOsVersions
542
+ )
543
+ const machineTypes = ref<UI_I_OptionItem[]>(capabilities.machineTypes)
544
+ const cpuModels = ref<UI_I_OptionItem[]>(capabilities.cpuModels)
545
+ const maxCpus = ref<number>(capabilities.maxCpus)
546
+ const maxMemory = ref<number>(capabilities.maxMemory)
547
+
548
+ const onHideModal = (): void => {
549
+ emits('hide')
550
+ }
551
+ </script>
552
+
553
+ <style scoped lang="scss">
554
+ :deep(.modal-body) {
555
+ display: flex;
556
+ flex-direction: column;
557
+ }
558
+ .add-vm-content {
559
+ display: flex;
560
+ flex-direction: column;
561
+ flex: 1;
562
+ }
563
+ .vm-hardware-version {
564
+ align-self: flex-end;
565
+ margin-top: auto;
566
+ }
567
+ .power-on-by-default-wrap {
568
+ display: flex;
569
+ align-items: center;
570
+ margin-right: auto;
571
+
572
+ input {
573
+ margin-right: 6px;
574
+ }
575
+ }
576
+ </style>