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 = "