1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-21 14:50:08 +03:00

F #5516: Add backup functionality and actions (#2337)

by hypervisor & vm state
This commit is contained in:
Frederick Borges 2022-11-03 18:34:05 +01:00 committed by GitHub
parent 51d5a95a95
commit 61b920b505
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 617 additions and 17 deletions

View File

@ -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,
}

View File

@ -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,

View File

@ -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

View File

@ -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);

View File

@ -33,7 +33,8 @@
<option ds="fs" tm="fs_lvm" value="lvm">{{tr "LVM"}}</option>
<option ds="dev" tm="dev" value="raw">{{tr "Raw Device Mapping"}}</option>
<option ds="iscsi_libvirt" tm="iscsi_libvirt" value="iscsi_libvirt">{{tr "iSCSI - Libvirt initiator "}}</option>
<option ds="restic" tm="-" value="restic">{{tr "Backup - Restic"}}</option>
<option ds="restic" tm="-" value="restic">{{tr "Backup - Restic (EE Only)"}}</option>
<option ds="rsync" tm="-" value="rsync">{{tr "Backup - RSync"}}</option>
<option value="custom">{{tr "Custom"}}</option>
</select>
</div>
@ -245,21 +246,17 @@
<div id="vcenter_cluster_wrapper"></div>
</label>
</div>
<!-- RESTIC ATTRIBUTES -->
<div class="medium-6 columns">
<label for="restic_password">
{{tr "Restic Password"}}
{{!-- <span class="tip">
{{tr ""}}
</span> --}}
</label>
<input type="text" name="restic_password" id="restic_password" />
</div>
<div class="medium-6 columns">
<label for="restic_sftp_server">
{{tr "Restic SFTP Server"}}
{{!-- <span class="tip">
{{tr ""}}
</span> --}}
</label>
<input type="text" name="restic_sftp_server" id="restic_sftp_server" />
</div>
@ -318,6 +315,22 @@
</label>
<input type="number" name="restic_connections" id="restic_connections"/>
</div>
<!-- RSYNC ATTRIBUTES -->
<div class="medium-6 columns">
<label for="rsync_host">
{{tr "RSync host"}}
</label>
<input type="text" name="rsync_host" id="rsync_host"/>
</div>
<div class="medium-6 columns">
<label for="rsync_user">
{{tr "RSync user"}}
</label>
<input type="text" name="rsync_user" id="rsync_user"/>
</div>
</div>
<div class="ceph_advanced">
{{#advancedSection (tr "Advanced options") }}