mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-20 10:50:08 +03:00
(cherry picked from commit d6b89b6fe23d416d006040dbc9a9388c0af6c83c)
This commit is contained in:
parent
6b3a80eb28
commit
14c11d6850
@ -21,12 +21,13 @@ import {
|
||||
INPUT_TYPES,
|
||||
VM_ACTIONS_IN_CHARTER,
|
||||
VM_ACTIONS_WITH_SCHEDULE,
|
||||
VM_ACTIONS_WITH_SCHEDULE_INTANTIATED,
|
||||
END_TYPE_VALUES,
|
||||
REPEAT_VALUES,
|
||||
ARGS_TYPES,
|
||||
PERIOD_TYPES,
|
||||
} from 'client/constants'
|
||||
import { Field, sentenceCase, arrayToOptions } from 'client/utils'
|
||||
import { Field, sentenceCase, arrayToOptions, prettyBytes } from 'client/utils'
|
||||
import {
|
||||
isRelative,
|
||||
getRequiredArgsByAction,
|
||||
@ -84,30 +85,42 @@ const parseDateString = (_, originalValue) => {
|
||||
// --------------------------------------------------------
|
||||
// Fields
|
||||
// --------------------------------------------------------
|
||||
export const ACTION_FIELD_NAME = 'ACTION'
|
||||
export const ACTION_FIELD_VALIDATION = string().trim().required()
|
||||
|
||||
const createArgField = (argName) => ({
|
||||
name: `ARGS.${argName}`,
|
||||
dependOf: ACTION_FIELD.name,
|
||||
dependOf: ACTION_FIELD_NAME,
|
||||
htmlType: (action) =>
|
||||
!getRequiredArgsByAction(action)?.includes(argName) && INPUT_TYPES.HIDDEN,
|
||||
})
|
||||
|
||||
/** @type {Field} Action name field */
|
||||
const ACTION_FIELD = {
|
||||
name: 'ACTION',
|
||||
/**
|
||||
* @param {object} vm - Vm resource
|
||||
* @returns {Field} Action name field
|
||||
*/
|
||||
const ACTION_FIELD = (vm) => ({
|
||||
name: ACTION_FIELD_NAME,
|
||||
label: T.Action,
|
||||
type: INPUT_TYPES.SELECT,
|
||||
values: arrayToOptions(VM_ACTIONS_WITH_SCHEDULE, {
|
||||
addEmpty: false,
|
||||
getText: (action) => sentenceCase(action),
|
||||
}),
|
||||
validation: string().trim().required(),
|
||||
values: arrayToOptions(
|
||||
Object.entries({
|
||||
...VM_ACTIONS_WITH_SCHEDULE,
|
||||
...(vm?.ID && VM_ACTIONS_WITH_SCHEDULE_INTANTIATED),
|
||||
}),
|
||||
{
|
||||
addEmpty: false,
|
||||
getText: ([, text]) => text,
|
||||
getValue: ([value]) => value,
|
||||
}
|
||||
),
|
||||
validation: ACTION_FIELD_VALIDATION,
|
||||
grid: { xs: 12 },
|
||||
}
|
||||
})
|
||||
|
||||
/** @type {Field} Action name field */
|
||||
const ACTION_FIELD_FOR_CHARTERS = {
|
||||
...ACTION_FIELD,
|
||||
...ACTION_FIELD(),
|
||||
values: arrayToOptions(VM_ACTIONS_IN_CHARTER, {
|
||||
addEmpty: false,
|
||||
getText: (action) => sentenceCase(action),
|
||||
@ -143,10 +156,13 @@ const ARGS_DISK_ID_FIELD = (vm) => ({
|
||||
label: T.Disk,
|
||||
type: INPUT_TYPES.SELECT,
|
||||
values: arrayToOptions(getDisks(vm), {
|
||||
getText: ({ IMAGE_ID, IMAGE, NAME } = {}) => {
|
||||
getText: ({ IMAGE_ID, IMAGE, TARGET, SIZE } = {}) => {
|
||||
const isVolatile = !IMAGE && !IMAGE_ID
|
||||
const diskImage = isVolatile
|
||||
? `${T.Volatile} (${prettyBytes(SIZE, 'MB')})`
|
||||
: IMAGE
|
||||
|
||||
return isVolatile ? NAME : `${NAME}: ${IMAGE}`
|
||||
return `${diskImage}: ${TARGET}`
|
||||
},
|
||||
getValue: ({ DISK_ID } = {}) => DISK_ID,
|
||||
}),
|
||||
|
@ -20,11 +20,11 @@ import { Field, getObjectSchemaFromFields } from 'client/utils'
|
||||
import {
|
||||
PUNCTUAL_FIELDS,
|
||||
RELATIVE_FIELDS,
|
||||
ACTION_FIELD_NAME,
|
||||
ACTION_FIELD_VALIDATION,
|
||||
} from 'client/components/Forms/Vm/CreateSchedActionForm/fields'
|
||||
import { ARGS_TYPES } from 'client/constants'
|
||||
|
||||
const { ACTION_FIELD } = PUNCTUAL_FIELDS
|
||||
|
||||
const ARG_SCHEMA = string()
|
||||
.trim()
|
||||
.required()
|
||||
@ -56,8 +56,8 @@ const COMMON_FIELDS = (vm) => [
|
||||
|
||||
/** @type {ObjectSchema} Common schema with relative */
|
||||
const COMMON_SCHEMA = object({
|
||||
[ACTION_FIELD.name]: ACTION_FIELD.validation,
|
||||
ARGS: object().when(ACTION_FIELD.name, (action) =>
|
||||
[ACTION_FIELD_NAME]: ACTION_FIELD_VALIDATION,
|
||||
ARGS: object().when(ACTION_FIELD_NAME, (action) =>
|
||||
getRequiredArgsByAction(action)
|
||||
.map((arg) => object({ [arg]: ARG_SCHEMAS[arg] }))
|
||||
.reduce((result, argSchema) => result.concat(argSchema), object())
|
||||
@ -69,7 +69,7 @@ const COMMON_SCHEMA = object({
|
||||
* @returns {Field[]} Fields
|
||||
*/
|
||||
export const SCHED_FIELDS = (vm) => [
|
||||
PUNCTUAL_FIELDS.ACTION_FIELD,
|
||||
PUNCTUAL_FIELDS.ACTION_FIELD(vm),
|
||||
PUNCTUAL_FIELDS.TIME_FIELD,
|
||||
...COMMON_FIELDS(vm),
|
||||
PUNCTUAL_FIELDS.END_TYPE_FIELD,
|
||||
@ -78,7 +78,7 @@ export const SCHED_FIELDS = (vm) => [
|
||||
|
||||
/** @type {Field[]} Fields for relative actions */
|
||||
export const RELATIVE_SCHED_FIELDS = (vm) => [
|
||||
PUNCTUAL_FIELDS.ACTION_FIELD,
|
||||
PUNCTUAL_FIELDS.ACTION_FIELD(vm),
|
||||
RELATIVE_FIELDS.RELATIVE_TIME_FIELD,
|
||||
RELATIVE_FIELDS.PERIOD_FIELD,
|
||||
...COMMON_FIELDS(vm),
|
||||
|
@ -99,6 +99,9 @@ module.exports = {
|
||||
DetachSomething: 'Detach: %s',
|
||||
Disable: 'Disable',
|
||||
Dismiss: 'Dismiss',
|
||||
DiskSnapshotCreate: 'Disk snapshot create',
|
||||
DiskSnapshotRevert: 'Disk snapshot revert',
|
||||
DiskSnapshotDelete: 'Disk snapshot delete',
|
||||
Done: 'Done',
|
||||
Edit: 'Edit',
|
||||
EditSomething: 'Edit: %s',
|
||||
@ -170,6 +173,9 @@ module.exports = {
|
||||
ShowAll: 'Show all',
|
||||
SignIn: 'Sign In',
|
||||
SignOut: 'Sign Out',
|
||||
SnapshotCreate: 'Snapshot create',
|
||||
SnapshotRevert: 'Snapshot revert',
|
||||
SnapshotDelete: 'Snapshot delete',
|
||||
Stop: 'Stop',
|
||||
Submit: 'Submit',
|
||||
Success: 'Success',
|
||||
|
@ -20,6 +20,7 @@ import COLOR from 'client/constants/color'
|
||||
import { Permissions, LockInfo } from 'client/constants/common'
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
import { ScheduleAction } from 'client/constants/scheduler'
|
||||
import { T } from 'client/constants'
|
||||
|
||||
/**
|
||||
* @typedef {object} Disk
|
||||
@ -1851,29 +1852,33 @@ export const VM_ACTIONS_BY_STATE = {
|
||||
[HYPERVISORS.lxc]: LXC_VM_ACTIONS_BY_STATE,
|
||||
}
|
||||
|
||||
/** @type {string[]} Actions that can be scheduled */
|
||||
export const VM_ACTIONS_WITH_SCHEDULE = [
|
||||
VM_ACTIONS.BACKUP,
|
||||
VM_ACTIONS.TERMINATE,
|
||||
VM_ACTIONS.TERMINATE_HARD,
|
||||
VM_ACTIONS.UNDEPLOY,
|
||||
VM_ACTIONS.UNDEPLOY_HARD,
|
||||
VM_ACTIONS.HOLD,
|
||||
VM_ACTIONS.RELEASE,
|
||||
VM_ACTIONS.STOP,
|
||||
VM_ACTIONS.SUSPEND,
|
||||
VM_ACTIONS.RESUME,
|
||||
VM_ACTIONS.REBOOT,
|
||||
VM_ACTIONS.REBOOT_HARD,
|
||||
VM_ACTIONS.POWEROFF,
|
||||
VM_ACTIONS.POWEROFF_HARD,
|
||||
VM_ACTIONS.SNAPSHOT_DISK_CREATE,
|
||||
VM_ACTIONS.SNAPSHOT_DISK_REVERT,
|
||||
VM_ACTIONS.SNAPSHOT_DISK_DELETE,
|
||||
VM_ACTIONS.SNAPSHOT_CREATE,
|
||||
VM_ACTIONS.SNAPSHOT_REVERT,
|
||||
VM_ACTIONS.SNAPSHOT_DELETE,
|
||||
]
|
||||
/** @type {object} Actions that can be scheduled */
|
||||
export const VM_ACTIONS_WITH_SCHEDULE = {
|
||||
[VM_ACTIONS.BACKUP]: T.Backup,
|
||||
[VM_ACTIONS.TERMINATE]: T.Terminate,
|
||||
[VM_ACTIONS.TERMINATE_HARD]: T.TerminateHard,
|
||||
[VM_ACTIONS.UNDEPLOY]: T.Undeploy,
|
||||
[VM_ACTIONS.UNDEPLOY_HARD]: T.UndeployHard,
|
||||
[VM_ACTIONS.HOLD]: T.Hold,
|
||||
[VM_ACTIONS.RELEASE]: T.Release,
|
||||
[VM_ACTIONS.STOP]: T.Stop,
|
||||
[VM_ACTIONS.SUSPEND]: T.Suspend,
|
||||
[VM_ACTIONS.RESUME]: T.Resume,
|
||||
[VM_ACTIONS.REBOOT]: T.Reboot,
|
||||
[VM_ACTIONS.REBOOT_HARD]: T.RebootHard,
|
||||
[VM_ACTIONS.POWEROFF]: T.Poweroff,
|
||||
[VM_ACTIONS.POWEROFF_HARD]: T.PoweroffHard,
|
||||
[VM_ACTIONS.SNAPSHOT_CREATE]: T.SnapshotCreate,
|
||||
[VM_ACTIONS.SNAPSHOT_REVERT]: T.SnapshotRevert,
|
||||
[VM_ACTIONS.SNAPSHOT_DELETE]: T.SnapshotDelete,
|
||||
}
|
||||
|
||||
/** @type {object} Actions that can be scheduled */
|
||||
export const VM_ACTIONS_WITH_SCHEDULE_INTANTIATED = {
|
||||
[VM_ACTIONS.SNAPSHOT_DISK_CREATE]: T.DiskSnapshotCreate,
|
||||
[VM_ACTIONS.SNAPSHOT_DISK_REVERT]: T.DiskSnapshotRevert,
|
||||
[VM_ACTIONS.SNAPSHOT_DISK_DELETE]: T.DiskSnapshotDelete,
|
||||
}
|
||||
|
||||
/** @type {string[]} Actions that can be used in charter */
|
||||
export const VM_ACTIONS_IN_CHARTER = [
|
||||
|
Loading…
x
Reference in New Issue
Block a user