bfg-common 1.5.573 → 1.5.574

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 (35) hide show
  1. package/assets/localization/local_be.json +29 -6
  2. package/assets/localization/local_en.json +29 -6
  3. package/assets/localization/local_hy.json +29 -6
  4. package/assets/localization/local_kk.json +29 -6
  5. package/assets/localization/local_ru.json +29 -6
  6. package/assets/localization/local_zh.json +30 -7
  7. package/components/common/diagramMain/DiagramMain.vue +1 -1
  8. package/components/common/modals/confirmByInput/ConfirmByInput.vue +9 -1
  9. package/components/common/modals/confirmByInput/ConfirmByInputNew.vue +7 -2
  10. package/components/common/monitor/overview/filters/lib/config/filterOptions.ts +1 -0
  11. package/components/common/pages/backups/modals/createBackup/CreateBackup.vue +1 -1
  12. package/components/common/pages/backups/modals/createBackup/New.vue +8 -2
  13. package/components/common/pages/backups/modals/createBackup/lib/config/steps.ts +2 -1
  14. package/components/common/pages/backups/modals/restore/Restore.vue +9 -5
  15. package/components/common/pages/backups/modals/restore/RestoreNew.vue +13 -3
  16. package/components/common/pages/backups/modals/restore/RestoreOld.vue +6 -18
  17. package/components/common/pages/scheduledTasks/table/Table.vue +1 -1
  18. package/components/common/vm/actions/add/Add.vue +7 -6
  19. package/components/common/vm/actions/clone/Clone.vue +7 -6
  20. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +3 -0
  21. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareNew.vue +3 -1
  22. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +3 -1
  23. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/lib/config/options.ts +1 -1
  24. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +28 -28
  25. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +2 -0
  26. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsOld.vue +2 -0
  27. package/components/common/vm/actions/common/customizeHardware/vmoptions/tools/Tools.vue +42 -26
  28. package/components/common/vm/actions/common/customizeHardware/vmoptions/tools/ToolsNew.vue +26 -7
  29. package/components/common/vm/actions/common/customizeHardware/vmoptions/tools/ToolsOld.vue +50 -24
  30. package/components/common/vm/actions/common/lib/models/interfaces.ts +1 -0
  31. package/components/common/vm/actions/common/select/os/New.vue +19 -0
  32. package/components/common/vm/actions/common/select/os/Old.vue +34 -0
  33. package/components/common/vm/actions/common/select/os/Os.vue +25 -0
  34. package/package.json +3 -1
  35. package/store/tasks/mappers/recentTasks.ts +4 -0
@@ -566,7 +566,8 @@ const vmForm = ref<UI_I_VmForm>({
566
566
  })
567
567
 
568
568
  const isLoadingComputeTree = ref<boolean>(false)
569
- const onChangeName = (_name: string, node: UI_I_TreeNode | null): void => {
569
+ const onChangeName = (data: [string, UI_I_TreeNode | null]): void => {
570
+ const [_name, node] = data
570
571
  // vmForm.value.name = name
571
572
  if (isSphere.value) {
572
573
  vmForm.value.locationPath = node.id
@@ -693,6 +694,10 @@ const machineTypes = ref<UI_I_OptionItem[]>(capabilities.value.machineTypes)
693
694
 
694
695
  // Для сферы
695
696
  const computeResourcePath = ref<string>('')
697
+ const onSelectComputeResourceTree = (node: UI_I_TreeNode): void => {
698
+ emits('select-compute-resource-tree', node)
699
+ computeResourcePath.value = String(node.id)
700
+ }
696
701
  watch(
697
702
  () => vmForm.value.computeResource,
698
703
  (newValue, oldValue) => {
@@ -700,12 +705,8 @@ watch(
700
705
  onSelectComputeResourceTree(newValue)
701
706
  }
702
707
  },
703
- { deep: true }
708
+ { deep: true, immediate: true }
704
709
  )
705
- const onSelectComputeResourceTree = (node: UI_I_TreeNode): void => {
706
- emits('select-compute-resource-tree', node)
707
- computeResourcePath.value = String(node.id)
708
- }
709
710
 
710
711
  // watch(vmSettings, (newValue) => {
711
712
  // vmName.value = newValue?.name || ''
@@ -36,6 +36,7 @@
36
36
  :vm-cpu-help-text-second="vmCpuHelpTextSecond"
37
37
  :compute-resource="props.computeResource"
38
38
  :compatibility-info="props.compatibilityInfo"
39
+ :network-value-prop="networkValueProp"
39
40
  @add-device="onAddDevice"
40
41
  @get-storage="emits('get-storage', $event)"
41
42
  @remove-network="onRemoveNetwork"
@@ -94,6 +95,7 @@
94
95
  :mediated-devices="mediatedDevices"
95
96
  :vm-cpu-help-text-second="vmCpuHelpTextSecond"
96
97
  :compute-resource="props.computeResource"
98
+ :network-value-prop="networkValueProp"
97
99
  @add-device="onAddDevice"
98
100
  @get-storage="emits('get-storage', $event)"
99
101
  @remove-network="onRemoveNetwork"
@@ -372,6 +374,7 @@ const onRollBackHardDisk = (index: number): void => {
372
374
  })
373
375
  }
374
376
 
377
+ const networkValueProp = props.project === 'sphere' ? 'network' : 'net_bridge'
375
378
  const networksType = ref<UI_T_NetworkType[]>(['new'])
376
379
  const networksIndex = ref<number[]>([0])
377
380
  if (!model.value.network_devices?.length) {
@@ -162,7 +162,7 @@
162
162
  >
163
163
  <common-vm-actions-common-customize-hardware-virtual-hardware-new-network
164
164
  v-model:network="item.network"
165
- v-model:net-bridge="item.net_bridge"
165
+ v-model:network-value="item[props.networkValueProp]"
166
166
  v-model:mac="item.mac"
167
167
  v-model:model="item.model"
168
168
  :index="props.networksIndex[key]"
@@ -172,6 +172,7 @@
172
172
  :is-edit="props.isEdit"
173
173
  :state="props.state"
174
174
  :project="props.project"
175
+ :network-value-prop="props.networkValueProp"
175
176
  @remove="emits('remove-network', props.networksIndex[key])"
176
177
  @invalid="
177
178
  emits('set-invalid-network', [$event, props.networksIndex[key]])
@@ -391,6 +392,7 @@ const props = withDefaults(
391
392
  cdDvdDrivesIndex: number[]
392
393
  errorValidationFields: UI_I_ErrorValidationField<string>[]
393
394
  getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
395
+ networkValueProp: 'network' | 'net_bridge'
394
396
  cpu?: API_UI_I_VmEditCpu
395
397
  state?: string | number
396
398
  // hardDisks?: UI_I_SendDataNewHardDisk[] | null
@@ -142,7 +142,7 @@
142
142
  >
143
143
  <common-vm-actions-common-customize-hardware-virtual-hardware-new-network
144
144
  v-model:network="item.network"
145
- v-model:net-bridge="item.net_bridge"
145
+ v-model:network-value="item[props.networkValueProp]"
146
146
  v-model:mac="item.mac"
147
147
  v-model:model="item.model"
148
148
  :index="props.networksIndex[key]"
@@ -152,6 +152,7 @@
152
152
  :is-edit="props.isEdit"
153
153
  :state="props.state"
154
154
  :project="props.project"
155
+ :network-value-prop="props.networkValueProp"
155
156
  @remove="emits('remove-network', props.networksIndex[key])"
156
157
  @invalid="
157
158
  emits('set-invalid-network', [$event, props.networksIndex[key]])
@@ -366,6 +367,7 @@ const props = withDefaults(
366
367
  cdDvdDrivesIndex: number[]
367
368
  errorValidationFields: UI_I_ErrorValidationField[]
368
369
  getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
370
+ networkValueProp: 'network' | 'net_bridge'
369
371
  cpu?: API_UI_I_VmEditCpu
370
372
  state?: string | number
371
373
  videoCard?: UI_I_SendDataVideoCard
@@ -5,7 +5,7 @@ export const cdDvdDriveOptionsFunc = (
5
5
  localization: UI_I_Localization
6
6
  ): UI_I_OptionItem[] => {
7
7
  return [
8
- { text: localization.common.clientDevice, value: 'clientDevice' },
8
+ { text: '---', value: 'clientDevice' },
9
9
  { text: localization.common.datastoreIsoFile, value: 'datastoreIsoFile' },
10
10
  ]
11
11
  }
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <common-vm-actions-common-customize-hardware-virtual-hardware-new-network-new
3
3
  v-if="isNewView"
4
- v-model:selected-location="netBridge"
4
+ v-model:selected-location="networkValue"
5
5
  v-model:adapter-type="model"
6
6
  v-model:mac-address="mac"
7
7
  v-model:mac-address-type="macAddressType"
@@ -26,7 +26,7 @@
26
26
  />
27
27
  <common-vm-actions-common-customize-hardware-virtual-hardware-new-network-old
28
28
  v-else
29
- v-model:selected-location="netBridge"
29
+ v-model:selected-location="networkValue"
30
30
  v-model:adapter-type="model"
31
31
  v-model:mac-address="mac"
32
32
  v-model:mac-address-type="macAddressType"
@@ -68,17 +68,6 @@ const network = defineModel<UI_I_CreateVmData['network_devices'][0]['network']>(
68
68
  'network',
69
69
  { required: true }
70
70
  )
71
- const netBridge = defineModel<
72
- UI_I_CreateVmData['network_devices'][0]['net_bridge']
73
- >('netBridge', { required: true })
74
- watch(netBridge, (newValue) => {
75
- const selectedOption = locationOptions.value.find(
76
- (option) => option.value === newValue
77
- )
78
- if (selectedOption) {
79
- network.value = selectedOption.text
80
- }
81
- })
82
71
 
83
72
  const mac = defineModel<UI_I_CreateVmData['network_devices'][0]['mac']>('mac', {
84
73
  required: true,
@@ -98,6 +87,7 @@ const props = withDefaults(
98
87
  networksTable: UI_I_NetworkTableItem[]
99
88
  errorValidationFields: UI_I_ErrorValidationField[]
100
89
  isEdit: boolean
90
+ networkValueProp: 'network' | 'net_bridge'
101
91
  state?: string | number
102
92
  }>(),
103
93
  {
@@ -111,11 +101,21 @@ const emits = defineEmits<{
111
101
  (event: 'get-networks-table', value: UI_I_TablePayload): void
112
102
  }>()
113
103
 
104
+ const networkValue = defineModel<
105
+ UI_I_CreateVmData['network_devices'][0][props.networkValueProp]
106
+ >('networkValue', { required: true })
107
+ watch(networkValue, (newValue) => {
108
+ const selectedOption = locationOptions.value.find(
109
+ (option) => option.value === newValue
110
+ )
111
+ if (selectedOption) {
112
+ network.value = selectedOption.text
113
+ }
114
+ })
115
+
114
116
  const { $store }: any = useNuxtApp()
115
117
  const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
116
118
 
117
- const valueProp = props.project === 'sphere' ? 'network' : 'net_bridge'
118
-
119
119
  const localization = computed<UI_I_Localization>(() => useLocal())
120
120
 
121
121
  const isRunning = computed<boolean>(() => {
@@ -144,9 +144,9 @@ const label = computed<string>(() => {
144
144
  const selectedLocationOld = ref<string>('')
145
145
  const locationOptions = ref<UI_I_OptionItem[]>([])
146
146
 
147
- if (netBridge.value) {
147
+ if (networkValue.value) {
148
148
  locationOptions.value = [
149
- { text: network.value, value: netBridge.value },
149
+ { text: network.value, value: networkValue.value },
150
150
  { text: `${localization.value.common.browse}...`, value: '' },
151
151
  ]
152
152
  }
@@ -188,23 +188,23 @@ watch(
188
188
  value: 'noAvailableNetworks',
189
189
  },
190
190
  ]
191
- netBridge.value = 'noAvailableNetworks'
191
+ networkValue.value = 'noAvailableNetworks'
192
192
  newNetworkInvalid.value = true
193
193
  return
194
194
  }
195
195
  newNetworkInvalid.value = false
196
196
 
197
197
  const isExistValue = newValue.some(
198
- (networkLocal) => networkLocal[valueProp] === netBridge.value
198
+ (networkLocal) => networkLocal[props.networkValueProp] === networkValue.value
199
199
  )
200
200
 
201
201
  if (props.type === 'edit' || isExistValue) return
202
202
 
203
- selectedLocationOld.value = newValue[0][valueProp] || ''
204
- netBridge.value = newValue[0][valueProp] || ''
203
+ selectedLocationOld.value = newValue[0][props.networkValueProp] || ''
204
+ networkValue.value = newValue[0][props.networkValueProp] || ''
205
205
 
206
206
  locationOptions.value = [
207
- { text: newValue[0].name, value: newValue[0][valueProp] },
207
+ { text: newValue[0].name, value: newValue[0][props.networkValueProp] },
208
208
  { text: `${localization.value.common.browse}...`, value: '' },
209
209
  ]
210
210
  },
@@ -214,7 +214,7 @@ watch(
214
214
  const locationModalIsShow = ref<boolean>(false)
215
215
  const onHideLocationModal = (): void => {
216
216
  locationModalIsShow.value = false
217
- netBridge.value = selectedLocationOld.value
217
+ networkValue.value = selectedLocationOld.value
218
218
  }
219
219
  const changeLocation = (event: UI_I_HTMLSelectElement): void => {
220
220
  const value = event.target.value
@@ -224,16 +224,16 @@ const changeLocation = (event: UI_I_HTMLSelectElement): void => {
224
224
  }
225
225
 
226
226
  selectedLocationOld.value = value
227
- netBridge.value = value
227
+ networkValue.value = value
228
228
  }
229
229
  const onSelectLocation = (networkLocal: UI_I_NetworkTableItem): void => {
230
230
  locationModalIsShow.value = false
231
231
 
232
- selectedLocationOld.value = networkLocal[valueProp]
233
- netBridge.value = networkLocal[valueProp]
232
+ selectedLocationOld.value = networkLocal[props.networkValueProp]
233
+ networkValue.value = networkLocal[props.networkValueProp]
234
234
 
235
235
  const hasNetwork = locationOptions.value.some(
236
- (option) => option.value === networkLocal[valueProp]
236
+ (option) => option.value === networkLocal[props.networkValueProp]
237
237
  )
238
238
  if (hasNetwork) {
239
239
  return
@@ -241,7 +241,7 @@ const onSelectLocation = (networkLocal: UI_I_NetworkTableItem): void => {
241
241
 
242
242
  locationOptions.value = [
243
243
  ...locationOptions.value.slice(0, -1),
244
- { text: networkLocal.name, value: networkLocal[valueProp] },
244
+ { text: networkLocal.name, value: networkLocal[props.networkValueProp] },
245
245
  locationOptions.value[locationOptions.value.length - 1],
246
246
  ]
247
247
  }
@@ -17,6 +17,8 @@
17
17
  />
18
18
  <common-vm-actions-common-customize-hardware-vmoptions-tools
19
19
  v-model="model.options.guest_tools"
20
+ :is-edit="props.isEdit"
21
+ :state="props.state"
20
22
  />
21
23
  <common-vm-actions-common-customize-hardware-vmoptions-boot-options
22
24
  v-model="model"
@@ -19,6 +19,8 @@
19
19
  />
20
20
  <common-vm-actions-common-customize-hardware-vmoptions-tools
21
21
  v-model="model.options.guest_tools"
22
+ :is-edit="props.isEdit"
23
+ :state="props.state"
22
24
  />
23
25
  <common-vm-actions-common-customize-hardware-vmoptions-boot-options
24
26
  v-model="model"
@@ -1,26 +1,42 @@
1
- <template>
2
- <common-vm-actions-common-customize-hardware-vmoptions-tools-new
3
- v-if="isNewView"
4
- v-model:tools="model.enabled"
5
- />
6
- <common-vm-actions-common-customize-hardware-vmoptions-tools-old
7
- v-else
8
- v-model:tools="model.enabled"
9
- />
10
- </template>
11
-
12
- <script setup lang="ts">
13
- import type { UI_I_CreateVmData } from '~/components/common/vm/actions/common/lib/models/interfaces'
14
-
15
- const model = defineModel<UI_I_CreateVmData['options']['guest_tools']>({ required: true })
16
-
17
- const { $store }: any = useNuxtApp()
18
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
19
- </script>
20
-
21
- <style scoped lang="scss">
22
- #tools-1,
23
- #tools-2 {
24
- margin: 0 4px 4px 0;
25
- }
26
- </style>
1
+ <template>
2
+ <common-vm-actions-common-customize-hardware-vmoptions-tools-new
3
+ v-if="isNewView"
4
+ v-model:balloon="model.balloon"
5
+ :disabled="isDisabled"
6
+ />
7
+ <common-vm-actions-common-customize-hardware-vmoptions-tools-old
8
+ v-else
9
+ v-model:balloon="model.balloon"
10
+ :disabled="isDisabled"
11
+ />
12
+ </template>
13
+
14
+ <script setup lang="ts">
15
+ import type { UI_I_CreateVmData } from '~/components/common/vm/actions/common/lib/models/interfaces'
16
+
17
+ const model = defineModel<UI_I_CreateVmData['options']['guest_tools']>({
18
+ required: true,
19
+ })
20
+
21
+ const props = withDefaults(
22
+ defineProps<{
23
+ isEdit: boolean
24
+ state?: string | number
25
+ }>(),
26
+ {
27
+ state: undefined,
28
+ }
29
+ )
30
+
31
+ const { $store }: any = useNuxtApp()
32
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
33
+
34
+ const isDisabled = computed<boolean>(() => props.isEdit && props.state !== 1)
35
+ </script>
36
+
37
+ <style scoped lang="scss">
38
+ #tools-1,
39
+ #tools-2 {
40
+ margin: 0 4px 4px 0;
41
+ }
42
+ </style>
@@ -1,7 +1,5 @@
1
1
  <template>
2
- <!-- TODO 700-->
3
2
  <ui-stack-block
4
- v-show="false"
5
3
  test-id="tools-stack-block"
6
4
  has-children
7
5
  is-toggle-on-stack-view-key
@@ -16,16 +14,32 @@
16
14
  </div>
17
15
  </template>
18
16
  <template #stackChildren>
17
+ <!-- TODO 700-->
18
+ <!-- <ui-stack-block :has-children="false">-->
19
+ <!-- <template #stackBlockKey>-->
20
+ <!-- <span class="mt-2">{{ localization.common.toolsEnable }}</span>-->
21
+ <!-- </template>-->
22
+ <!-- <template #stackBlockContent>-->
23
+ <!-- <ui-checkbox-->
24
+ <!-- id="tools-2"-->
25
+ <!-- v-model="tools"-->
26
+ <!-- :label-text="localization.common.enable"-->
27
+ <!-- test-id="tools-2-checkbox"-->
28
+ <!-- size="md"-->
29
+ <!-- />-->
30
+ <!-- </template>-->
31
+ <!-- </ui-stack-block>-->
19
32
  <ui-stack-block :has-children="false">
20
33
  <template #stackBlockKey>
21
- <span class="mt-2">{{ localization.common.toolsEnable }}</span>
34
+ <span class="mt-2">{{ localization.common.balloon }}</span>
22
35
  </template>
23
36
  <template #stackBlockContent>
24
37
  <ui-checkbox
25
- id="tools-2"
26
- v-model="tools"
38
+ id="balloon"
39
+ v-model="balloon"
27
40
  :label-text="localization.common.enable"
28
- test-id="tools-2-checkbox"
41
+ :disabled="props.disabled"
42
+ test-id="balloon-checkbox"
29
43
  size="md"
30
44
  />
31
45
  </template>
@@ -37,7 +51,12 @@
37
51
  <script setup lang="ts">
38
52
  import type { UI_I_Localization } from '~/lib/models/interfaces'
39
53
 
40
- const tools = defineModel<boolean>('tools', { required: true })
54
+ // const tools = defineModel<boolean>('tools', { required: true })
55
+ const balloon = defineModel<boolean>('balloon', { required: true })
56
+
57
+ const props = defineProps<{
58
+ disabled: boolean
59
+ }>()
41
60
 
42
61
  const localization = computed<UI_I_Localization>(() => useLocal())
43
62
  </script>
@@ -1,6 +1,5 @@
1
1
  <template>
2
- <!-- TODO 700-->
3
- <div v-show="false" class="hardware-tools">
2
+ <div class="hardware-tools">
4
3
  <atoms-stack-block test-id="tools-stack-block" has-children>
5
4
  <template #stackBlockKey>
6
5
  <div
@@ -12,31 +11,52 @@
12
11
  </div>
13
12
  </template>
14
13
  <template #stackChildren>
14
+ <!-- TODO 700-->
15
+ <!-- <atoms-stack-block-->
16
+ <!-- :has-children="false"-->
17
+ <!-- test-id="tools-stack-block-children"-->
18
+ <!-- >-->
19
+ <!-- <template #stackBlockKey>-->
20
+ <!-- {{ localization.common.toolsEnable }}-->
21
+ <!-- </template>-->
22
+ <!-- <template #stackBlockContent>-->
23
+ <!-- <div-->
24
+ <!-- :title="localization.common.inDevelopment"-->
25
+ <!-- class="cursor-not-allowed"-->
26
+ <!-- >-->
27
+ <!-- <input-->
28
+ <!-- id="tools-2"-->
29
+ <!-- v-model="tools"-->
30
+ <!-- disabled-->
31
+ <!-- data-id="tools-2-checkbox"-->
32
+ <!-- type="checkbox"-->
33
+ <!-- />-->
34
+ <!-- <label-->
35
+ <!-- for="tools-2"-->
36
+ <!-- class="label-text-normal cursor-not-allowed"-->
37
+ <!-- >{{ localization.common.enable }}</label-->
38
+ <!-- >-->
39
+ <!-- </div>-->
40
+ <!-- </template>-->
41
+ <!-- </atoms-stack-block>-->
15
42
  <atoms-stack-block
16
- :has-children="false"
17
- test-id="tools-stack-block-children"
43
+ :has-children="false"
44
+ test-id="tools-stack-block-children"
18
45
  >
19
46
  <template #stackBlockKey>
20
- {{ localization.common.toolsEnable }}
47
+ {{ localization.common.balloon }}
21
48
  </template>
22
49
  <template #stackBlockContent>
23
- <div
24
- :title="localization.common.inDevelopment"
25
- class="cursor-not-allowed"
26
- >
27
- <input
28
- id="tools-2"
29
- v-model="tools"
30
- disabled
31
- data-id="tools-2-checkbox"
32
- type="checkbox"
33
- />
34
- <label
35
- for="tools-2"
36
- class="label-text-normal cursor-not-allowed"
37
- >{{ localization.common.enable }}</label
38
- >
39
- </div>
50
+ <input
51
+ id="balloon"
52
+ v-model="balloon"
53
+ :disabled="props.disabled"
54
+ data-id="balloon-checkbox"
55
+ type="checkbox"
56
+ />
57
+ <label for="balloon" class="label-text-normal">{{
58
+ localization.common.enable
59
+ }}</label>
40
60
  </template>
41
61
  </atoms-stack-block>
42
62
  </template>
@@ -47,14 +67,20 @@
47
67
  <script setup lang="ts">
48
68
  import type { UI_I_Localization } from '~/lib/models/interfaces'
49
69
 
50
- const tools = defineModel<boolean>('tools', { required: true })
70
+ // const tools = defineModel<boolean>('tools', { required: true })
71
+ const balloon = defineModel<boolean>('balloon', { required: true })
72
+
73
+ const props = defineProps<{
74
+ disabled: boolean
75
+ }>()
51
76
 
52
77
  const localization = computed<UI_I_Localization>(() => useLocal())
53
78
  </script>
54
79
 
55
80
  <style scoped lang="scss">
56
81
  #tools-1,
57
- #tools-2 {
82
+ #tools-2,
83
+ #balloon {
58
84
  margin: 0 4px 4px 0;
59
85
  }
60
86
  </style>
@@ -179,6 +179,7 @@ export interface UI_I_CreateVmData {
179
179
  guest_tools: {
180
180
  enabled: boolean
181
181
  synchronized_time: boolean
182
+ balloon: boolean
182
183
  }
183
184
  boot_options: {
184
185
  firmware: string
@@ -44,6 +44,20 @@
44
44
  @change="emits('remove-error-by-title', 'guest_os_version')"
45
45
  />
46
46
  </div>
47
+ <div class="select-wrap mb-4">
48
+ <label for="profile-select" class="select-label">{{
49
+ localization.vmWizard.profile
50
+ }}</label>
51
+
52
+ <ui-select
53
+ v-model="profile"
54
+ :items="props.profileOptions"
55
+ :error-text="props.apiErrorProfile"
56
+ test-id="vm-wizard-profile-select"
57
+ width="max-content"
58
+ @change="emits('remove-error-by-title', 'profile')"
59
+ />
60
+ </div>
47
61
  </div>
48
62
  </template>
49
63
 
@@ -60,6 +74,9 @@ const guestOsFamily = defineModel<UI_I_OptionItem | null>('guest-os-family', {
60
74
  const guestOsVersion = defineModel<UI_I_OptionItem | null>('guest-os-version', {
61
75
  required: true,
62
76
  })
77
+ const profile = defineModel<UI_I_OptionItem | null>('profile', {
78
+ required: true,
79
+ })
63
80
 
64
81
  const props = defineProps<{
65
82
  apiErrorMachineType: string
@@ -68,6 +85,8 @@ const props = defineProps<{
68
85
  osOptions: UI_I_OptionItem[]
69
86
  apiErrorGuestOsVersion: string
70
87
  versionsOptions: UI_I_OptionItem[]
88
+ apiErrorProfile: string
89
+ profileOptions: UI_I_OptionItem[]
71
90
  }>()
72
91
  const emits = defineEmits<{
73
92
  (event: 'remove-error-by-title', value: string): void
@@ -91,6 +91,35 @@
91
91
  <template #content>{{ props.apiErrorGuestOsVersion }}</template>
92
92
  </atoms-tooltip-error>
93
93
  </div>
94
+ <div class="select-os-block os-select-wrap table-row">
95
+ <label for="profile-select" class="table-cell"
96
+ >{{ localization.vmWizard.profile }}:</label
97
+ >
98
+
99
+ <atoms-tooltip-error
100
+ :has-error="!!props.apiErrorProfile"
101
+ selector="#vm-wizard-profile-select"
102
+ @remove="emits('remove-error-by-title', 'profile')"
103
+ >
104
+ <template #elem>
105
+ <select
106
+ id="vm-wizard-profile-select"
107
+ v-model="profile"
108
+ data-id="vm-wizard-profile-select"
109
+ class="table-cell"
110
+ >
111
+ <option
112
+ v-for="item in props.profileOptions"
113
+ :key="item.value"
114
+ :value="item"
115
+ >
116
+ {{ item.text }}
117
+ </option>
118
+ </select>
119
+ </template>
120
+ <template #content>{{ props.apiErrorProfile }}</template>
121
+ </atoms-tooltip-error>
122
+ </div>
94
123
  </div>
95
124
  </template>
96
125
 
@@ -107,6 +136,9 @@ const guestOsFamily = defineModel<UI_I_OptionItem | null>('guest-os-family', {
107
136
  const guestOsVersion = defineModel<UI_I_OptionItem | null>('guest-os-version', {
108
137
  required: true,
109
138
  })
139
+ const profile = defineModel<UI_I_OptionItem | null>('profile', {
140
+ required: true,
141
+ })
110
142
 
111
143
  const props = defineProps<{
112
144
  apiErrorMachineType: string
@@ -115,6 +147,8 @@ const props = defineProps<{
115
147
  osOptions: UI_I_OptionItem[]
116
148
  apiErrorGuestOsVersion: string
117
149
  versionsOptions: UI_I_OptionItem[]
150
+ apiErrorProfile: string
151
+ profileOptions: UI_I_OptionItem[]
118
152
  }>()
119
153
  const emits = defineEmits<{
120
154
  (event: 'remove-error-by-title', value: string): void