diff --git a/src/fireedge/src/client/components/Forms/Vm/BackupForm/schema.js b/src/fireedge/src/client/components/Forms/Vm/BackupForm/schema.js index e5e8780bae..05b6359465 100644 --- a/src/fireedge/src/client/components/Forms/Vm/BackupForm/schema.js +++ b/src/fireedge/src/client/components/Forms/Vm/BackupForm/schema.js @@ -28,6 +28,7 @@ const DS_ID = { return arrayToOptions( datastores.filter(({ TEMPLATE }) => TEMPLATE.TYPE === 'BACKUP_DS'), { + addEmpty: false, getText: ({ NAME, ID } = {}) => `${ID}: ${NAME}`, getValue: ({ ID } = {}) => ID, } diff --git a/src/fireedge/src/client/constants/vm.js b/src/fireedge/src/client/constants/vm.js index 0d1dfe4513..82ef2970f9 100644 --- a/src/fireedge/src/client/constants/vm.js +++ b/src/fireedge/src/client/constants/vm.js @@ -802,8 +802,8 @@ export const VM_ACTIONS = { UPDATE_CONF: 'update_configuration', } -/** @enum {string} Virtual machine actions by state */ -export const VM_ACTIONS_BY_STATE = { +/** @enum {string} KVM Virtual machine actions by state */ +export const VM_ACTIONS_BY_STATE_KVM = { [VM_ACTIONS.BACKUP]: [STATES.POWEROFF, STATES.RUNNING], [VM_ACTIONS.DEPLOY]: [ STATES.PENDING, @@ -984,6 +984,551 @@ export const VM_ACTIONS_BY_STATE = { ], } +/** @enum {string} vCenter Virtual machine actions by state */ +export const VM_ACTIONS_BY_STATE_VCENTER = { + [VM_ACTIONS.DEPLOY]: [ + STATES.PENDING, + STATES.HOLD, + STATES.STOPPED, + STATES.UNDEPLOYED, + STATES.UNKNOWN, + ], + [VM_ACTIONS.CREATE_APP_DIALOG]: [STATES.POWEROFF], + [VM_ACTIONS.HOLD]: [STATES.PENDING], + [VM_ACTIONS.LOCK]: [], + [VM_ACTIONS.MIGRATE_LIVE]: [STATES.RUNNING, STATES.UNKNOWN], + [VM_ACTIONS.MIGRATE_POFF_HARD]: [STATES.RUNNING, STATES.UNKNOWN], + [VM_ACTIONS.MIGRATE_POFF]: [STATES.RUNNING, STATES.UNKNOWN], + [VM_ACTIONS.MIGRATE]: [ + STATES.SUSPENDED, + STATES.POWEROFF, + STATES.RUNNING, + STATES.UNKNOWN, + ], + [VM_ACTIONS.POWEROFF_HARD]: [STATES.RUNNING, STATES.UNKNOWN], + [VM_ACTIONS.POWEROFF]: [STATES.RUNNING, STATES.UNKNOWN], + [VM_ACTIONS.REBOOT_HARD]: [STATES.RUNNING], + [VM_ACTIONS.REBOOT]: [STATES.RUNNING], + [VM_ACTIONS.RECOVER]: [ + STATES.INIT, + STATES.PENDING, + STATES.HOLD, + STATES.ACTIVE, + STATES.STOPPED, + STATES.SUSPENDED, + STATES.POWEROFF, + STATES.UNDEPLOYED, + STATES.CLONING, + STATES.CLONING_FAILURE, + ], + [VM_ACTIONS.RELEASE]: [STATES.HOLD], + [VM_ACTIONS.RESCHED]: [STATES.POWEROFF, STATES.RUNNING, STATES.UNKNOWN], + [VM_ACTIONS.RESUME]: [ + STATES.STOPPED, + STATES.SUSPENDED, + STATES.POWEROFF, + STATES.UNDEPLOYED, + STATES.UNKNOWN, + ], + [VM_ACTIONS.SAVE_AS_TEMPLATE]: [STATES.POWEROFF], + [VM_ACTIONS.STOP]: [STATES.SUSPENDED, STATES.RUNNING], + [VM_ACTIONS.SUSPEND]: [STATES.RUNNING], + [VM_ACTIONS.TERMINATE_HARD]: [ + STATES.INIT, + STATES.PENDING, + STATES.HOLD, + STATES.STOPPED, + STATES.SUSPENDED, + STATES.POWEROFF, + STATES.UNDEPLOYED, + STATES.CLONING, + STATES.CLONING_FAILURE, + STATES.RUNNING, + STATES.UNKNOWN, + ], + [VM_ACTIONS.TERMINATE]: [ + STATES.RUNNING, + STATES.FAILURE, + STATES.BOOT_FAILURE, + STATES.BOOT_MIGRATE_FAILURE, + STATES.PROLOG_MIGRATE_FAILURE, + STATES.PROLOG_FAILURE, + STATES.EPILOG_FAILURE, + STATES.EPILOG_STOP_FAILURE, + STATES.EPILOG_UNDEPLOY_FAILURE, + STATES.PROLOG_MIGRATE_POWEROFF_FAILURE, + STATES.PROLOG_MIGRATE_SUSPEND_FAILURE, + STATES.BOOT_UNDEPLOY_FAILURE, + STATES.BOOT_STOPPED_FAILURE, + STATES.PROLOG_RESUME_FAILURE, + STATES.PROLOG_UNDEPLOY_FAILURE, + STATES.PROLOG_MIGRATE_UNKNOWN_FAILURE, + ], + [VM_ACTIONS.UNDEPLOY_HARD]: [STATES.POWEROFF, STATES.RUNNING, STATES.UNKNOWN], + [VM_ACTIONS.UNDEPLOY]: [STATES.POWEROFF, STATES.RUNNING, STATES.UNKNOWN], + [VM_ACTIONS.UNLOCK]: [], + [VM_ACTIONS.UNRESCHED]: [STATES.RUNNING, STATES.UNKNOWN], + + // REMOTE + [VM_ACTIONS.VMRC]: [STATES.RUNNING], + [VM_ACTIONS.VNC]: [STATES.RUNNING], + [VM_ACTIONS.SSH]: [STATES.RUNNING], + [VM_ACTIONS.RDP]: [STATES.RUNNING], + [VM_ACTIONS.FILE_RDP]: [STATES.RUNNING], + [VM_ACTIONS.FILE_VIRT_VIEWER]: [STATES.RUNNING], + + // INFORMATION + [VM_ACTIONS.RENAME]: [], + [VM_ACTIONS.CHANGE_MODE]: [], + [VM_ACTIONS.CHANGE_OWNER]: [], + [VM_ACTIONS.CHANGE_GROUP]: [], + + // CAPACITY + [VM_ACTIONS.RESIZE_CAPACITY]: [ + STATES.INIT, + STATES.PENDING, + STATES.HOLD, + STATES.ACTIVE, + STATES.POWEROFF, + STATES.UNDEPLOYED, + STATES.CLONING, + STATES.CLONING_FAILURE, + ], + + // STORAGE + [VM_ACTIONS.ATTACH_DISK]: [STATES.POWEROFF, STATES.RUNNING], + [VM_ACTIONS.DETACH_DISK]: [STATES.POWEROFF, STATES.RUNNING], + [VM_ACTIONS.SNAPSHOT_DISK_CREATE]: [ + STATES.SUSPENDED, + STATES.POWEROFF, + STATES.RUNNING, + ], + [VM_ACTIONS.SNAPSHOT_DISK_RENAME]: [], + [VM_ACTIONS.SNAPSHOT_DISK_REVERT]: [STATES.SUSPENDED, STATES.POWEROFF], + [VM_ACTIONS.SNAPSHOT_DISK_DELETE]: [ + STATES.SUSPENDED, + STATES.POWEROFF, + STATES.RUNNING, + ], + [VM_ACTIONS.RESIZE_DISK]: [STATES.POWEROFF, STATES.RUNNING], + [VM_ACTIONS.DISK_SAVEAS]: [STATES.SUSPENDED, STATES.POWEROFF, STATES.RUNNING], + + // NETWORK + [VM_ACTIONS.ATTACH_NIC]: [STATES.POWEROFF, STATES.RUNNING], + [VM_ACTIONS.DETACH_NIC]: [STATES.POWEROFF, STATES.RUNNING], + [VM_ACTIONS.ATTACH_SEC_GROUP]: [STATES.POWEROFF, STATES.RUNNING], + [VM_ACTIONS.DETACH_SEC_GROUP]: [STATES.POWEROFF, STATES.RUNNING], + + // SNAPSHOT + [VM_ACTIONS.SNAPSHOT_CREATE]: [STATES.RUNNING], + [VM_ACTIONS.SNAPSHOT_REVERT]: [STATES.RUNNING], + [VM_ACTIONS.SNAPSHOT_DELETE]: [STATES.POWEROFF, STATES.RUNNING], + + // SCHEDULING ACTION + [VM_ACTIONS.SCHED_ACTION_CREATE]: [], + [VM_ACTIONS.SCHED_ACTION_UPDATE]: [], + [VM_ACTIONS.SCHED_ACTION_DELETE]: [], + [VM_ACTIONS.CHARTER_CREATE]: [], + + // CONFIGURATION + [VM_ACTIONS.UPDATE_CONF]: [ + STATES.PENDING, + STATES.HOLD, + STATES.ACTIVE, + STATES.POWEROFF, + STATES.UNDEPLOYED, + STATES.CLONING, + STATES.CLONING_FAILURE, + STATES.PROLOG, + STATES.EPILOG, + STATES.SHUTDOWN, + STATES.CLEANUP_RESUBMIT, + STATES.SHUTDOWN_POWEROFF, + STATES.CLEANUP_DELETE, + STATES.HOTPLUG_SAVEAS_POWEROFF, + STATES.SHUTDOWN_UNDEPLOY, + STATES.EPILOG_UNDEPLOY, + STATES.PROLOG_UNDEPLOY, + STATES.HOTPLUG_PROLOG_POWEROFF, + STATES.HOTPLUG_EPILOG_POWEROFF, + STATES.BOOT_FAILURE, + STATES.PROLOG_FAILURE, + STATES.EPILOG_FAILURE, + STATES.EPILOG_UNDEPLOY_FAILURE, + STATES.PROLOG_MIGRATE_POWEROFF, + STATES.PROLOG_MIGRATE_POWEROFF_FAILURE, + STATES.BOOT_UNDEPLOY_FAILURE, + STATES.PROLOG_UNDEPLOY_FAILURE, + STATES.DISK_SNAPSHOT_POWEROFF, + STATES.DISK_SNAPSHOT_REVERT_POWEROFF, + STATES.DISK_SNAPSHOT_DELETE_POWEROFF, + ], +} + +/** @enum {string} Firecracker Virtual machine actions by state */ +export const VM_ACTIONS_BY_STATE_FIRECRACKER = { + [VM_ACTIONS.BACKUP]: [STATES.POWEROFF], + [VM_ACTIONS.DEPLOY]: [ + STATES.PENDING, + STATES.HOLD, + STATES.STOPPED, + STATES.UNDEPLOYED, + STATES.UNKNOWN, + ], + [VM_ACTIONS.CREATE_APP_DIALOG]: [STATES.POWEROFF], + [VM_ACTIONS.HOLD]: [STATES.PENDING], + [VM_ACTIONS.LOCK]: [], + [VM_ACTIONS.MIGRATE_LIVE]: [STATES.RUNNING, STATES.UNKNOWN], + [VM_ACTIONS.MIGRATE_POFF_HARD]: [STATES.RUNNING, STATES.UNKNOWN], + [VM_ACTIONS.MIGRATE_POFF]: [STATES.RUNNING, STATES.UNKNOWN], + [VM_ACTIONS.MIGRATE]: [ + STATES.SUSPENDED, + STATES.POWEROFF, + STATES.RUNNING, + STATES.UNKNOWN, + ], + [VM_ACTIONS.POWEROFF_HARD]: [STATES.RUNNING, STATES.UNKNOWN], + [VM_ACTIONS.POWEROFF]: [STATES.RUNNING, STATES.UNKNOWN], + [VM_ACTIONS.REBOOT_HARD]: [STATES.RUNNING], + [VM_ACTIONS.REBOOT]: [STATES.RUNNING], + [VM_ACTIONS.RECOVER]: [ + STATES.INIT, + STATES.PENDING, + STATES.HOLD, + STATES.ACTIVE, + STATES.STOPPED, + STATES.SUSPENDED, + STATES.POWEROFF, + STATES.UNDEPLOYED, + STATES.CLONING, + STATES.CLONING_FAILURE, + ], + [VM_ACTIONS.RELEASE]: [STATES.HOLD], + [VM_ACTIONS.RESCHED]: [STATES.POWEROFF, STATES.RUNNING, STATES.UNKNOWN], + [VM_ACTIONS.RESUME]: [ + STATES.STOPPED, + STATES.SUSPENDED, + STATES.POWEROFF, + STATES.UNDEPLOYED, + STATES.UNKNOWN, + ], + [VM_ACTIONS.SAVE_AS_TEMPLATE]: [STATES.POWEROFF], + [VM_ACTIONS.STOP]: [STATES.SUSPENDED, STATES.RUNNING], + [VM_ACTIONS.SUSPEND]: [STATES.RUNNING], + [VM_ACTIONS.TERMINATE_HARD]: [ + STATES.INIT, + STATES.PENDING, + STATES.HOLD, + STATES.STOPPED, + STATES.SUSPENDED, + STATES.POWEROFF, + STATES.UNDEPLOYED, + STATES.CLONING, + STATES.CLONING_FAILURE, + STATES.RUNNING, + STATES.UNKNOWN, + ], + [VM_ACTIONS.TERMINATE]: [ + STATES.RUNNING, + STATES.FAILURE, + STATES.BOOT_FAILURE, + STATES.BOOT_MIGRATE_FAILURE, + STATES.PROLOG_MIGRATE_FAILURE, + STATES.PROLOG_FAILURE, + STATES.EPILOG_FAILURE, + STATES.EPILOG_STOP_FAILURE, + STATES.EPILOG_UNDEPLOY_FAILURE, + STATES.PROLOG_MIGRATE_POWEROFF_FAILURE, + STATES.PROLOG_MIGRATE_SUSPEND_FAILURE, + STATES.BOOT_UNDEPLOY_FAILURE, + STATES.BOOT_STOPPED_FAILURE, + STATES.PROLOG_RESUME_FAILURE, + STATES.PROLOG_UNDEPLOY_FAILURE, + STATES.PROLOG_MIGRATE_UNKNOWN_FAILURE, + ], + [VM_ACTIONS.UNDEPLOY_HARD]: [STATES.POWEROFF, STATES.RUNNING, STATES.UNKNOWN], + [VM_ACTIONS.UNDEPLOY]: [STATES.POWEROFF, STATES.RUNNING, STATES.UNKNOWN], + [VM_ACTIONS.UNLOCK]: [], + [VM_ACTIONS.UNRESCHED]: [STATES.RUNNING, STATES.UNKNOWN], + + // REMOTE + [VM_ACTIONS.VMRC]: [STATES.RUNNING], + [VM_ACTIONS.VNC]: [STATES.RUNNING], + [VM_ACTIONS.SSH]: [STATES.RUNNING], + [VM_ACTIONS.RDP]: [STATES.RUNNING], + [VM_ACTIONS.FILE_RDP]: [STATES.RUNNING], + [VM_ACTIONS.FILE_VIRT_VIEWER]: [STATES.RUNNING], + + // INFORMATION + [VM_ACTIONS.RENAME]: [], + [VM_ACTIONS.CHANGE_MODE]: [], + [VM_ACTIONS.CHANGE_OWNER]: [], + [VM_ACTIONS.CHANGE_GROUP]: [], + + // CAPACITY + [VM_ACTIONS.RESIZE_CAPACITY]: [ + STATES.INIT, + STATES.PENDING, + STATES.HOLD, + STATES.ACTIVE, + STATES.POWEROFF, + STATES.UNDEPLOYED, + STATES.CLONING, + STATES.CLONING_FAILURE, + ], + + // STORAGE + [VM_ACTIONS.ATTACH_DISK]: [STATES.POWEROFF, STATES.RUNNING], + [VM_ACTIONS.DETACH_DISK]: [STATES.POWEROFF, STATES.RUNNING], + [VM_ACTIONS.SNAPSHOT_DISK_CREATE]: [ + STATES.SUSPENDED, + STATES.POWEROFF, + STATES.RUNNING, + ], + [VM_ACTIONS.SNAPSHOT_DISK_RENAME]: [], + [VM_ACTIONS.SNAPSHOT_DISK_REVERT]: [STATES.SUSPENDED, STATES.POWEROFF], + [VM_ACTIONS.SNAPSHOT_DISK_DELETE]: [ + STATES.SUSPENDED, + STATES.POWEROFF, + STATES.RUNNING, + ], + [VM_ACTIONS.RESIZE_DISK]: [STATES.POWEROFF, STATES.RUNNING], + [VM_ACTIONS.DISK_SAVEAS]: [STATES.SUSPENDED, STATES.POWEROFF, STATES.RUNNING], + + // NETWORK + [VM_ACTIONS.ATTACH_NIC]: [STATES.POWEROFF, STATES.RUNNING], + [VM_ACTIONS.DETACH_NIC]: [STATES.POWEROFF, STATES.RUNNING], + [VM_ACTIONS.ATTACH_SEC_GROUP]: [STATES.POWEROFF, STATES.RUNNING], + [VM_ACTIONS.DETACH_SEC_GROUP]: [STATES.POWEROFF, STATES.RUNNING], + + // SNAPSHOT + [VM_ACTIONS.SNAPSHOT_CREATE]: [STATES.RUNNING], + [VM_ACTIONS.SNAPSHOT_REVERT]: [STATES.RUNNING], + [VM_ACTIONS.SNAPSHOT_DELETE]: [STATES.POWEROFF, STATES.RUNNING], + + // SCHEDULING ACTION + [VM_ACTIONS.SCHED_ACTION_CREATE]: [], + [VM_ACTIONS.SCHED_ACTION_UPDATE]: [], + [VM_ACTIONS.SCHED_ACTION_DELETE]: [], + [VM_ACTIONS.CHARTER_CREATE]: [], + + // CONFIGURATION + [VM_ACTIONS.UPDATE_CONF]: [ + STATES.PENDING, + STATES.HOLD, + STATES.ACTIVE, + STATES.POWEROFF, + STATES.UNDEPLOYED, + STATES.CLONING, + STATES.CLONING_FAILURE, + STATES.PROLOG, + STATES.EPILOG, + STATES.SHUTDOWN, + STATES.CLEANUP_RESUBMIT, + STATES.SHUTDOWN_POWEROFF, + STATES.CLEANUP_DELETE, + STATES.HOTPLUG_SAVEAS_POWEROFF, + STATES.SHUTDOWN_UNDEPLOY, + STATES.EPILOG_UNDEPLOY, + STATES.PROLOG_UNDEPLOY, + STATES.HOTPLUG_PROLOG_POWEROFF, + STATES.HOTPLUG_EPILOG_POWEROFF, + STATES.BOOT_FAILURE, + STATES.PROLOG_FAILURE, + STATES.EPILOG_FAILURE, + STATES.EPILOG_UNDEPLOY_FAILURE, + STATES.PROLOG_MIGRATE_POWEROFF, + STATES.PROLOG_MIGRATE_POWEROFF_FAILURE, + STATES.BOOT_UNDEPLOY_FAILURE, + STATES.PROLOG_UNDEPLOY_FAILURE, + STATES.DISK_SNAPSHOT_POWEROFF, + STATES.DISK_SNAPSHOT_REVERT_POWEROFF, + STATES.DISK_SNAPSHOT_DELETE_POWEROFF, + ], +} + +/** @enum {string} LXC Virtual machine actions by state */ +export const VM_ACTIONS_BY_STATE_LXC = { + [VM_ACTIONS.BACKUP]: [STATES.POWEROFF], + [VM_ACTIONS.DEPLOY]: [ + STATES.PENDING, + STATES.HOLD, + STATES.STOPPED, + STATES.UNDEPLOYED, + STATES.UNKNOWN, + ], + [VM_ACTIONS.CREATE_APP_DIALOG]: [STATES.POWEROFF], + [VM_ACTIONS.HOLD]: [STATES.PENDING], + [VM_ACTIONS.LOCK]: [], + [VM_ACTIONS.MIGRATE_LIVE]: [STATES.RUNNING, STATES.UNKNOWN], + [VM_ACTIONS.MIGRATE_POFF_HARD]: [STATES.RUNNING, STATES.UNKNOWN], + [VM_ACTIONS.MIGRATE_POFF]: [STATES.RUNNING, STATES.UNKNOWN], + [VM_ACTIONS.MIGRATE]: [ + STATES.SUSPENDED, + STATES.POWEROFF, + STATES.RUNNING, + STATES.UNKNOWN, + ], + [VM_ACTIONS.POWEROFF_HARD]: [STATES.RUNNING, STATES.UNKNOWN], + [VM_ACTIONS.POWEROFF]: [STATES.RUNNING, STATES.UNKNOWN], + [VM_ACTIONS.REBOOT_HARD]: [STATES.RUNNING], + [VM_ACTIONS.REBOOT]: [STATES.RUNNING], + [VM_ACTIONS.RECOVER]: [ + STATES.INIT, + STATES.PENDING, + STATES.HOLD, + STATES.ACTIVE, + STATES.STOPPED, + STATES.SUSPENDED, + STATES.POWEROFF, + STATES.UNDEPLOYED, + STATES.CLONING, + STATES.CLONING_FAILURE, + ], + [VM_ACTIONS.RELEASE]: [STATES.HOLD], + [VM_ACTIONS.RESCHED]: [STATES.POWEROFF, STATES.RUNNING, STATES.UNKNOWN], + [VM_ACTIONS.RESUME]: [ + STATES.STOPPED, + STATES.SUSPENDED, + STATES.POWEROFF, + STATES.UNDEPLOYED, + STATES.UNKNOWN, + ], + [VM_ACTIONS.SAVE_AS_TEMPLATE]: [STATES.POWEROFF], + [VM_ACTIONS.STOP]: [STATES.SUSPENDED, STATES.RUNNING], + [VM_ACTIONS.SUSPEND]: [STATES.RUNNING], + [VM_ACTIONS.TERMINATE_HARD]: [ + STATES.INIT, + STATES.PENDING, + STATES.HOLD, + STATES.STOPPED, + STATES.SUSPENDED, + STATES.POWEROFF, + STATES.UNDEPLOYED, + STATES.CLONING, + STATES.CLONING_FAILURE, + STATES.RUNNING, + STATES.UNKNOWN, + ], + [VM_ACTIONS.TERMINATE]: [ + STATES.RUNNING, + STATES.FAILURE, + STATES.BOOT_FAILURE, + STATES.BOOT_MIGRATE_FAILURE, + STATES.PROLOG_MIGRATE_FAILURE, + STATES.PROLOG_FAILURE, + STATES.EPILOG_FAILURE, + STATES.EPILOG_STOP_FAILURE, + STATES.EPILOG_UNDEPLOY_FAILURE, + STATES.PROLOG_MIGRATE_POWEROFF_FAILURE, + STATES.PROLOG_MIGRATE_SUSPEND_FAILURE, + STATES.BOOT_UNDEPLOY_FAILURE, + STATES.BOOT_STOPPED_FAILURE, + STATES.PROLOG_RESUME_FAILURE, + STATES.PROLOG_UNDEPLOY_FAILURE, + STATES.PROLOG_MIGRATE_UNKNOWN_FAILURE, + ], + [VM_ACTIONS.UNDEPLOY_HARD]: [STATES.POWEROFF, STATES.RUNNING, STATES.UNKNOWN], + [VM_ACTIONS.UNDEPLOY]: [STATES.POWEROFF, STATES.RUNNING, STATES.UNKNOWN], + [VM_ACTIONS.UNLOCK]: [], + [VM_ACTIONS.UNRESCHED]: [STATES.RUNNING, STATES.UNKNOWN], + + // REMOTE + [VM_ACTIONS.VMRC]: [STATES.RUNNING], + [VM_ACTIONS.VNC]: [STATES.RUNNING], + [VM_ACTIONS.SSH]: [STATES.RUNNING], + [VM_ACTIONS.RDP]: [STATES.RUNNING], + [VM_ACTIONS.FILE_RDP]: [STATES.RUNNING], + [VM_ACTIONS.FILE_VIRT_VIEWER]: [STATES.RUNNING], + + // INFORMATION + [VM_ACTIONS.RENAME]: [], + [VM_ACTIONS.CHANGE_MODE]: [], + [VM_ACTIONS.CHANGE_OWNER]: [], + [VM_ACTIONS.CHANGE_GROUP]: [], + + // CAPACITY + [VM_ACTIONS.RESIZE_CAPACITY]: [ + STATES.INIT, + STATES.PENDING, + STATES.HOLD, + STATES.ACTIVE, + STATES.POWEROFF, + STATES.UNDEPLOYED, + STATES.CLONING, + STATES.CLONING_FAILURE, + ], + + // STORAGE + [VM_ACTIONS.ATTACH_DISK]: [STATES.POWEROFF, STATES.RUNNING], + [VM_ACTIONS.DETACH_DISK]: [STATES.POWEROFF, STATES.RUNNING], + [VM_ACTIONS.SNAPSHOT_DISK_CREATE]: [ + STATES.SUSPENDED, + STATES.POWEROFF, + STATES.RUNNING, + ], + [VM_ACTIONS.SNAPSHOT_DISK_RENAME]: [], + [VM_ACTIONS.SNAPSHOT_DISK_REVERT]: [STATES.SUSPENDED, STATES.POWEROFF], + [VM_ACTIONS.SNAPSHOT_DISK_DELETE]: [ + STATES.SUSPENDED, + STATES.POWEROFF, + STATES.RUNNING, + ], + [VM_ACTIONS.RESIZE_DISK]: [STATES.POWEROFF, STATES.RUNNING], + [VM_ACTIONS.DISK_SAVEAS]: [STATES.SUSPENDED, STATES.POWEROFF, STATES.RUNNING], + + // NETWORK + [VM_ACTIONS.ATTACH_NIC]: [STATES.POWEROFF, STATES.RUNNING], + [VM_ACTIONS.DETACH_NIC]: [STATES.POWEROFF, STATES.RUNNING], + [VM_ACTIONS.ATTACH_SEC_GROUP]: [STATES.POWEROFF, STATES.RUNNING], + [VM_ACTIONS.DETACH_SEC_GROUP]: [STATES.POWEROFF, STATES.RUNNING], + + // SNAPSHOT + [VM_ACTIONS.SNAPSHOT_CREATE]: [STATES.RUNNING], + [VM_ACTIONS.SNAPSHOT_REVERT]: [STATES.RUNNING], + [VM_ACTIONS.SNAPSHOT_DELETE]: [STATES.POWEROFF, STATES.RUNNING], + + // SCHEDULING ACTION + [VM_ACTIONS.SCHED_ACTION_CREATE]: [], + [VM_ACTIONS.SCHED_ACTION_UPDATE]: [], + [VM_ACTIONS.SCHED_ACTION_DELETE]: [], + [VM_ACTIONS.CHARTER_CREATE]: [], + + // CONFIGURATION + [VM_ACTIONS.UPDATE_CONF]: [ + STATES.PENDING, + STATES.HOLD, + STATES.ACTIVE, + STATES.POWEROFF, + STATES.UNDEPLOYED, + STATES.CLONING, + STATES.CLONING_FAILURE, + STATES.PROLOG, + STATES.EPILOG, + STATES.SHUTDOWN, + STATES.CLEANUP_RESUBMIT, + STATES.SHUTDOWN_POWEROFF, + STATES.CLEANUP_DELETE, + STATES.HOTPLUG_SAVEAS_POWEROFF, + STATES.SHUTDOWN_UNDEPLOY, + STATES.EPILOG_UNDEPLOY, + STATES.PROLOG_UNDEPLOY, + STATES.HOTPLUG_PROLOG_POWEROFF, + STATES.HOTPLUG_EPILOG_POWEROFF, + STATES.BOOT_FAILURE, + STATES.PROLOG_FAILURE, + STATES.EPILOG_FAILURE, + STATES.EPILOG_UNDEPLOY_FAILURE, + STATES.PROLOG_MIGRATE_POWEROFF, + STATES.PROLOG_MIGRATE_POWEROFF_FAILURE, + STATES.BOOT_UNDEPLOY_FAILURE, + STATES.PROLOG_UNDEPLOY_FAILURE, + STATES.DISK_SNAPSHOT_POWEROFF, + STATES.DISK_SNAPSHOT_REVERT_POWEROFF, + STATES.DISK_SNAPSHOT_DELETE_POWEROFF, + ], +} + /** @enum {string} Hypervisors */ export const HYPERVISORS = { kvm: 'kvm', @@ -992,6 +1537,14 @@ export const HYPERVISORS = { lxc: 'lxc', } +/** @enum {string} Virtual machine actions by state */ +export const VM_ACTIONS_BY_STATE = { + [HYPERVISORS.kvm]: VM_ACTIONS_BY_STATE_KVM, + [HYPERVISORS.vcenter]: VM_ACTIONS_BY_STATE_VCENTER, + [HYPERVISORS.firecracker]: VM_ACTIONS_BY_STATE_FIRECRACKER, + [HYPERVISORS.lxc]: VM_ACTIONS_BY_STATE_LXC, +} + /** @type {string[]} Actions that can be scheduled */ export const VM_ACTIONS_WITH_SCHEDULE = [ VM_ACTIONS.BACKUP, diff --git a/src/fireedge/src/client/models/VirtualMachine.js b/src/fireedge/src/client/models/VirtualMachine.js index 29d46dfb46..5cb9e99fb3 100644 --- a/src/fireedge/src/client/models/VirtualMachine.js +++ b/src/fireedge/src/client/models/VirtualMachine.js @@ -300,23 +300,23 @@ export const getScheduleActions = (vm) => { * @param {VM|VM[]} vms - Virtual machines * @returns {boolean} If `true`, the action is available for all VMs */ -export const isAvailableAction = (action, vms = []) => { - if (VM_ACTIONS_BY_STATE[action]?.length === 0) return true - - return [vms].flat().every((vm) => { +export const isAvailableAction = (action, vms = []) => + [vms].flat().every((vm) => { + const hypervisor = getHypervisor(vm) const state = VM_STATES[vm.STATE]?.name const lcmState = VM_LCM_STATES[vm.LCM_STATE]?.name + if (VM_ACTIONS_BY_STATE[hypervisor]?.[action]?.length === 0) return true + return ( (state === STATES.ACTIVE && // if action includes ACTIVE state, // it means that the action is available in all LCM states - (VM_ACTIONS_BY_STATE[action]?.includes(STATES.ACTIVE) || - VM_ACTIONS_BY_STATE[action]?.includes(lcmState))) || - VM_ACTIONS_BY_STATE[action]?.includes(state) + (VM_ACTIONS_BY_STATE[hypervisor]?.[action]?.includes(STATES.ACTIVE) || + VM_ACTIONS_BY_STATE[hypervisor]?.[action]?.includes(lcmState))) || + VM_ACTIONS_BY_STATE[hypervisor]?.[action]?.includes(state) ) }) -} /** * @param {VM} vm - Virtual machine diff --git a/src/sunstone/public/app/tabs/datastores-tab/form-panels/create.js b/src/sunstone/public/app/tabs/datastores-tab/form-panels/create.js index 7e92db113c..4905de7a9a 100644 --- a/src/sunstone/public/app/tabs/datastores-tab/form-panels/create.js +++ b/src/sunstone/public/app/tabs/datastores-tab/form-panels/create.js @@ -219,6 +219,14 @@ define(function(require) { $('input#image_ds_type', dialog).attr('disabled', 'disabled'); _selectRestic(dialog); break; + + case "rsync": + $('input#backup_ds_type', dialog).click() + $('input#system_ds_type', dialog).attr('disabled', 'disabled'); + $('input#file_ds_type', dialog).attr('disabled', 'disabled'); + $('input#image_ds_type', dialog).attr('disabled', 'disabled'); + _selectRsync(dialog); + break; case 'custom': _selectCustom(dialog); @@ -282,6 +290,8 @@ define(function(require) { var restic_bwlimit = $('#restic_bwlimit', dialog).val(); var restic_compression = $('#restic_compression', dialog).val(); var restic_connections = $('#restic_connections', dialog).val(); + var rsync_host = $('#rsync_host', dialog).val(); + var rsync_user = $('#rsync_user', dialog).val(); var ds_obj = { "datastore" : { @@ -391,6 +401,12 @@ define(function(require) { if (restic_connections) ds_obj.datastore.restic_connections = restic_connections; + if (rsync_host) + ds_obj.datastore.rsync_host = rsync_host; + + if (rsync_user) + ds_obj.datastore.rsync_user = rsync_user; + Sunstone.runAction("Datastore.create", ds_obj); return false; } @@ -447,6 +463,8 @@ define(function(require) { $('label[for="restic_compression"]', dialog).parent().hide(); $('label[for="restic_connections"]', dialog).parent().hide(); $('label[for="restic_sftp_server"]', dialog).parent().hide(); + $('label[for="rsync_host"]', dialog).parent().hide(); + $('label[for="rsync_user"]', dialog).parent().hide(); $('input[name="ds_tab_custom_ds_mad"]', dialog).parent().hide(); $('input[name="ds_tab_custom_tm_mad"]', dialog).parent().hide(); @@ -484,6 +502,8 @@ define(function(require) { $('label[for="restic_compression"]', dialog).parent().show(); $('label[for="restic_connections"]', dialog).parent().show(); $('label[for="restic_sftp_server"]', dialog).parent().show(); + $('label[for="rsync_host"]', dialog).parent().show(); + $('label[for="rsync_user"]', dialog).parent().show(); $('input[name="ds_tab_custom_ds_mad"]', dialog).parent().show(); $('input[name="ds_tab_custom_tm_mad"]', dialog).parent().show(); @@ -602,6 +622,19 @@ define(function(require) { $('label[for="restic_sftp_server"]', dialog).parent().fadeIn(); } + function _selectRsync(dialog) { + $('select#disk_type', dialog).val('block'); + $('label[for="limit_transfer_bw"],input#limit_transfer_bw', dialog).parent().hide(); + $('label[for="no_decompress"],input#no_decompress', dialog).parent().hide(); + $('label[for="datastore_capacity_check"],input#datastore_capacity_check', dialog).parent().hide(); + $('input#safe_dirs', dialog).attr('disabled', 'disabled'); + $('input#limit_mb', dialog).attr('disabled', 'disabled'); + $('input#restricted_dirs', dialog).attr('disabled', 'disabled'); + $('label[for="vcenter_cluster"],div#vcenter_cluster_wrapper', dialog).parent().hide(); + $('label[for="rsync_host"]', dialog).parent().fadeIn(); + $('label[for="rsync_user"]', dialog).parent().fadeIn(); + } + function _selectCustom(dialog) { _showAll(dialog); diff --git a/src/sunstone/public/app/tabs/datastores-tab/form-panels/create/wizard.hbs b/src/sunstone/public/app/tabs/datastores-tab/form-panels/create/wizard.hbs index 97ee9880c0..7505946a1b 100644 --- a/src/sunstone/public/app/tabs/datastores-tab/form-panels/create/wizard.hbs +++ b/src/sunstone/public/app/tabs/datastores-tab/form-panels/create/wizard.hbs @@ -33,7 +33,8 @@ - + + @@ -245,21 +246,17 @@
+ +
@@ -318,6 +315,22 @@ + + +
+ + +
+ +
+ + +
+
{{#advancedSection (tr "Advanced options") }}