From 5233525ea24ed89255c4af994158a7b3bf8a04d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Czern=C3=BD?= Date: Fri, 8 Jan 2021 10:50:12 +0100 Subject: [PATCH] F #1112: Allow disk-saveas in undeployed, stopped (#591) --- include/VirtualMachine.h | 11 ++++++-- share/onegate/onegate | 6 +++- .../src/docker_machine/opennebula.go | 2 ++ src/lcm/LifeCycleActions.cc | 11 ++++++++ src/oca/go/src/goca/schemas/vm/vm_state.go | 15 ++++++++++ .../opennebula/client/vm/VirtualMachine.java | 8 ++++-- src/oca/python/pyone/__init__.py | 4 ++- src/oca/ruby/opennebula/virtual_machine.rb | 6 +++- src/sunstone/OpenNebulaVNC.rb | 2 ++ src/sunstone/opennebula_guac.rb | 3 ++ src/sunstone/opennebula_vmrc.rb | 7 +++-- src/sunstone/public/app/opennebula/vm.js | 17 ++++++++--- .../public/app/tabs/provision-tab/vms/list.js | 6 ++-- .../public/app/tabs/vms-tab/panels/storage.js | 20 +++++++------ .../app/tabs/vms-tab/utils/state-actions.js | 2 ++ src/tm/TransferManagerProtocol.cc | 4 +++ src/vm/VirtualMachine.cc | 28 +++++++++++++++++++ 17 files changed, 127 insertions(+), 25 deletions(-) diff --git a/include/VirtualMachine.h b/include/VirtualMachine.h index 1ca913371f..7f1168bfcc 100644 --- a/include/VirtualMachine.h +++ b/include/VirtualMachine.h @@ -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; } diff --git a/share/onegate/onegate b/share/onegate/onegate index 18c32fd2d8..67540e2304 100755 --- a/share/onegate/onegate +++ b/share/onegate/onegate @@ -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) diff --git a/src/docker_machine/src/docker_machine/opennebula.go b/src/docker_machine/src/docker_machine/opennebula.go index 6f3ddcb0a1..3954ceaf51 100644 --- a/src/docker_machine/src/docker_machine/opennebula.go +++ b/src/docker_machine/src/docker_machine/opennebula.go @@ -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", diff --git a/src/lcm/LifeCycleActions.cc b/src/lcm/LifeCycleActions.cc index b477509697..52d643e578 100644 --- a/src/lcm/LifeCycleActions.cc +++ b/src/lcm/LifeCycleActions.cc @@ -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; diff --git a/src/oca/go/src/goca/schemas/vm/vm_state.go b/src/oca/go/src/goca/schemas/vm/vm_state.go index 42dc4224c3..c569112aec 100644 --- a/src/oca/go/src/goca/schemas/vm/vm_state.go +++ b/src/oca/go/src/goca/schemas/vm/vm_state.go @@ -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 "" } diff --git a/src/oca/java/src/org/opennebula/client/vm/VirtualMachine.java b/src/oca/java/src/org/opennebula/client/vm/VirtualMachine.java index 794d16d05c..48af59e554 100644 --- a/src/oca/java/src/org/opennebula/client/vm/VirtualMachine.java +++ b/src/oca/java/src/org/opennebula/client/vm/VirtualMachine.java @@ -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 }; /** diff --git a/src/oca/python/pyone/__init__.py b/src/oca/python/pyone/__init__.py index dad2db81c0..423bb355b7 100644 --- a/src/oca/python/pyone/__init__.py +++ b/src/oca/python/pyone/__init__.py @@ -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) diff --git a/src/oca/ruby/opennebula/virtual_machine.rb b/src/oca/ruby/opennebula/virtual_machine.rb index 801f3e72ee..6702b14484 100644 --- a/src/oca/ruby/opennebula/virtual_machine.rb +++ b/src/oca/ruby/opennebula/virtual_machine.rb @@ -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 diff --git a/src/sunstone/OpenNebulaVNC.rb b/src/sunstone/OpenNebulaVNC.rb index 67c2b00755..c24430a0d3 100644 --- a/src/sunstone/OpenNebulaVNC.rb +++ b/src/sunstone/OpenNebulaVNC.rb @@ -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 diff --git a/src/sunstone/opennebula_guac.rb b/src/sunstone/opennebula_guac.rb index 3aa461e252..de9194d6cd 100644 --- a/src/sunstone/opennebula_guac.rb +++ b/src/sunstone/opennebula_guac.rb @@ -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 diff --git a/src/sunstone/opennebula_vmrc.rb b/src/sunstone/opennebula_vmrc.rb index b26cee1e74..96a404c6a9 100644 --- a/src/sunstone/opennebula_vmrc.rb +++ b/src/sunstone/opennebula_vmrc.rb @@ -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 diff --git a/src/sunstone/public/app/opennebula/vm.js b/src/sunstone/public/app/opennebula/vm.js index 1e79964c25..e4d94b99a2 100644 --- a/src/sunstone/public/app/opennebula/vm.js +++ b/src/sunstone/public/app/opennebula/vm.js @@ -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 = [ diff --git a/src/sunstone/public/app/tabs/provision-tab/vms/list.js b/src/sunstone/public/app/tabs/provision-tab/vms/list.js index 0ecd7f5f14..925f231078 100644 --- a/src/sunstone/public/app/tabs/provision-tab/vms/list.js +++ b/src/sunstone/public/app/tabs/provision-tab/vms/list.js @@ -180,7 +180,7 @@ define(function(require) { monitoring = "
  • " + data.MONITORING.GUEST_IP + "
  • "; } 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("
    \
    \ @@ -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"; diff --git a/src/sunstone/public/app/tabs/vms-tab/panels/storage.js b/src/sunstone/public/app/tabs/vms-tab/panels/storage.js index e10c60a8b5..d9f314322d 100644 --- a/src/sunstone/public/app/tabs/vms-tab/panels/storage.js +++ b/src/sunstone/public/app/tabs/vms-tab/panels/storage.js @@ -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) {  ');//+ Locale.tr("Snapshot") + } } - + if (Config.isTabActionEnabled("vms-tab", "VM.disk_resize")) { if (validateState(that,"VM.disk_resize") && !disk.CONTEXT) { actions += ('\ @@ -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"); diff --git a/src/sunstone/public/app/tabs/vms-tab/utils/state-actions.js b/src/sunstone/public/app/tabs/vms-tab/utils/state-actions.js index 61a8a5dca6..4ec1e5716f 100644 --- a/src/sunstone/public/app/tabs/vms-tab/utils/state-actions.js +++ b/src/sunstone/public/app/tabs/vms-tab/utils/state-actions.js @@ -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, diff --git a/src/tm/TransferManagerProtocol.cc b/src/tm/TransferManagerProtocol.cc index e131d2100a..9c33e29019 100644 --- a/src/tm/TransferManagerProtocol.cc +++ b/src/tm/TransferManagerProtocol.cc @@ -87,6 +87,8 @@ void TransferManager::_transfer(unique_ptr 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 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; diff --git a/src/vm/VirtualMachine.cc b/src/vm/VirtualMachine.cc index c85ae19d73..77a600464e 100644 --- a/src/vm/VirtualMachine.cc +++ b/src/vm/VirtualMachine.cc @@ -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; }