in frontend/src/old-pages/Configure/Queues/Queues.tsx [87:262]
function queueValidate(queueIndex: any) {
let valid = true
const queueSubnet = getState([
...queuesPath,
queueIndex,
'Networking',
'SubnetIds',
0,
])
const computeResources = getState([
...queuesPath,
queueIndex,
'ComputeResources',
])
const errorsPath = [...queuesErrorsPath, queueIndex]
const actionsPath = [...queuesPath, queueIndex, 'CustomActions']
const onStartPath = [...actionsPath, 'OnNodeStart']
const onStart = getState(onStartPath)
const onConfiguredPath = [...actionsPath, 'OnNodeConfigured']
const onConfigured = getState(onConfiguredPath)
const customAmiEnabled = getState([
'app',
'wizard',
'queues',
queueIndex,
'customAMI',
'enabled',
])
const customAmi = getState([...queuesPath, queueIndex, 'Image', 'CustomAmi'])
const queueName = getState([...queuesPath, queueIndex, 'Name'])
const [queueNameValid, error] = validateQueueName(queueName)
if (!queueNameValid) {
let errorMessage: string
if (error === 'max_length') {
errorMessage = i18next.t(queueNameErrorsMapping[error], {
maxChars: QUEUE_NAME_MAX_LENGTH,
})
} else {
errorMessage = i18next.t(queueNameErrorsMapping[error])
}
setState([...errorsPath, 'name'], errorMessage)
valid = false
} else {
clearState([...errorsPath, 'name'])
}
const rootVolumeSizePath = [
...queuesPath,
queueIndex,
'ComputeSettings',
'LocalStorage',
'RootVolume',
'Size',
]
const rootVolumeValue = getState(rootVolumeSizePath)
if (rootVolumeValue === '') {
setState(
[...errorsPath, 'rootVolume'],
i18next.t('wizard.queues.validation.setRootVolumeSize'),
)
valid = false
} else if (
rootVolumeValue &&
(!Number.isInteger(rootVolumeValue) || rootVolumeValue < 35)
) {
setState(
[...errorsPath, 'rootVolume'],
i18next.t('wizard.queues.validation.rootVolumeMinimum'),
)
valid = false
} else {
clearState([...errorsPath, 'rootVolume'])
}
if (
onStart &&
getState([...onStartPath, 'Args']) &&
!getState([...onStartPath, 'Script'])
) {
setState(
[...errorsPath, 'onStart'],
i18next.t('wizard.queues.validation.rootVolumeMinimum'),
)
valid = false
} else {
clearState([...errorsPath, 'onStart'])
}
if (
onConfigured &&
getState([...onConfiguredPath, 'Args']) &&
!getState([...onConfiguredPath, 'Script'])
) {
setState(
[...errorsPath, 'onConfigured'],
i18next.t('wizard.queues.validation.scriptWithArgs'),
)
valid = false
} else {
clearState([...errorsPath, 'onConfigured'])
}
if (customAmiEnabled && !customAmi) {
setState(
[...errorsPath, 'customAmi'],
i18next.t('wizard.queues.validation.customAmiSelect'),
)
valid = false
} else {
clearState([...errorsPath, 'customAmi'])
}
const version = getState(['app', 'version', 'full'])
const isMultiAZActive = isFeatureEnabled(version, defaultRegion, 'multi_az')
if (!queueSubnet) {
let message: string
if (isMultiAZActive) {
message = i18next.t('wizard.queues.validation.selectSubnets')
} else {
message = i18next.t('wizard.queues.validation.selectSubnet')
}
setState([...errorsPath, 'subnet'], message)
valid = false
} else {
setState([...errorsPath, 'subnet'], null)
}
const isMultiInstanceTypesActive = isFeatureEnabled(
version,
defaultRegion,
'queues_multiple_instance_types',
)
const {validateComputeResources} = !isMultiInstanceTypesActive
? SingleInstanceCR
: MultiInstanceCR
const [computeResourcesValid, computeResourcesErrors] =
validateComputeResources(computeResources)
if (!computeResourcesValid) {
valid = false
computeResources.forEach((_: ComputeResource, i: number) => {
const error = computeResourcesErrors[i]
if (error) {
let message: string
if (error === 'instance_type_unique') {
message = i18next.t('wizard.queues.validation.instanceTypeUnique')
} else {
message = i18next.t('wizard.queues.validation.instanceTypeMissing')
}
setState([...errorsPath, 'computeResource', i, 'type'], message)
} else {
setState([...errorsPath, 'computeResource', i, 'type'], null)
}
})
}
const isMemoryBasedSchedulingActive = isFeatureEnabled(
version,
defaultRegion,
'memory_based_scheduling',
)
if (isMemoryBasedSchedulingActive) {
const settingsValid = validateSlurmSettings()
if (!settingsValid) {
valid = false
}
}
return valid
}