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

F #1112: Allow disk-saveas in undeployed, stopped (#591)

This commit is contained in:
Pavel Czerný 2021-01-08 10:50:12 +01:00 committed by Tino Vazquez
parent e0e3feada8
commit 5233525ea2
No known key found for this signature in database
GPG Key ID: 14201E424D02047E
17 changed files with 127 additions and 25 deletions

View File

@ -136,7 +136,9 @@ public:
DISK_RESIZE_POWEROFF = 63,
DISK_RESIZE_UNDEPLOYED = 64,
HOTPLUG_NIC_POWEROFF = 65,
HOTPLUG_RESIZE = 66
HOTPLUG_RESIZE = 66,
HOTPLUG_SAVEAS_UNDEPLOYED = 67,
HOTPLUG_SAVEAS_STOPPED = 68
};
/**
@ -1226,8 +1228,11 @@ public:
*/
int set_saveas_disk(int disk_id, const std::string& source, int img_id)
{
if (lcm_state != HOTPLUG_SAVEAS && lcm_state != HOTPLUG_SAVEAS_SUSPENDED
&& lcm_state != HOTPLUG_SAVEAS_POWEROFF )
if (lcm_state != HOTPLUG_SAVEAS &&
lcm_state != HOTPLUG_SAVEAS_SUSPENDED &&
lcm_state != HOTPLUG_SAVEAS_POWEROFF &&
lcm_state != HOTPLUG_SAVEAS_UNDEPLOYED &&
lcm_state != HOTPLUG_SAVEAS_STOPPED)
{
return -1;
}

View File

@ -222,6 +222,8 @@ module OneGate
DISK_RESIZE_UNDEPLOYED
HOTPLUG_NIC_POWEROFF
HOTPLUG_RESIZE
HOTPLUG_SAVEAS_UNDEPLOYED
HOTPLUG_SAVEAS_STOPPED
}
SHORT_VM_STATES={
@ -304,7 +306,9 @@ module OneGate
"DISK_RESIZE_POWEROFF" => "drsz",
"DISK_RESIZE_UNDEPLOYED" => "drsz",
"HOTPLUG_NIC_POWEROFF" => "hotp",
"HOTPLUG_RESIZE" => "hotp"
"HOTPLUG_RESIZE" => "hotp",
"HOTPLUG_SAVEAS_UNDEPLOYED" => "hotp",
"HOTPLUG_SAVEAS_STOPPED" => "hotp"
}
def self.state_to_str(id, lcm_id)

View File

@ -617,6 +617,8 @@ func (d *Driver) GetState() (state.State, error) {
case "HOTPLUG_SAVEAS_POWEROFF",
"HOTPLUG_SAVEAS_SUSPENDED",
"HOTPLUG_SAVEAS_UNDEPLOYED",
"HOTPLUG_SAVEAS_STOPPED",
"HOTPLUG_PROLOG_POWEROFF",
"HOTPLUG_EPILOG_POWEROFF",
"HOTPLUG_NIC_POWEROFF",

View File

@ -1094,6 +1094,11 @@ void LifeCycleManager::clean_up_vm(VirtualMachine * vm, bool dispose,
tm->trigger_epilog_delete(vm);
break;
case VirtualMachine::HOTPLUG_SAVEAS_UNDEPLOYED:
case VirtualMachine::HOTPLUG_SAVEAS_STOPPED:
image_id = vm->clear_saveas_disk();
break;
case VirtualMachine::HOTPLUG_PROLOG_POWEROFF:
case VirtualMachine::HOTPLUG_EPILOG_POWEROFF:
vm->clear_attach_disk();
@ -1302,6 +1307,8 @@ void LifeCycleManager::recover(VirtualMachine * vm, bool success,
case VirtualMachine::HOTPLUG_SAVEAS:
case VirtualMachine::HOTPLUG_SAVEAS_POWEROFF:
case VirtualMachine::HOTPLUG_SAVEAS_SUSPENDED:
case VirtualMachine::HOTPLUG_SAVEAS_UNDEPLOYED:
case VirtualMachine::HOTPLUG_SAVEAS_STOPPED:
if (success)
{
trigger_saveas_success(vim);
@ -1699,6 +1706,8 @@ void LifeCycleManager::retry(VirtualMachine * vm)
case VirtualMachine::HOTPLUG_SAVEAS:
case VirtualMachine::HOTPLUG_SAVEAS_POWEROFF:
case VirtualMachine::HOTPLUG_SAVEAS_SUSPENDED:
case VirtualMachine::HOTPLUG_SAVEAS_UNDEPLOYED:
case VirtualMachine::HOTPLUG_SAVEAS_STOPPED:
case VirtualMachine::HOTPLUG_PROLOG_POWEROFF:
case VirtualMachine::HOTPLUG_EPILOG_POWEROFF:
case VirtualMachine::HOTPLUG_RESIZE:
@ -1828,6 +1837,8 @@ void LifeCycleManager::trigger_updatesg(int sgid)
case VirtualMachine::DISK_SNAPSHOT_DELETE_SUSPENDED:
case VirtualMachine::HOTPLUG_SAVEAS_POWEROFF:
case VirtualMachine::HOTPLUG_SAVEAS_SUSPENDED:
case VirtualMachine::HOTPLUG_SAVEAS_UNDEPLOYED:
case VirtualMachine::HOTPLUG_SAVEAS_STOPPED:
case VirtualMachine::HOTPLUG_PROLOG_POWEROFF:
case VirtualMachine::HOTPLUG_EPILOG_POWEROFF:
is_tmpl = true;

View File

@ -296,6 +296,15 @@ const (
// HotplugNicPoweroff lcm state
HotplugNicPoweroff = 65
// HotplugResize lcm state
HotplugResize = 66
// HotplugSaveasUndeployed lcm state
HotplugSaveasUndeployed = 67
// HotplugSaveasStopped lcm state
HotplugSaveasStopped = 68
)
func (s LCMState) isValid() bool {
@ -435,6 +444,12 @@ func (s LCMState) String() string {
return "DISK_RESIZE_UNDEPLOYED"
case HotplugNicPoweroff:
return "HOTPLUG_NIC_POWEROFF"
case HotplugrResize:
return "HOTPLUG_RESIZE"
case HotplugSaveasUndeployed:
return "HOTPLUG_SAVEAS_UNDEPLOYED"
case HotplugSaveasStopped:
return "HOTPLUG_SAVEAS_STOPPED"
default:
return ""
}

View File

@ -155,7 +155,9 @@ public class VirtualMachine extends PoolElement{
"DISK_RESIZE_POWEROFF",
"DISK_RESIZE_UNDEPLOYED",
"HOTPLUG_NIC_POWEROFF",
"HOTPLUG_RESIZE"
"HOTPLUG_RESIZE",
"HOTPLUG_SAVEAS_UNDEPLOYED",
"HOTPLUG_SAVEAS_STOPPED"
};
private static final String[] SHORT_LCM_STATES =
@ -226,7 +228,9 @@ public class VirtualMachine extends PoolElement{
"drsz", // DISK_RESIZE_POWEROFF
"drsz", // DISK_RESIZE_UNDEPLOYED
"hotp", // HOTPLUG_NIC_POWEROFF
"hotp" // HOTPLUG_RESIZE
"hotp", // HOTPLUG_RESIZE
"hotp", // HOTPLUG_SAVEAS_UNDEPLOYED
"hotp" // HOTPLUG_SAVEAS_STOPPED
};
/**

View File

@ -155,7 +155,9 @@ LCM_STATE = IntEnum('LCM_STATE', '''
DISK_RESIZE_POWEROFF
DISK_RESIZE_UNDEPLOYED
HOTPLUG_NIC_POWEROFF
HOTPLUG_RESIZE''', start=0)
HOTPLUG_RESIZE
HOTPLUG_SAVEAS_UNDEPLOYED
HOTPLUG_SAVEAS_STOPPED''', start=0)
MARKETPLACEAPP_STATES = IntEnum('MARKETPLACEAPP_STATES', '''INIT READY LOCKED
ERROR DISABLED''', start=0)

View File

@ -125,6 +125,8 @@ module OpenNebula
DISK_RESIZE_UNDEPLOYED
HOTPLUG_NIC_POWEROFF
HOTPLUG_RESIZE
HOTPLUG_SAVEAS_UNDEPLOYED
HOTPLUG_SAVEAS_STOPPED
}
SHORT_VM_STATES={
@ -207,7 +209,9 @@ module OpenNebula
"DISK_RESIZE_POWEROFF" => "drsz",
"DISK_RESIZE_UNDEPLOYED" => "drsz",
"HOTPLUG_NIC_POWEROFF" => "hotp",
"HOTPLUG_RESIZE" => "hotp"
"HOTPLUG_RESIZE" => "hotp",
"HOTPLUG_SAVEAS_UNDEPLOYED" => "hotp",
"HOTPLUG_SAVEAS_STOPPED" => "hotp"
}
HISTORY_ACTION=%w{none migrate live-migrate shutdown shutdown-hard

View File

@ -99,6 +99,8 @@ VNC_STATES = [
#64 #DISK_RESIZE_UNDEPLOYED
#65 #HOTPLUG_NIC_POWEROFF
#66 #HOTPLUG_RESIZE
#67, #HOTPLUG_SAVEAS_UNDEPLOYED
#68, #HOTPLUG_SAVEAS_STOPPED
]
class OpenNebulaVNC

View File

@ -103,6 +103,9 @@ GUAC_STATES = [
# 63, # DISK_RESIZE_POWEROFF
# 64, # DISK_RESIZE_UNDEPLOYED
# 65, #HOTPLUG_NIC_POWEROFF
# 66, # HOTPLUG_RESIZE
# 67, # HOTPLUG_SAVEAS_UNDEPLOYED
# 68, # HOTPLUG_SAVEAS_STOPPED
]
# Class for Guacamole connection configuration

View File

@ -99,8 +99,11 @@ VMRC_STATES = [
# 61, # PROLOG_MIGRATE_UNKNOWN_FAILURE
'62' # DISK_RESIZE
# 63, # DISK_RESIZE_POWEROFF
# 64 # DISK_RESIZE_UNDEPLOYED
# 65 # HOTPLUG_NIC_POWEROFF
# 64, # DISK_RESIZE_UNDEPLOYED
# 65, # HOTPLUG_NIC_POWEROFF
# 66, # HOTPLUG_RESIZE
# 67, # HOTPLUG_SAVEAS_UNDEPLOYED
# 68, # HOTPLUG_SAVEAS_STOPPED
]
# Class for necessary VMRC ticket creation

View File

@ -137,7 +137,9 @@ define(function(require) {
"DISK_RESIZE_POWEROFF",
"DISK_RESIZE_UNDEPLOYED",
"HOTPLUG_NIC_POWEROFF",
"HOTPLUG_RESIZE"
"HOTPLUG_RESIZE",
"HOTPLUG_SAVEAS_UNDEPLOYED",
"HOTPLUG_SAVEAS_STOPPED"
];
var LCM_STATES_CLASSES = [
@ -206,7 +208,10 @@ define(function(require) {
"info", // DISK_RESIZE
"info", // DISK_RESIZE_POWEROFF
"info", // DISK_RESIZE_UNDEPLOYED
"info" // HOTPLUG_NIC_POWEROFF
"info", // HOTPLUG_NIC_POWEROFF
"info", // HOTPLUG_RESIZE
"info", // HOTPLUG_SAVEAS_UNDEPLOYED
"info", // HOTPLUG_SAVEAS_STOPPED
];
var LCM_STATES = {
@ -276,7 +281,9 @@ define(function(require) {
DISK_RESIZE_POWEROFF : 63,
DISK_RESIZE_UNDEPLOYED : 64,
HOTPLUG_NIC_POWEROFF : 65,
HOTPLUG_RESIZE : 66
HOTPLUG_RESIZE : 66,
HOTPLUG_SAVEAS_UNDEPLOYED : 67,
HOTPLUG_SAVEAS_STOPPED : 68
};
var SHORT_LCM_STATES_STR = [
@ -346,7 +353,9 @@ define(function(require) {
Locale.tr("DISK_RSZ"), // DISK_RESIZE_POWEROFF
Locale.tr("DISK_RSZ"), // DISK_RESIZE_UNDEPLOYED
Locale.tr("HOTPLUG"), // HOTPLUG_NIC_POWEROFF
Locale.tr("HOTPLUG") // HOTPLUG_RESIZE
Locale.tr("HOTPLUG"), // HOTPLUG_RESIZE
Locale.tr("HOTPLUG"), // HOTPLUG_SAVEAS_UNDEPLOYED
Locale.tr("HOTPLUG") // HOTPLUG_SAVEAS_STOPPED
];
var VNC_STATES = [

View File

@ -180,7 +180,7 @@ define(function(require) {
monitoring = "<li class=\"provision-bullet-item\"><span class=\"\"><i class=\"fas fa-fw fa-lg fa-server\"/>" + data.MONITORING.GUEST_IP + "</span></li>";
}
var charter = VMsTableUtils.leasesClock(data);
var addStyle = charter && charter.length && 'style="padding-left:.5rem;"'
var addStyle = charter && charter.length && 'style="padding-left:.5rem;"'
$(".provision_vms_ul", context).append("<div class='column'>\
<ul class='8 provision-pricing-table menu vertical' opennebula_id='"+data.ID+"' datatable_index='"+iDisplayIndexFull+"'>\
<li class='provision-title'>\
@ -189,7 +189,7 @@ define(function(require) {
<span class='"+ state.color +"-color right' title='"+state.str+"'>\
<i class='fas fa-square'/>\
</span>"+
data.NAME +
data.NAME +
"</a>\
<div class='charter' "+addStyle+">"+charter+"</div> \
</div>\
@ -918,6 +918,8 @@ define(function(require) {
case OpenNebulaVM.LCM_STATES.HOTPLUG_SAVEAS:
case OpenNebulaVM.LCM_STATES.HOTPLUG_SAVEAS_POWEROFF:
case OpenNebulaVM.LCM_STATES.HOTPLUG_SAVEAS_SUSPENDED:
case OpenNebulaVM.LCM_STATES.HOTPLUG_SAVEAS_UNDEPLOYED:
case OpenNebulaVM.LCM_STATES.HOTPLUG_SAVEAS_STOPPED:
case OpenNebulaVM.LCM_STATES.HOTPLUG_PROLOG_POWEROFF:
case OpenNebulaVM.LCM_STATES.HOTPLUG_EPILOG_POWEROFF:
state_color = "deploying";

View File

@ -50,10 +50,10 @@ define(function(require) {
var XML_ROOT = "VM"
var isFirecracker = function(context){
return context &&
context.element &&
context.element.USER_TEMPLATE &&
context.element.USER_TEMPLATE.HYPERVISOR &&
return context &&
context.element &&
context.element.USER_TEMPLATE &&
context.element.USER_TEMPLATE.HYPERVISOR &&
context.element.USER_TEMPLATE.HYPERVISOR === "firecracker"
}
@ -281,7 +281,9 @@ define(function(require) {
(
that.element.LCM_STATE == OpenNebulaVM.LCM_STATES.HOTPLUG_SAVEAS ||
that.element.LCM_STATE == OpenNebulaVM.LCM_STATES.HOTPLUG_SAVEAS_POWEROFF ||
that.element.LCM_STATE == OpenNebulaVM.LCM_STATES.HOTPLUG_SAVEAS_SUSPENDED) &&
that.element.LCM_STATE == OpenNebulaVM.LCM_STATES.HOTPLUG_SAVEAS_SUSPENDED ||
that.element.LCM_STATE == OpenNebulaVM.LCM_STATES.HOTPLUG_SAVEAS_UNDEPLOYED ||
that.element.LCM_STATE == OpenNebulaVM.LCM_STATES.HOTPLUG_SAVEAS_STOPPED) &&
(
disk.HOTPLUG_SAVE_AS_ACTIVE == "YES")
) {
@ -345,7 +347,7 @@ define(function(require) {
<i class="fas fa-camera fa-fw" title="Snapshot"></i></a> &emsp;');//+ Locale.tr("Snapshot") +
}
}
if (Config.isTabActionEnabled("vms-tab", "VM.disk_resize")) {
if (validateState(that,"VM.disk_resize") && !disk.CONTEXT) {
actions += ('<a class="disk_resize nowrap" >\
@ -644,10 +646,10 @@ define(function(require) {
if (Config.isTabActionEnabled("vms-tab", "VM.disk_resize")) {
context.off('click', '.disk_resize');
context.on('click', '.disk_resize', function() {
// Error message when try to resize a disk on a
// Error message when try to resize a disk on a
// VM with VCenter hypervisor and snapshots.
if (that && that.element &&
if (that && that.element &&
that.element.TEMPLATE && that.element.TEMPLATE.SNAPSHOT &&
that.element.USER_TEMPLATE && that.element.USER_TEMPLATE.HYPERVISOR=="vcenter"){
Notifier.notifyError("'disk-resize' operation not supported for VMs with snapshots");

View File

@ -125,6 +125,8 @@ define(function(require) {
LCM_STATE_ACTIONS[ OpenNebulaVM.LCM_STATES.DISK_RESIZE_POWEROFF ] = [];
LCM_STATE_ACTIONS[ OpenNebulaVM.LCM_STATES.DISK_RESIZE_UNDEPLOYED ] = [];
LCM_STATE_ACTIONS[ OpenNebulaVM.LCM_STATES.HOTPLUG_RESIZE ] = [];
LCM_STATE_ACTIONS[ OpenNebulaVM.LCM_STATES.HOTPLUG_SAVEAS_UNDEPLOYED ] = [];
LCM_STATE_ACTIONS[ OpenNebulaVM.LCM_STATES.HOTPLUG_SAVEAS_STOPPED ] = [];
return {
'disableAllStateActions': disableAllStateActions,

View File

@ -87,6 +87,8 @@ void TransferManager::_transfer(unique_ptr<transfer_msg_t> msg)
case VirtualMachine::HOTPLUG_SAVEAS:
case VirtualMachine::HOTPLUG_SAVEAS_POWEROFF:
case VirtualMachine::HOTPLUG_SAVEAS_SUSPENDED:
case VirtualMachine::HOTPLUG_SAVEAS_UNDEPLOYED:
case VirtualMachine::HOTPLUG_SAVEAS_STOPPED:
lcm->trigger_saveas_success(id);
break;
@ -156,6 +158,8 @@ void TransferManager::_transfer(unique_ptr<transfer_msg_t> msg)
case VirtualMachine::HOTPLUG_SAVEAS:
case VirtualMachine::HOTPLUG_SAVEAS_POWEROFF:
case VirtualMachine::HOTPLUG_SAVEAS_SUSPENDED:
case VirtualMachine::HOTPLUG_SAVEAS_UNDEPLOYED:
case VirtualMachine::HOTPLUG_SAVEAS_STOPPED:
lcm->trigger_saveas_failure(id);
break;

View File

@ -292,6 +292,10 @@ int VirtualMachine::lcm_state_from_str(string& st, LcmState& state)
state = HOTPLUG_NIC_POWEROFF;
} else if ( st == "HOTPLUG_RESIZE" ) {
state = HOTPLUG_RESIZE;
} else if ( st == "HOTPLUG_SAVEAS_UNDEPLOYED" ) {
state = HOTPLUG_SAVEAS_UNDEPLOYED;
} else if ( st == "HOTPLUG_SAVEAS_STOPPED" ) {
state = HOTPLUG_SAVEAS_STOPPED;
} else {
return -1;
}
@ -433,6 +437,10 @@ string& VirtualMachine::lcm_state_to_str(string& st, LcmState state)
st = "HOTPLUG_NIC_POWEROFF"; break;
case HOTPLUG_RESIZE:
st = "HOTPLUG_RESIZE"; break;
case HOTPLUG_SAVEAS_UNDEPLOYED:
st = "HOTPLUG_SAVEAS_UNDEPLOYED"; break;
case HOTPLUG_SAVEAS_STOPPED:
st = "HOTPLUG_SAVEAS_STOPPED"; break;
}
return st;
@ -3182,6 +3190,16 @@ int VirtualMachine::set_saveas_state()
set_state(HOTPLUG_SAVEAS_SUSPENDED);
break;
case UNDEPLOYED:
set_state(ACTIVE);
set_state(HOTPLUG_SAVEAS_UNDEPLOYED);
break;
case STOPPED:
set_state(ACTIVE);
set_state(HOTPLUG_SAVEAS_STOPPED);
break;
default:
return -1;
}
@ -3210,6 +3228,16 @@ int VirtualMachine::clear_saveas_state()
set_state(LCM_INIT);
break;
case HOTPLUG_SAVEAS_UNDEPLOYED:
set_state(UNDEPLOYED);
set_state(LCM_INIT);
break;
case HOTPLUG_SAVEAS_STOPPED:
set_state(STOPPED);
set_state(LCM_INIT);
break;
default:
return -1;
}