bfg-common 1.5.682 → 1.5.684

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.
@@ -1,199 +1,253 @@
1
- <template>
2
- <component
3
- :is="currentComponent"
4
- v-model:selected-type="selectedType"
5
- v-model:direct-path-io="directPathIo"
6
- v-model:dynamic-direct-path-io="dynamicDirectPathIo"
7
- v-model:nvidia-grid-profile="nvidiaGridProfile"
8
- :index="props.index"
9
- :passthrough-devices="props.passthroughDevices"
10
- :mediated-devices="props.mediatedDevices"
11
- :type="props.type"
12
- :is-removable="isRemovable"
13
- :label="label"
14
- :selected-label="selectedLabel"
15
- :pci-device-type-options="pciDeviceTypeOptions"
16
- @remove="emits('remove')"
17
- />
18
- </template>
19
-
20
- <script setup lang="ts">
21
- import type { UI_I_Localization } from '~/lib/models/interfaces'
22
- import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
23
- import type { UI_I_SendDataNewPciDevice } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
24
- import type { UI_T_PciDeviceType } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/types'
25
- import type {
26
- UI_I_MediatedDevice,
27
- UI_I_PciDevice,
28
- } from '~/lib/models/store/vm/interfaces'
29
- import type { UI_I_Option } from '~/components/atoms/select/lib/models/interfaces'
30
- import { pciDeviceTypeOptionsFunc } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/lib/config/options'
31
-
32
- const props = withDefaults(
33
- defineProps<{
34
- index: number
35
- pciDevice: UI_I_SendDataNewPciDevice
36
- passthroughDevices: UI_I_PciDevice[]
37
- mediatedDevices: UI_I_MediatedDevice[]
38
- type: UI_T_PciDeviceType
39
- isEdit: boolean
40
- state?: string | number
41
- // errorValidationFields: UI_I_ErrorValidationField<string>[]
42
- }>(),
43
- {
44
- state: undefined,
45
- }
46
- )
47
- const emits = defineEmits<{
48
- (event: 'send-data', value: UI_I_SendDataNewPciDevice): void
49
- (event: 'remove'): void
50
- }>()
51
-
52
- const { $store }: any = useNuxtApp()
53
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
54
- const currentComponent = computed(() =>
55
- isNewView.value
56
- ? defineAsyncComponent(() => import('./New.vue'))
57
- : defineAsyncComponent(() => import('./Old.vue'))
58
- )
59
-
60
- const localization = computed<UI_I_Localization>(() => useLocal())
61
-
62
- const isRunning = computed<boolean>(() => {
63
- return props.state === 2
64
- })
65
-
66
- const isRemovable = computed<boolean>(() => {
67
- return !props.isEdit || !isRunning.value
68
- })
69
-
70
- const label = computed<string>(() => {
71
- if (props.type === 'edit')
72
- return `${localization.value.common.newPciDevice} ${props.index + 1}`
73
-
74
- return `${localization.value.common.pciDevice} *`
75
- })
76
-
77
- const selectedLabel = computed<string>(() => {
78
- if (props.pciDevice.address) {
79
- return `${props.pciDevice.address} | ${props.pciDevice.device_name}`
80
- }
81
- switch (selectedType.value.value) {
82
- case 'direct_path_io':
83
- return `${directPathIo.value?.address} | ${directPathIo.value?.device_name}`
84
- case 'dynamic_direct_path_io':
85
- return `${dynamicDirectPathIo.value?.address} | ${dynamicDirectPathIo.value?.device_name}`
86
- default:
87
- return nvidiaGridProfile.value?.text
88
- }
89
- })
90
-
91
- const pciDeviceTypeOptions = ref<UI_I_OptionItem[]>(
92
- pciDeviceTypeOptionsFunc(
93
- !props.passthroughDevices.length,
94
- !props.mediatedDevices.length
95
- )
96
- )
97
- const selectedType = ref<UI_I_OptionItem>(pciDeviceTypeOptions.value[0])
98
- pciDeviceTypeOptions.value.forEach((option) => {
99
- if (!option.disabled) selectedType.value = option
100
- })
101
-
102
- const directPathIo = ref<string>('') /// TODO
103
- const dynamicDirectPathIo = ref<UI_I_PciDevice>(props.passthroughDevices[0])
104
- const nvidiaGridProfile = ref<UI_I_Option | null>(null)
105
-
106
- watch(
107
- [() => props.pciDevice, () => props.mediatedDevices],
108
- ([newValue1]) => {
109
- // const passthroughDevice = props.passthroughDevices.find(
110
- // (item) => item.address === newValue.address
111
- // )
112
- // passthroughDevice && (directPathIo.value = passthroughDevice) // Todo change
113
- if (newValue1) {
114
- // directPathIo.value = newValue1
115
- const passthroughDevice = props.passthroughDevices.find((device) => {
116
- return (
117
- device.class_name + '_' + device.address ===
118
- newValue1.class_name + '_' + newValue1.address
119
- )
120
- })
121
- if (passthroughDevice) {
122
- dynamicDirectPathIo.value = passthroughDevice
123
- }
124
-
125
- const mediatedDevice = props.mediatedDevices.find((device) => {
126
- return (
127
- device.profile_name + '_' + device.root_device ===
128
- newValue1.class_name + '_' + newValue1.address
129
- )
130
- })
131
- if (mediatedDevice) {
132
- nvidiaGridProfile.value = {
133
- text: mediatedDevice.human_readable,
134
- value: mediatedDevice.profile_name + '_' + mediatedDevice.root_device,
135
- }
136
-
137
- selectedType.value =
138
- pciDeviceTypeOptions.value.find(
139
- (option) => option.value === 'nvidia_grid'
140
- ) || selectedType.value
141
- }
142
- }
143
- },
144
- { immediate: true, deep: true }
145
- )
146
-
147
- const sendData = computed<UI_I_SendDataNewPciDevice>(() => {
148
- const nvidia = props.mediatedDevices.find(
149
- (device) =>
150
- nvidiaGridProfile.value?.value ===
151
- device.profile_name + '_' + device.root_device
152
- )
153
- switch (selectedType.value.value) {
154
- case 'direct_path_io':
155
- return {
156
- address: '',
157
- vendor_name: '',
158
- class_name: '',
159
- device_name: '',
160
- mediated_device: false,
161
- }
162
- case 'dynamic_direct_path_io':
163
- return {
164
- address: dynamicDirectPathIo.value?.address || '',
165
- vendor_name: dynamicDirectPathIo.value?.vendor_name || '',
166
- class_name: dynamicDirectPathIo.value?.class_name || '',
167
- device_name: dynamicDirectPathIo.value?.device_name || '',
168
- mediated_device: false,
169
- }
170
- case 'nvidia_grid':
171
- return {
172
- address: nvidia?.root_device || '',
173
- vendor_name: '',
174
- class_name: nvidia?.profile_name || '',
175
- device_name: nvidia?.name || '',
176
- mediated_device: true,
177
- mediated_device_uuid: '',
178
- }
179
- default:
180
- return {
181
- address: '',
182
- vendor_name: '',
183
- class_name: '',
184
- device_name: '',
185
- mediated_device: false,
186
- }
187
- }
188
- })
189
-
190
- watch(
191
- sendData,
192
- (newValue) => {
193
- emits('send-data', props.type === 'edit' ? props.pciDevice : newValue)
194
- },
195
- { immediate: true }
196
- )
197
- </script>
198
-
199
- <style scoped lang="scss"></style>
1
+ <template>
2
+ <component
3
+ :is="currentComponent"
4
+ v-model:selected-type="selectedType"
5
+ v-model:direct-path-io="directPathIo"
6
+ v-model:dynamic-direct-path-io="dynamicDirectPathIo"
7
+ v-model:nvidia-grid-profile="nvidiaGridProfile"
8
+ :index="props.index"
9
+ :passthrough-devices="props.passthroughDevices"
10
+ :mediated-devices="props.mediatedDevices"
11
+ :type="props.type"
12
+ :is-removable="isRemovable"
13
+ :label="label"
14
+ :selected-label="selectedLabel"
15
+ :pci-device-type-options="pciDeviceTypeOptions"
16
+ @remove="emits('remove')"
17
+ />
18
+ </template>
19
+
20
+ <script setup lang="ts">
21
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
22
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
23
+ import type { UI_I_SendDataNewPciDevice } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
24
+ import type { UI_T_PciDeviceType } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/types'
25
+ import type {
26
+ UI_I_MediatedDevice,
27
+ UI_I_PciDevice,
28
+ } from '~/lib/models/store/vm/interfaces'
29
+ import type { UI_I_Option } from '~/components/atoms/select/lib/models/interfaces'
30
+ import { pciDeviceTypeOptionsFunc } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/lib/config/options'
31
+
32
+ const address = defineModel<string>('address')
33
+ const vendorName = defineModel<string>('vendorName')
34
+ const className = defineModel<string>('className')
35
+ const deviceName = defineModel<string>('deviceName')
36
+ const mediatedDevice = defineModel<string>('mediatedDevice')
37
+ const mediatedDeviceUuid = defineModel<string>('mediatedDeviceUuid')
38
+
39
+ const props = withDefaults(
40
+ defineProps<{
41
+ index: number
42
+ passthroughDevices: UI_I_PciDevice[]
43
+ mediatedDevices: UI_I_MediatedDevice[]
44
+ type: UI_T_PciDeviceType
45
+ isEdit: boolean
46
+ state?: string | number
47
+ // errorValidationFields: UI_I_ErrorValidationField<string>[]
48
+ }>(),
49
+ {
50
+ state: undefined,
51
+ }
52
+ )
53
+ const emits = defineEmits<{
54
+ (event: 'remove'): void
55
+ }>()
56
+
57
+ const { $store }: any = useNuxtApp()
58
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
59
+ const currentComponent = computed(() =>
60
+ isNewView.value
61
+ ? defineAsyncComponent(() => import('./New.vue'))
62
+ : defineAsyncComponent(() => import('./Old.vue'))
63
+ )
64
+
65
+ const localization = computed<UI_I_Localization>(() => useLocal())
66
+
67
+ const isRunning = computed<boolean>(() => {
68
+ return props.state === 2
69
+ })
70
+
71
+ const isRemovable = computed<boolean>(() => {
72
+ return !props.isEdit || !isRunning.value
73
+ })
74
+
75
+ const label = computed<string>(() => {
76
+ if (props.type === 'edit')
77
+ return `${localization.value.common.newPciDevice} ${props.index + 1}`
78
+
79
+ return `${localization.value.common.pciDevice} *`
80
+ })
81
+
82
+ const selectedLabel = computed<string>(() => {
83
+ if (address.value) {
84
+ return `${address.value} | ${deviceName.value}`
85
+ }
86
+ switch (selectedType.value.value) {
87
+ case 'direct_path_io':
88
+ return `${directPathIo.value?.address} | ${directPathIo.value?.device_name}`
89
+ case 'dynamic_direct_path_io':
90
+ return `${dynamicDirectPathIo.value?.address} | ${dynamicDirectPathIo.value?.device_name}`
91
+ default:
92
+ return nvidiaGridProfile.value?.text
93
+ }
94
+ })
95
+
96
+ const pciDeviceTypeOptions = ref<UI_I_OptionItem[]>(
97
+ pciDeviceTypeOptionsFunc(
98
+ !props.passthroughDevices.length,
99
+ !props.mediatedDevices.length
100
+ )
101
+ )
102
+ const selectedType = ref<UI_I_OptionItem>(pciDeviceTypeOptions.value[0])
103
+ pciDeviceTypeOptions.value.forEach((option) => {
104
+ if (!option.disabled) selectedType.value = option
105
+ })
106
+
107
+ const directPathIo = ref<string>('') /// TODO
108
+ const dynamicDirectPathIo = ref<UI_I_PciDevice>(props.passthroughDevices[0])
109
+ const nvidiaGridProfile = ref<UI_I_Option | null>(null)
110
+
111
+ const set = (): void => {
112
+ // const passthroughDevice = props.passthroughDevices.find(
113
+ // (item) => item.address === newValue.address
114
+ // )
115
+ // passthroughDevice && (directPathIo.value = passthroughDevice) // Todo change
116
+ // directPathIo.value = newValue1
117
+ const passthroughDevice = props.passthroughDevices.find((device) => {
118
+ return (
119
+ device.class_name + '_' + device.address ===
120
+ className.value + '_' + address.value
121
+ )
122
+ })
123
+ if (passthroughDevice) {
124
+ dynamicDirectPathIo.value = passthroughDevice
125
+ }
126
+
127
+ const mediatedDevice = props.mediatedDevices.find((device) => {
128
+ return (
129
+ device.profile_name + '_' + device.root_device ===
130
+ className.value + '_' + address.value
131
+ )
132
+ })
133
+ if (mediatedDevice) {
134
+ nvidiaGridProfile.value = {
135
+ text: mediatedDevice.human_readable,
136
+ value: mediatedDevice.profile_name + '_' + mediatedDevice.root_device,
137
+ }
138
+
139
+ selectedType.value =
140
+ pciDeviceTypeOptions.value.find(
141
+ (option) => option.value === 'nvidia_grid'
142
+ ) || selectedType.value
143
+ }
144
+ }
145
+ watch(
146
+ () => props.mediatedDevices,
147
+ () => {
148
+ // if (props.isEdit) set()
149
+ set() // for edit
150
+ },
151
+ { immediate: true, deep: true }
152
+ )
153
+
154
+ // watch(
155
+ // [() => props.pciDevice, () => props.mediatedDevices],
156
+ // ([newValue1]) => {
157
+ // // const passthroughDevice = props.passthroughDevices.find(
158
+ // // (item) => item.address === newValue.address
159
+ // // )
160
+ // // passthroughDevice && (directPathIo.value = passthroughDevice) // Todo change
161
+ // if (newValue1) {
162
+ // // directPathIo.value = newValue1
163
+ // const passthroughDevice = props.passthroughDevices.find((device) => {
164
+ // return (
165
+ // device.class_name + '_' + device.address ===
166
+ // newValue1.class_name + '_' + newValue1.address
167
+ // )
168
+ // })
169
+ // if (passthroughDevice) {
170
+ // dynamicDirectPathIo.value = passthroughDevice
171
+ // }
172
+ //
173
+ // const mediatedDevice = props.mediatedDevices.find((device) => {
174
+ // return (
175
+ // device.profile_name + '_' + device.root_device ===
176
+ // newValue1.class_name + '_' + newValue1.address
177
+ // )
178
+ // })
179
+ // if (mediatedDevice) {
180
+ // nvidiaGridProfile.value = {
181
+ // text: mediatedDevice.human_readable,
182
+ // value: mediatedDevice.profile_name + '_' + mediatedDevice.root_device,
183
+ // }
184
+ //
185
+ // selectedType.value =
186
+ // pciDeviceTypeOptions.value.find(
187
+ // (option) => option.value === 'nvidia_grid'
188
+ // ) || selectedType.value
189
+ // }
190
+ // }
191
+ // },
192
+ // { immediate: true, deep: true }
193
+ // )
194
+
195
+ const sendData = computed<UI_I_SendDataNewPciDevice>(() => {
196
+ const nvidia = props.mediatedDevices.find(
197
+ (device) =>
198
+ nvidiaGridProfile.value?.value ===
199
+ device.profile_name + '_' + device.root_device
200
+ )
201
+ switch (selectedType.value.value) {
202
+ case 'direct_path_io':
203
+ return {
204
+ address: '',
205
+ vendor_name: '',
206
+ class_name: '',
207
+ device_name: '',
208
+ mediated_device: false,
209
+ }
210
+ case 'dynamic_direct_path_io':
211
+ return {
212
+ address: dynamicDirectPathIo.value?.address || '',
213
+ vendor_name: dynamicDirectPathIo.value?.vendor_name || '',
214
+ class_name: dynamicDirectPathIo.value?.class_name || '',
215
+ device_name: dynamicDirectPathIo.value?.device_name || '',
216
+ mediated_device: false,
217
+ }
218
+ case 'nvidia_grid':
219
+ return {
220
+ address: nvidia?.root_device || '',
221
+ vendor_name: '',
222
+ class_name: nvidia?.profile_name || '',
223
+ device_name: nvidia?.name || '',
224
+ mediated_device: true,
225
+ mediated_device_uuid: '',
226
+ }
227
+ default:
228
+ return {
229
+ address: '',
230
+ vendor_name: '',
231
+ class_name: '',
232
+ device_name: '',
233
+ mediated_device: false,
234
+ }
235
+ }
236
+ })
237
+
238
+ watch(
239
+ sendData,
240
+ (newValue) => {
241
+ address.value = newValue.address
242
+ vendorName.value = newValue.vendor_name
243
+ className.value = newValue.class_name
244
+ deviceName.value = newValue.device_name
245
+ mediatedDevice.value = newValue.mediated_device
246
+ mediatedDeviceUuid.value = newValue.mediated_device_uuid || ''
247
+ // emits('send-data', props.type === 'edit' ? props.pciDevice : newValue)
248
+ },
249
+ { immediate: true }
250
+ )
251
+ </script>
252
+
253
+ <style scoped lang="scss"></style>
@@ -6,6 +6,7 @@ export const datastoreDefaultFormFunc = (
6
6
  return {
7
7
  name: 'Datastore',
8
8
  dev_names: [],
9
+ level: 'linear',
9
10
  hosts: hostId ? [hostId] : [],
10
11
  type_code: 2,
11
12
  version: 4.1,
@@ -7,6 +7,7 @@ import type { UI_I_CreateStorageLunDiskItem } from '~/components/common/wizards/
7
7
  export interface UI_I_CreateDatastoreForm {
8
8
  name: string
9
9
  dev_names: UI_I_CreateStorageLunDiskItem[]
10
+ level: 'linear' | 'raid0' | 'raid1' | 'raid5' | 'raid6' | 'raid10'
10
11
  version: UI_T_NfsType
11
12
  type_code: UI_T_DatastoreTypeCode
12
13
  readonly: boolean