diff --git a/src/cli/onevm b/src/cli/onevm index bf6c4dd074..713f327068 100755 --- a/src/cli/onevm +++ b/src/cli/onevm @@ -318,7 +318,7 @@ cmd=CommandParser::CmdParser.new(ARGV) do With --hard it unplugs the VM. - States: RUNNING + States: RUNNING, UNKNOWN (with --hard) EOT command :shutdown, shutdown_desc, [:range,:vmid_list], diff --git a/src/dm/DispatchManagerActions.cc b/src/dm/DispatchManagerActions.cc index f2d7672b8a..cc2131fb32 100644 --- a/src/dm/DispatchManagerActions.cc +++ b/src/dm/DispatchManagerActions.cc @@ -181,7 +181,8 @@ int DispatchManager::shutdown ( NebulaLog::log("DiM",Log::DEBUG,oss); if (vm->get_state() == VirtualMachine::ACTIVE && - vm->get_lcm_state() == VirtualMachine::RUNNING ) + (vm->get_lcm_state() == VirtualMachine::RUNNING || + vm->get_lcm_state() == VirtualMachine::UNKNOWN)) { Nebula& nd = Nebula::instance(); LifeCycleManager * lcm = nd.get_lcm(); @@ -228,7 +229,8 @@ int DispatchManager::undeploy( NebulaLog::log("DiM",Log::DEBUG,oss); if (vm->get_state() == VirtualMachine::ACTIVE && - vm->get_lcm_state() == VirtualMachine::RUNNING ) + (vm->get_lcm_state() == VirtualMachine::RUNNING || + vm->get_lcm_state() == VirtualMachine::UNKNOWN)) { Nebula& nd = Nebula::instance(); LifeCycleManager * lcm = nd.get_lcm(); @@ -281,7 +283,8 @@ int DispatchManager::poweroff ( NebulaLog::log("DiM",Log::DEBUG,oss); if (vm->get_state() == VirtualMachine::ACTIVE && - vm->get_lcm_state() == VirtualMachine::RUNNING ) + (vm->get_lcm_state() == VirtualMachine::RUNNING || + vm->get_lcm_state() == VirtualMachine::UNKNOWN)) { Nebula& nd = Nebula::instance(); LifeCycleManager * lcm = nd.get_lcm(); @@ -470,7 +473,8 @@ int DispatchManager::cancel( NebulaLog::log("DiM",Log::DEBUG,oss); if (vm->get_state() == VirtualMachine::ACTIVE && - vm->get_lcm_state() == VirtualMachine::RUNNING ) + (vm->get_lcm_state() == VirtualMachine::RUNNING || + vm->get_lcm_state() == VirtualMachine::UNKNOWN)) { Nebula& nd = Nebula::instance(); LifeCycleManager * lcm = nd.get_lcm(); diff --git a/src/lcm/LifeCycleActions.cc b/src/lcm/LifeCycleActions.cc index 68aa441afb..88703058aa 100644 --- a/src/lcm/LifeCycleActions.cc +++ b/src/lcm/LifeCycleActions.cc @@ -321,7 +321,8 @@ void LifeCycleManager::shutdown_action(int vid) } if (vm->get_state() == VirtualMachine::ACTIVE && - vm->get_lcm_state() == VirtualMachine::RUNNING) + (vm->get_lcm_state() == VirtualMachine::RUNNING || + vm->get_lcm_state() == VirtualMachine::UNKNOWN)) { Nebula& nd = Nebula::instance(); VirtualMachineManager * vmm = nd.get_vmm(); @@ -371,7 +372,8 @@ void LifeCycleManager::undeploy_action(int vid, bool hard) } if (vm->get_state() == VirtualMachine::ACTIVE && - vm->get_lcm_state() == VirtualMachine::RUNNING) + (vm->get_lcm_state() == VirtualMachine::RUNNING || + vm->get_lcm_state() == VirtualMachine::UNKNOWN)) { Nebula& nd = Nebula::instance(); VirtualMachineManager * vmm = nd.get_vmm(); @@ -447,7 +449,8 @@ void LifeCycleManager::poweroff_action(int vid, bool hard) } if (vm->get_state() == VirtualMachine::ACTIVE && - vm->get_lcm_state() == VirtualMachine::RUNNING) + (vm->get_lcm_state() == VirtualMachine::RUNNING || + vm->get_lcm_state() == VirtualMachine::UNKNOWN)) { Nebula& nd = Nebula::instance(); VirtualMachineManager * vmm = nd.get_vmm(); @@ -562,7 +565,8 @@ void LifeCycleManager::cancel_action(int vid) } if (vm->get_state() == VirtualMachine::ACTIVE && - vm->get_lcm_state() == VirtualMachine::RUNNING) + (vm->get_lcm_state() == VirtualMachine::RUNNING || + vm->get_lcm_state() == VirtualMachine::UNKNOWN)) { Nebula& nd = Nebula::instance(); VirtualMachineManager * vmm = nd.get_vmm(); diff --git a/src/vmm_mad/remotes/vmware/vmware_driver.rb b/src/vmm_mad/remotes/vmware/vmware_driver.rb index c0660598d3..c8536d7315 100644 --- a/src/vmm_mad/remotes/vmware/vmware_driver.rb +++ b/src/vmm_mad/remotes/vmware/vmware_driver.rb @@ -109,12 +109,16 @@ class VMwareDriver # Cancels & undefine the VM # # ------------------------------------------------------------------------ # def cancel(deploy_id) - # Destroy the VM - rc, info = do_action("virsh -c #{@uri} destroy #{deploy_id}") + rc, info = do_action("virsh -c #{@uri} --readonly dominfo #{deploy_id}") - exit info if rc == false + if rc + # Destroy the VM + rc, info = do_action("virsh -c #{@uri} destroy #{deploy_id}") - OpenNebula.log_debug("Successfully canceled domain #{deploy_id}.") + exit info if rc == false + + OpenNebula.log_debug("Successfully canceled domain #{deploy_id}.") + end # Undefine the VM undefine_domain(deploy_id) diff --git a/src/vmm_mad/remotes/xen/cancel b/src/vmm_mad/remotes/xen/cancel index 62acd6341e..9779678352 100755 --- a/src/vmm_mad/remotes/xen/cancel +++ b/src/vmm_mad/remotes/xen/cancel @@ -25,6 +25,12 @@ function gdm { $XM_LIST | grep "$deploy_id " } +OUT=$(gdm) + +if [ -z "$OUT" ]; then + exit 0 +fi + exec_and_log "$XM_CANCEL $deploy_id" \ "Could not destroy $deploy_id"