bfg-common 1.5.526 → 1.5.528

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.
@@ -0,0 +1,382 @@
1
+ <template>
2
+ <div class="clone-vm">
3
+ <atoms-wizard
4
+ :wizard="props.wizard"
5
+ :selected-scheme="props.selectedScheme"
6
+ :title="props.title"
7
+ :localization="localization"
8
+ show
9
+ @change-steps="emits('change-steps', $event)"
10
+ @hide="emits('hide')"
11
+ @submit="emits('finish')"
12
+ >
13
+ <template #modalBody="{ selectedStep }">
14
+ <atoms-loader
15
+ v-show="!props.vmSettings || props.isLoading"
16
+ id="loader"
17
+ test-id="clone-vm-loader"
18
+ />
19
+ <div v-if="props.vmSettings" class="vm-context">
20
+ <common-pages-scheduled-tasks-modals-common-new-task-form
21
+ v-show="selectedStep.id === props.dynamicSteps.scheduledTasks"
22
+ v-model="schedulerTaskForm"
23
+ :target="props.selectedVirtualMachine"
24
+ class="new-task-form"
25
+ />
26
+ <common-wizards-common-steps-name
27
+ v-show="
28
+ selectedStep.id === props.dynamicSteps.selectName ||
29
+ selectedStep.id === props.dynamicSteps.selectNameFolder
30
+ "
31
+ v-model:name="vmForm.name"
32
+ v-model:location="location"
33
+ :show="
34
+ selectedStep.id === props.dynamicSteps.selectName ||
35
+ selectedStep.id === props.dynamicSteps.selectNameFolder
36
+ "
37
+ :name-form-submit="props.nameFormSubmit"
38
+ :name-request-url="props.nameRequestUrl"
39
+ :validation-description="
40
+ localization.common.enterValidLocationVirtualMachine
41
+ "
42
+ :name-exist-validation-description="
43
+ localization.common.vmNameExistInSelectedLocation
44
+ "
45
+ :test-ids="props.nameTestIds"
46
+ :has-location="props.project === 'sphere'"
47
+ :location-nodes="props.locationNodes"
48
+ :allowed-location-kinds="props.allowedLocationKinds"
49
+ :location-description="props.locationDescription"
50
+ @submit="emits('change-name', $event)"
51
+ />
52
+ <common-vm-actions-common-select-compute-resource
53
+ v-if="props.isSphere"
54
+ v-show="
55
+ selectedStep.id === props.dynamicSteps.selectComputeResource
56
+ "
57
+ v-model="computeResource"
58
+ :compute-resource-submit="props.computeResourceSubmit"
59
+ :data-center="vmForm.dataCenter"
60
+ :compute-resource="computeResource"
61
+ :compute-resource-tree="props.computeResourceTree"
62
+ @submit="emits('change-compute-resource', $event)"
63
+ @select-compute-resource-tree="
64
+ emits('select-compute-resource-tree-local', $event)
65
+ "
66
+ @get-compute-resource-tree="
67
+ emits('get-compute-resource-tree', $event)
68
+ "
69
+ @show-compute-resource-tree="
70
+ emits('show-compute-resource-tree', $event)
71
+ "
72
+ @clear-compute-resource-tree="emits('clear-compute-resource-tree')"
73
+ />
74
+ <common-vm-actions-common-select-storage
75
+ v-show="selectedStep.id === props.dynamicSteps.selectStorage"
76
+ :storage-submit="props.storageSubmit"
77
+ :datastore="props.datastore"
78
+ :is-datastore-loading="props.isDatastoreLoading"
79
+ :storage="vmForm.storage"
80
+ :get-datastore-table-func="props.getDatastoreTableFunc"
81
+ @submit="emits('change-storage', $event)"
82
+ />
83
+ <common-vm-actions-common-select-options
84
+ v-show="selectedStep.id === props.dynamicSteps.selectOptions"
85
+ :is-create-template="props.isNewVmFromTemplate"
86
+ @change="emits('change-select-options', $event)"
87
+ />
88
+ <common-vm-actions-common-select-os
89
+ v-show="
90
+ selectedStep.id === props.dynamicSteps.selectGuestOSMachineType
91
+ "
92
+ v-model:machine-type="vmForm.guestMachineType"
93
+ v-model:guest-os-family="vmForm.guestOsFamily"
94
+ v-model:guest-os-version="vmForm.guestOsVersion"
95
+ :families-options="props.guestOsFamilies"
96
+ :versions-options="props.guestOsVersions"
97
+ :machine-types-options="props.machineTypes"
98
+ :error-validation-fields="props.errorValidationFields"
99
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
100
+ />
101
+ <common-vm-actions-common-customize-hardware
102
+ v-show="selectedStep.id === props.dynamicSteps.customizeHardware"
103
+ v-model:vm-name="vmName"
104
+ v-model:guest-machine-type="props.vmSettings.guestMachineType"
105
+ v-model:guest-os-family="props.vmSettings.guestOsFamily"
106
+ v-model:guest-os-version="props.vmSettings.guestOsVersion"
107
+ :storage="vmForm.storage"
108
+ :hard-disks-for-boot-options="props.virtualHardwareHardDisksLocal"
109
+ :cd-dvd-drives-for-boot-options="
110
+ props.virtualHardwareCdDvdDrivesLocal
111
+ "
112
+ :networks-for-boot-options="props.virtualHardwareNetworksLocal"
113
+ :cd-dvd-drives="props.vmSettings.cdDvdDrives"
114
+ :hard-disks="props.vmSettings.hardDisks"
115
+ :networks="props.vmSettings.networks"
116
+ :customize-hardware-submit="props.customizeHardwareSubmit"
117
+ :max-cpus="props.vmSettings.maxCpus"
118
+ :max-memory="props.vmSettings.maxMemory"
119
+ :cpu-models="props.vmSettings.cpuModels"
120
+ :cpu="props.vmSettings.cpu"
121
+ :memory="props.vmSettings.memory"
122
+ :video-card="props.vmSettings.videoCard"
123
+ :usb-controller="props.vmSettings.usbController"
124
+ :pci-devices="props.vmSettings.pciDevices"
125
+ :selected-nav-item="props.selectedNavItem"
126
+ :hard-disks-for-edit="props.vmSettings.hardDisks"
127
+ :options="props.vmSettings.options"
128
+ :nodes="props.nodes"
129
+ :files="props.files"
130
+ :networks-table="props.networksTable"
131
+ :error-validation-fields="props.errorValidationFields"
132
+ :vm-cpu-help-text-second="props.vmCpuHelpTextSecond"
133
+ :passthrough-devices="props.passthroughDevices"
134
+ :mediated-devices="props.mediatedDevices"
135
+ :get-datastore-table-func="props.getDatastoreTableFunc"
136
+ :datastore="props.datastore"
137
+ :is-datastore-loading="props.isDatastoreLoading"
138
+ :project="props.project"
139
+ is-clone
140
+ @change-boot-order="emits('change-boot-order', $event)"
141
+ @send-data="emits('change-customize-hardware', $event)"
142
+ @get-storage="emits('get-storage', $event)"
143
+ @get-folders-or-files="emits('get-folders-or-files', $event)"
144
+ @get-active-device-child="emits('get-active-device-child', $event)"
145
+ @show-datastore-child="emits('show-datastore-child', $event)"
146
+ @get-networks-table="emits('get-networks-table', $event)"
147
+ @get-pci-devices="emits('get-pci-devices')"
148
+ />
149
+ <common-ready-to-complete
150
+ v-show="selectedStep.id === props.dynamicSteps.readyComplete"
151
+ :data="props.readyCompleteTableInfo"
152
+ />
153
+ </div>
154
+ </template>
155
+ </atoms-wizard>
156
+ </div>
157
+ </template>
158
+
159
+ <script setup lang="ts">
160
+ import type { UI_I_WizardStep } from '~/node_modules/bfg-uikit/components/ui/wizard/lib/models/interfaces'
161
+ import Wizard from '~/node_modules/bfg-uikit/components/ui/wizard/lib/utils/utils'
162
+ import type {
163
+ UI_I_DatastoreTableItem,
164
+ UI_I_FolderOrFileTreePayload,
165
+ } from '~/lib/models/store/storage/interfaces'
166
+ import type { UI_I_NetworkTableItem } from '~/lib/models/store/network/interfaces'
167
+ import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
168
+ import type { UI_I_FileTreeNode } from '~/components/lib/models/interfaces'
169
+ import type {
170
+ UI_I_ArbitraryObject,
171
+ UI_I_Localization,
172
+ } from '~/lib/models/interfaces'
173
+ import type { UI_I_SendDataCustomizeHardware } from '~/components/common/vm/actions/common/customizeHardware/lib/models/interfaces'
174
+ import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
175
+ import type {
176
+ UI_I_SendDataNewCdDvdDrive,
177
+ UI_I_SendDataNewHardDisk,
178
+ UI_I_SendDataNewNetwork,
179
+ } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
180
+ import type { UI_T_SelectedNavItem } from '~/components/common/vm/actions/common/lib/models/types'
181
+ import type { UI_I_TableInfoItem } from '~/components/atoms/table/info/lib/models/interfaces'
182
+ import type { UI_T_ChangeBootOrder } from '~/components/common/vm/actions/lib/models/types'
183
+ import type { UI_T_Project } from '~/lib/models/types'
184
+ import type {
185
+ UI_I_MediatedDevice,
186
+ UI_I_PciDevice,
187
+ UI_I_VmSettings,
188
+ } from '~/lib/models/store/vm/interfaces'
189
+ import type { UI_I_ScheduleNewTasksForm } from '~/components/common/pages/scheduledTasks/modals/lib/models/interfaces'
190
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
191
+ import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
192
+ import type { UI_I_NameTestIds } from '~/components/common/wizards/common/steps/name/lib/models/interfaces'
193
+ import type { UI_I_VmForm } from '~/components/common/vm/actions/common/lib/models/interfaces'
194
+
195
+ const vmForm = defineModel<UI_I_VmForm>('vm-form')
196
+ const schedulerTaskForm = defineModel<UI_I_ScheduleNewTasksForm>(
197
+ 'scheduler-task-form'
198
+ )
199
+ const vmName = defineModel<string>('vm-name')
200
+ const computeResource = defineModel<UI_I_TreeNode | undefined>(
201
+ 'compute-resource'
202
+ )
203
+ const location = defineModel<UI_I_TreeNode | null>('location')
204
+ const props = defineProps<{
205
+ project: UI_T_Project
206
+ vmSettings: UI_I_VmSettings | null
207
+ nodes: UI_I_FileTreeNode[]
208
+ files: UI_I_FileTreeNode[]
209
+ networksTable: UI_I_NetworkTableItem[]
210
+ datastore: UI_I_DatastoreTableItem[]
211
+ isDatastoreLoading: boolean
212
+ errorValidationFields: UI_I_ErrorValidationField[]
213
+ readyCompleteTableInfo: UI_I_TableInfoItem[]
214
+ vmCpuHelpTextSecond: string
215
+ getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
216
+ passthroughDevices: UI_I_PciDevice[]
217
+ mediatedDevices: UI_I_MediatedDevice[]
218
+ nameRequestUrl: string
219
+ wizard: Wizard
220
+ selectedScheme: number[]
221
+ selectedVirtualMachine: string
222
+ isNewVmFromTemplate: boolean | undefined
223
+ computeResourceTree: UI_I_TreeNode[] | undefined // для сферы
224
+ locationNodes: UI_I_TreeNode[] | undefined // для сферы
225
+ title: string
226
+ nameFormSubmit: null | Function
227
+ computeResourceSubmit: null | Function
228
+ storageSubmit: null | Function
229
+ customizeHardwareSubmit: null | Function
230
+ selectedNavItem: UI_T_SelectedNavItem
231
+ allowedLocationKinds: number[]
232
+ isSphere: boolean
233
+ locationDescription: string
234
+ nameTestIds: UI_I_NameTestIds
235
+ virtualHardwareHardDisksLocal: UI_I_SendDataNewHardDisk[] | null
236
+ virtualHardwareNetworksLocal: UI_I_SendDataNewNetwork[] | null
237
+ virtualHardwareCdDvdDrivesLocal: UI_I_SendDataNewCdDvdDrive[] | null
238
+ guestOsFamilies: UI_I_OptionItem[]
239
+ guestOsVersions: UI_I_ArbitraryObject<UI_I_OptionItem[]>
240
+ machineTypes: UI_I_OptionItem[]
241
+ dynamicSteps: UI_I_ArbitraryObject<number>
242
+ isLoading: boolean
243
+ }>()
244
+
245
+ const emits = defineEmits<{
246
+ (event: 'get-storage', value: UI_I_TablePayload): void
247
+ (event: 'get-folders-or-files', value: UI_I_FolderOrFileTreePayload): void
248
+ (event: 'get-active-device-child', value: UI_I_FileTreeNode): void
249
+ (event: 'show-datastore-child', value: UI_I_FileTreeNode): void
250
+ (event: 'remove-error-by-title', value: string): void
251
+ (event: 'get-networks-table', value: UI_I_TablePayload): void
252
+ (event: 'get-pci-devices'): void
253
+ (
254
+ event: 'get-compute-resource-tree',
255
+ value: { id: string | number; cb: () => void }
256
+ ): void // для сферы
257
+ (event: 'show-compute-resource-tree', value: UI_I_TreeNode): void // для сферы
258
+ (event: 'clear-compute-resource-tree'): void // для сферы
259
+ (event: 'change-steps', value: UI_I_WizardStep[]): void
260
+ (event: 'change-name', value: [string, UI_I_TreeNode | null]): void
261
+ (event: 'change-storage', value: UI_I_DatastoreTableItem | null): void
262
+ (event: 'change-select-options', value: string[]): void
263
+ (event: 'change-boot-order', value: UI_T_ChangeBootOrder): void
264
+ (event: 'change-compute-resource', value: UI_I_TreeNode): void
265
+ (
266
+ event: 'change-customize-hardware',
267
+ value: UI_I_SendDataCustomizeHardware
268
+ ): void
269
+ (event: 'select-compute-resource-tree-local', value: UI_I_TreeNode): void
270
+ (event: 'hide'): void
271
+ (event: 'finish'): void
272
+ }>()
273
+
274
+ const localization = computed<UI_I_Localization>(() => useLocal())
275
+ </script>
276
+
277
+ <style scoped lang="scss">
278
+ :deep(.has-solid.close-icon.clr-icon) {
279
+ width: 20px;
280
+ top: 0;
281
+ }
282
+ .vm-context {
283
+ padding: 16px 15px 10px 10px;
284
+ height: 100%;
285
+ display: flex;
286
+ flex-direction: column;
287
+
288
+ .context-title-wrap {
289
+ padding-bottom: 3px;
290
+ border-bottom: 1px solid #a6a6a6;
291
+
292
+ h4 {
293
+ font-weight: 700;
294
+ font-size: 13px;
295
+ color: var(--vm-context-title);
296
+ }
297
+ p {
298
+ font-weight: 400;
299
+ font-size: 13px;
300
+ color: var(--vm-context-sub-title);
301
+ }
302
+ }
303
+
304
+ .finish-block {
305
+ padding: 18px 24px 24px 24px;
306
+
307
+ .add-hosts-ready-to-complete-mt-12 {
308
+ margin-top: 12px;
309
+
310
+ .add-hosts-ready-to-complete-bold {
311
+ line-height: 18px;
312
+ font-weight: 700;
313
+ }
314
+ }
315
+ }
316
+
317
+ .vm-hardware-version {
318
+ align-self: flex-end;
319
+ margin-top: auto;
320
+ }
321
+ }
322
+
323
+ :deep(.modal .modal-dialog .modal-content .modal-footer) {
324
+ flex: unset;
325
+ height: unset;
326
+ min-height: unset;
327
+ }
328
+ :deep(.wizard-modal-titlebar h3) {
329
+ color: #000;
330
+ font-size: 24px;
331
+ font-weight: 200;
332
+ line-height: 27px;
333
+ margin: 0;
334
+ padding: 0;
335
+ }
336
+ :deep(.clr-wizard-stepnav-item) {
337
+ padding-left: 0;
338
+ }
339
+ :deep(.clr-wizard-stepnav
340
+ .clr-wizard-stepnav-item
341
+ button
342
+ .clr-wizard-stepnav-link-title) {
343
+ width: 189px;
344
+ font-weight: 700;
345
+ font-size: 13px;
346
+ }
347
+
348
+ #vm-wizard-notification {
349
+ h3 {
350
+ color: var(--global-font-color7);
351
+ margin-top: 6px;
352
+ }
353
+ p {
354
+ color: var(--global-font-color6);
355
+ line-height: 16px;
356
+ }
357
+ }
358
+
359
+ .power-on-by-default-wrap {
360
+ display: flex;
361
+ align-items: center;
362
+
363
+ input {
364
+ margin-right: 6px;
365
+ }
366
+ }
367
+
368
+ .new-task-form {
369
+ padding: 0 25px 0 5px;
370
+ }
371
+ </style>
372
+
373
+ <style>
374
+ :root {
375
+ --vm-context-title: #333;
376
+ --vm-context-sub-title: #000;
377
+ }
378
+ :root.dark-theme {
379
+ --vm-context-title: #adbbc4;
380
+ --vm-context-sub-title: #adbbc4;
381
+ }
382
+ </style>