From f22ca784b3a08c669d39dd658f468c0199119b54 Mon Sep 17 00:00:00 2001 From: Tino Vazquez Date: Thu, 20 Aug 2015 23:05:04 +0200 Subject: [PATCH] Bug #3876: Trigger cancel on other states than active if host is hybrid --- src/dm/DispatchManagerActions.cc | 29 +++++++++++++++++-- src/vmm_mad/remotes/vcenter/vcenter_driver.rb | 13 +++++++-- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/src/dm/DispatchManagerActions.cc b/src/dm/DispatchManagerActions.cc index 26b36619bf..9e65a30835 100644 --- a/src/dm/DispatchManagerActions.cc +++ b/src/dm/DispatchManagerActions.cc @@ -768,11 +768,18 @@ int DispatchManager::finalize( string& error_str) { VirtualMachine * vm; + Host * host; ostringstream oss; VirtualMachine::VmState state; + bool is_public_host; - vm = vmpool->get(vid,true); + vm = vmpool->get(vid,true); + + host = hpool->get(vm->get_hid(),true); + is_public_host = host->is_public_cloud(); + host->unlock(); + if ( vm == 0 ) { @@ -793,13 +800,29 @@ int DispatchManager::finalize( vm->get_requirements(cpu,mem,disk); hpool->del_capacity(vm->get_hid(), vm->get_oid(), cpu, mem, disk); - tm->trigger(TransferManager::EPILOG_DELETE,vid); + if (is_public_host) + { + vmm->trigger(VirtualMachineManager::CLEANUP,vid); + } + else + { + tm->trigger(TransferManager::EPILOG_DELETE,vid); + } + finalize_cleanup(vm); break; case VirtualMachine::STOPPED: case VirtualMachine::UNDEPLOYED: - tm->trigger(TransferManager::EPILOG_DELETE_STOP,vid); + if (is_public_host) + { + vmm->trigger(VirtualMachineManager::CLEANUP,vid); + } + else + { + tm->trigger(TransferManager::EPILOG_DELETE,vid); + } + finalize_cleanup(vm); break; diff --git a/src/vmm_mad/remotes/vcenter/vcenter_driver.rb b/src/vmm_mad/remotes/vcenter/vcenter_driver.rb index 0c8547ec39..2b41cd0ca5 100644 --- a/src/vmm_mad/remotes/vcenter/vcenter_driver.rb +++ b/src/vmm_mad/remotes/vcenter/vcenter_driver.rb @@ -232,14 +232,23 @@ class VIClient # @return [Hash] in the form # {dc_name [String] => ClusterComputeResources Names [Array - String]} ######################################################################## - def hierarchy + def hierarchy(one_client=nil) vc_hosts = {} datacenters = get_entities(@root, 'Datacenter') + hpool = OpenNebula::HostPool.new((one_client||@one)) + rc = hpool.info + datacenters.each { |dc| ccrs = get_entities(dc.hostFolder, 'ClusterComputeResource') - vc_hosts[dc.name] = ccrs.collect { |c| c.name } + vc_hosts[dc.name] = [] + ccrs.each { |c| + puts c.name + if !hpool["HOST[NAME=\"c.name\"]"] + vc_hosts[dc.name] << c.name + end + } } return vc_hosts