1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-01-18 06:03:39 +03:00

B 6334: Fix inputs kernel and ramdisk (#2823)

This commit is contained in:
Jorge Miguel Lobo Escalona 2023-11-20 10:32:29 +01:00 committed by GitHub
parent d514c204ca
commit 79451a8d1d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 112 additions and 29 deletions

View File

@ -15,13 +15,17 @@
* ------------------------------------------------------------------------- */
import { boolean, string } from 'yup'
import { useGetImagesQuery } from 'client/features/OneApi/image'
import { HYPERVISORS, IMAGE_TYPES_STR, INPUT_TYPES, T } from 'client/constants'
import { useGetAllImagesQuery } from 'client/features/OneApi/image'
import { getType } from 'client/models/Image'
import { Field, clearNames } from 'client/utils'
import { T, INPUT_TYPES, HYPERVISORS, IMAGE_TYPES_STR } from 'client/constants'
const { vcenter, lxc } = HYPERVISORS
export const KERNEL_PATH_ENABLED_NAME = 'OS.KERNEL_PATH_ENABLED'
export const KERNEL_DS_NAME = 'OS.KERNEL_DS'
export const KERNEL_NAME = 'OS.KERNEL'
const kernelValidation = string()
.trim()
.notRequired()
@ -29,10 +33,16 @@ const kernelValidation = string()
/** @type {Field} Kernel path field */
export const KERNEL_PATH_ENABLED = {
name: 'OS.KERNEL_PATH_ENABLED',
name: KERNEL_PATH_ENABLED_NAME,
label: T.CustomPath,
notOnHypervisors: [vcenter, lxc],
type: INPUT_TYPES.SWITCH,
fieldProps: (context, form) => {
if (context?.extra?.OS?.KERNEL) {
// first render!
form?.setValue(`extra.${KERNEL_PATH_ENABLED_NAME}`, true)
}
},
validation: boolean()
.strip()
.default(() => false),
@ -40,14 +50,15 @@ export const KERNEL_PATH_ENABLED = {
/** @type {Field} Kernel DS field */
export const KERNEL_DS = {
name: 'OS.KERNEL_DS',
name: KERNEL_DS_NAME,
label: T.Kernel,
notOnHypervisors: [vcenter, lxc],
type: INPUT_TYPES.AUTOCOMPLETE,
dependOf: KERNEL_PATH_ENABLED.name,
htmlType: (enabled) => enabled && INPUT_TYPES.HIDDEN,
fieldProps: (enabled) => (enabled ? { value: null } : {}),
values: () => {
const { data: images = [] } = useGetImagesQuery()
const { data: images = [] } = useGetAllImagesQuery()
return images
?.filter((image) => getType(image) === IMAGE_TYPES_STR.KERNEL)
@ -65,20 +76,34 @@ export const KERNEL_DS = {
clearNames(KERNEL_PATH_ENABLED.name),
(enabled, schema) => (enabled ? schema.strip() : schema)
),
value: (_, form) => {
if (
form?.getValues(`extra.${KERNEL_PATH_ENABLED_NAME}`) &&
form?.setValue
) {
form?.setValue(`extra.${KERNEL_DS_NAME}`, undefined)
}
},
}
/** @type {Field} Kernel path field */
export const KERNEL = {
name: 'OS.KERNEL',
name: KERNEL_NAME,
label: T.KernelPath,
notOnHypervisors: [vcenter, lxc],
type: INPUT_TYPES.TEXT,
dependOf: KERNEL_PATH_ENABLED.name,
htmlType: (enabled) => !enabled && INPUT_TYPES.HIDDEN,
validation: kernelValidation.when(
clearNames(KERNEL_PATH_ENABLED.name),
(enabled, schema) => (enabled ? schema : schema.strip())
),
fieldProps: (enabled) => (!enabled ? { value: '' } : {}),
validation: kernelValidation,
value: (_, form) => {
const typeKernel = form?.getValues(`extra.${KERNEL_PATH_ENABLED_NAME}`)
const currentValue = form?.getValues(`extra.${KERNEL_NAME}`)
if (typeKernel === false && currentValue && form?.setValue) {
form?.setValue(`extra.${KERNEL_NAME}`, '')
}
},
}
/** @type {Field[]} List of Kernel fields */

View File

@ -13,14 +13,19 @@
* See the License for the specific language governing permissions and *
* limitations under the License. *
* ------------------------------------------------------------------------- */
import { string, boolean } from 'yup'
import { boolean, string } from 'yup'
import { useGetImagesQuery } from 'client/features/OneApi/image'
import { HYPERVISORS, IMAGE_TYPES_STR, INPUT_TYPES, T } from 'client/constants'
import { useGetAllImagesQuery } from 'client/features/OneApi/image'
import { getType } from 'client/models/Image'
import { Field, clearNames } from 'client/utils'
import { T, INPUT_TYPES, HYPERVISORS, IMAGE_TYPES_STR } from 'client/constants'
import { KERNEL_DS_NAME, KERNEL_NAME } from './kernelSchema'
const { vcenter, lxc, firecracker } = HYPERVISORS
const { vcenter, lxc } = HYPERVISORS
export const RAMDISK_PATH_ENABLED_NAME = 'OS.RAMDISK_PATH_ENABLED'
export const RAMDISK_DS_NAME = 'OS.INITRD_DS'
export const RAMDISK_NAME = 'OS.INITRD'
const ramdiskValidation = string()
.trim()
@ -29,10 +34,22 @@ const ramdiskValidation = string()
/** @type {Field} Ramdisk path field */
export const RAMDISK_PATH_ENABLED = {
name: 'OS.RAMDISK_PATH_ENABLED',
name: RAMDISK_PATH_ENABLED_NAME,
label: T.CustomPath,
notOnHypervisors: [vcenter, lxc, firecracker],
notOnHypervisors: [vcenter, lxc],
type: INPUT_TYPES.SWITCH,
dependOf: [`$extra.${KERNEL_DS_NAME}`, `$extra.${KERNEL_NAME}`],
fieldProps: (_, form) => {
const ds = form?.getValues(`extra.${KERNEL_DS_NAME}`)
const path = form?.getValues(`extra.${KERNEL_NAME}`)
const ramdisk = form?.getValues(`extra.${RAMDISK_NAME}`)
const options = {}
!(ds || path) && (options.disabled = true)
ramdisk && form?.setValue(`extra.${RAMDISK_PATH_ENABLED_NAME}`, true)
return options
},
validation: boolean()
.strip()
.default(() => false),
@ -40,14 +57,30 @@ export const RAMDISK_PATH_ENABLED = {
/** @type {Field} Ramdisk DS field */
export const RAMDISK_DS = {
name: 'OS.INITRD_DS',
name: RAMDISK_DS_NAME,
label: T.Ramdisk,
notOnHypervisors: [vcenter, lxc, firecracker],
notOnHypervisors: [vcenter, lxc],
type: INPUT_TYPES.AUTOCOMPLETE,
dependOf: RAMDISK_PATH_ENABLED.name,
htmlType: (enabled) => enabled && INPUT_TYPES.HIDDEN,
dependOf: [
RAMDISK_PATH_ENABLED.name,
`$extra.${KERNEL_DS_NAME}`,
`$extra${KERNEL_NAME}`,
],
htmlType: ([enabled = false] = []) => enabled && INPUT_TYPES.HIDDEN,
fieldProps: (_, form) => {
const ds = form?.getValues(`extra.${KERNEL_DS_NAME}`)
const path = form?.getValues(`extra.${KERNEL_NAME}`)
const ramdisk = form?.getValues(`extra.${RAMDISK_PATH_ENABLED_NAME}`)
const options = {}
!(ds || path) && (options.disabled = true)
ramdisk && (options.value = null)
return options
},
values: () => {
const { data: images = [] } = useGetImagesQuery()
const { data: images = [] } = useGetAllImagesQuery()
return images
?.filter((image) => getType(image) === IMAGE_TYPES_STR.RAMDISK)
@ -65,20 +98,45 @@ export const RAMDISK_DS = {
clearNames(RAMDISK_PATH_ENABLED.name),
(enabled, schema) => (enabled ? schema.strip() : schema)
),
value: (_, form) => {
if (
form?.getValues(`extra.${RAMDISK_PATH_ENABLED_NAME}`) &&
form?.setValue
) {
form?.setValue(`extra.${RAMDISK_DS_NAME}`, undefined)
}
},
}
/** @type {Field} Ramdisk path field */
export const RAMDISK = {
name: 'OS.INITRD',
name: RAMDISK_NAME,
label: T.RamdiskPath,
notOnHypervisors: [vcenter, lxc, firecracker],
notOnHypervisors: [vcenter, lxc],
type: INPUT_TYPES.TEXT,
dependOf: RAMDISK_PATH_ENABLED.name,
htmlType: (enabled) => !enabled && INPUT_TYPES.HIDDEN,
validation: ramdiskValidation.when(
clearNames(RAMDISK_PATH_ENABLED.name),
(enabled, schema) => (enabled ? schema : schema.strip())
),
dependOf: [
RAMDISK_PATH_ENABLED.name,
`$extra.${KERNEL_DS_NAME}`,
`$extra${KERNEL_NAME}`,
],
fieldProps: (_, form) => {
const ds = form?.getValues(`extra.${KERNEL_DS_NAME}`)
const path = form?.getValues(`extra.${KERNEL_NAME}`)
const ramdisk = form?.getValues(`extra.${RAMDISK_PATH_ENABLED_NAME}`)
const currentValue = form?.getValues(`extra.${RAMDISK_NAME}`)
if (
(ramdisk === false || !(ds || path)) &&
currentValue &&
form?.setValue
) {
form?.setValue(`extra.${RAMDISK_NAME}`)
}
return ds || path ? {} : { disabled: true }
},
htmlType: ([enabled = false] = []) => !enabled && INPUT_TYPES.HIDDEN,
validation: ramdiskValidation,
}
/** @type {Field[]} List of Ramdisk fields */