From 2274a9ca721838690058ea9a2641f150ba686899 Mon Sep 17 00:00:00 2001 From: mcabrerizo Date: Tue, 16 May 2017 09:41:26 +0200 Subject: [PATCH] F #4913: Add error management to some pool creation actions --- src/sunstone/routes/vcenter.rb | 21 ++++++++++++++++ src/tm_mad/vcenter/delete | 3 +++ .../remotes/lib/vcenter_driver/datastore.rb | 15 ++++++++++-- .../remotes/lib/vcenter_driver/importer.rb | 24 ++++++++++++++----- .../remotes/lib/vcenter_driver/network.rb | 10 +++++++- .../lib/vcenter_driver/virtual_machine.rb | 6 +++++ 6 files changed, 70 insertions(+), 9 deletions(-) diff --git a/src/sunstone/routes/vcenter.rb b/src/sunstone/routes/vcenter.rb index 88e95ab7b5..c7924676d3 100644 --- a/src/sunstone/routes/vcenter.rb +++ b/src/sunstone/routes/vcenter.rb @@ -147,9 +147,30 @@ get '/vcenter/template/:vcenter_ref' do template = VCenterDriver::Template.new_from_ref(ref, vcenter_client) vc_uuid = vcenter_client.vim.serviceContent.about.instanceUuid + dpool = VCenterDriver::VIHelper.one_pool(OpenNebula::DatastorePool) + if dpool.respond_to?(:message) + msg = "Could not get OpenNebula DatastorePool: #{dpool.message}" + logger.error("[vCenter] " + msg) + error = Error.new(msg) + error 404, error.to_json + end + ipool = VCenterDriver::VIHelper.one_pool(OpenNebula::ImagePool) + if ipool.respond_to?(:message) + msg = "Could not get OpenNebula ImagePool: #{ipool.message}" + logger.error("[vCenter] " + msg) + error = Error.new(msg) + error 404, error.to_json + end + npool = VCenterDriver::VIHelper.one_pool(OpenNebula::VirtualNetworkPool) + if npool.respond_to?(:message) + msg = "Could not get OpenNebula VirtualNetworkPool: #{npool.message}" + logger.error("[vCenter] " + msg) + error = Error.new(msg) + error 404, error.to_json + end # POST params if @request_body && !@request_body.empty? diff --git a/src/tm_mad/vcenter/delete b/src/tm_mad/vcenter/delete index 40b4128edf..cefda65993 100755 --- a/src/tm_mad/vcenter/delete +++ b/src/tm_mad/vcenter/delete @@ -138,6 +138,9 @@ else vcenter_uuid = vm.get_vcenter_instance_uuid networks = {} npool = VCenterDriver::VIHelper.one_pool(OpenNebula::VirtualNetworkPool, false) + if npool.respond_to?(:message) + raise "Could not get OpenNebula VirtualNetworkPool: #{npool.message}" + end # Check nics in VM vm.item["config.hardware.device"].each do |dv| diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/datastore.rb b/src/vmm_mad/remotes/lib/vcenter_driver/datastore.rb index d4de4ddce4..3a2f32de6d 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/datastore.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/datastore.rb @@ -101,7 +101,13 @@ class Storage end def self.get_one_image_ds_by_ref_and_ccr(ref, ccr_ref, vcenter_uuid, pool = nil) - pool = VCenterDriver::VIHelper.one_pool(OpenNebula::DatastorePool, false) if pool.nil? + if pool.nil? + pool = VCenterDriver::VIHelper.one_pool(OpenNebula::DatastorePool, false) + if pool.respond_to?(:message) + raise "Could not get OpenNebula DatastorePool: #{pool.message}" + end + end + element = pool.select do |e| e["TEMPLATE/TYPE"] == "IMAGE_DS" && e["TEMPLATE/VCENTER_DS_REF"] == ref && @@ -131,7 +137,12 @@ class Storage end def self.exists_one_by_ref_ccr_and_type?(ref, ccr_ref, vcenter_uuid, type, pool = nil) - pool = VCenterDriver::VIHelper.one_pool(OpenNebula::DatastorePool, false) if pool.nil? + if pool.nil? + pool = VCenterDriver::VIHelper.one_pool(OpenNebula::DatastorePool, false) + if pool.respond_to?(:message) + raise "Could not get OpenNebula DatastorePool: #{pool.message}" + end + end elements = pool.select do |e| e["TEMPLATE/TYPE"] == type && e["TEMPLATE/VCENTER_DS_REF"] == ref && diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/importer.rb b/src/vmm_mad/remotes/lib/vcenter_driver/importer.rb index eee4705279..fcd4678c9c 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/importer.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/importer.rb @@ -10,8 +10,17 @@ def self.import_wild(host_id, vm_ref, one_vm, template) vc_name = vi_client.vim.host dpool = VCenterDriver::VIHelper.one_pool(OpenNebula::DatastorePool) + if dpool.respond_to?(:message) + raise "Could not get OpenNebula DatastorePool: #{dpool.message}" + end ipool = VCenterDriver::VIHelper.one_pool(OpenNebula::ImagePool) + if ipool.respond_to?(:message) + raise "Could not get OpenNebula ImagePool: #{ipool.message}" + end npool = VCenterDriver::VIHelper.one_pool(OpenNebula::VirtualNetworkPool) + if npool.respond_to?(:message) + raise "Could not get OpenNebula VirtualNetworkPool: #{npool.message}" + end vcenter_vm = VCenterDriver::VirtualMachine.new_from_ref(vm_ref, vi_client) @@ -85,7 +94,6 @@ def self.import_clusters(con_ops, options) # OpenNebula's ClusterPool cpool = VCenterDriver::VIHelper.one_pool(OpenNebula::ClusterPool, false) - if cpool.respond_to?(:message) raise "Could not get OpenNebula ClusterPool: #{cpool.message}" end @@ -97,7 +105,6 @@ def self.import_clusters(con_ops, options) # Get OpenNebula's host pool hpool = VCenterDriver::VIHelper.one_pool(OpenNebula::HostPool, false) - if hpool.respond_to?(:message) raise "Could not get OpenNebula HostPool: #{hpool.message}" end @@ -178,7 +185,6 @@ def self.import_templates(con_ops, options) # Get OpenNebula's templates pool tpool = VCenterDriver::VIHelper.one_pool(OpenNebula::TemplatePool, false) - if tpool.respond_to?(:message) raise "Could not get OpenNebula TemplatePool: #{tpool.message}" end @@ -189,8 +195,17 @@ def self.import_templates(con_ops, options) # Create OpenNebula pools dpool = VCenterDriver::VIHelper.one_pool(OpenNebula::DatastorePool) + if dpool.respond_to?(:message) + raise "Could not get OpenNebula DatastorePool: #{dpool.message}" + end ipool = VCenterDriver::VIHelper.one_pool(OpenNebula::ImagePool) + if ipool.respond_to?(:message) + raise "Could not get OpenNebula ImagePool: #{ipool.message}" + end npool = VCenterDriver::VIHelper.one_pool(OpenNebula::VirtualNetworkPool) + if npool.respond_to?(:message) + raise "Could not get OpenNebula VirtualNetworkPool: #{npool.message}" + end # Get vcenter intance uuid as moref is unique for each vcenter vc_uuid = vi_client.vim.serviceContent.about.instanceUuid @@ -473,7 +488,6 @@ def self.import_networks(con_ops, options) # OpenNebula's VirtualNetworkPool npool = VCenterDriver::VIHelper.one_pool(OpenNebula::VirtualNetworkPool, false) - if npool.respond_to?(:message) raise "Could not get OpenNebula VirtualNetworkPool: #{npool.message}" end @@ -659,14 +673,12 @@ def self.import_datastore(con_ops, options) dc_folder = VCenterDriver::DatacenterFolder.new(vi_client) dpool = VCenterDriver::VIHelper.one_pool(OpenNebula::DatastorePool, false) - if dpool.respond_to?(:message) raise "Could not get OpenNebula DatastorePool: #{dpool.message}" end # Get OpenNebula's host pool hpool = VCenterDriver::VIHelper.one_pool(OpenNebula::HostPool, false) - if hpool.respond_to?(:message) raise "Could not get OpenNebula HostPool: #{hpool.message}" end diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/network.rb b/src/vmm_mad/remotes/lib/vcenter_driver/network.rb index b84d62fe69..cbc1af160b 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/network.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/network.rb @@ -116,7 +116,12 @@ class Network end def self.get_unmanaged_vnet_by_ref(ref, ccr_ref, template_ref, vcenter_uuid, pool = nil) - pool = VCenterDriver::VIHelper.one_pool(OpenNebula::VirtualNetworkPool, false) if pool.nil? + if pool.nil? + pool = VCenterDriver::VIHelper.one_pool(OpenNebula::VirtualNetworkPool, false) + if pool.respond_to?(:message) + raise "Could not get OpenNebula VirtualNetworkPool: #{pool.message}" + end + end element = pool.select do |e| e["TEMPLATE/VCENTER_NET_REF"] == ref && e["TEMPLATE/VCENTER_CCR_REF"] == ccr_ref && @@ -142,6 +147,9 @@ class Network networks = {} npool = VCenterDriver::VIHelper.one_pool(OpenNebula::VirtualNetworkPool, false) + if npool.respond_to?(:message) + raise "Could not get OpenNebula VirtualNetworkPool: #{npool.message}" + end device_change_nics.each do |nic| if nic[:operation] == :remove diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb b/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb index a578b11e6d..90a6ce0b03 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb @@ -1985,6 +1985,9 @@ class VirtualMachine < Template detach_disk_array = [] extra_config = [] ipool = VCenterDriver::VIHelper.one_pool(OpenNebula::ImagePool) + if ipool.respond_to?(:message) + raise "Could not get OpenNebula ImagePool: #{ipool.message}" + end vc_disks.each do |d| if !onevm_disks_vector.index(d[:path_wo_ds]) @@ -2107,6 +2110,9 @@ class VirtualMachine < Template spec_hash = {} spec_hash[:deviceChange] = [] ipool = VCenterDriver::VIHelper.one_pool(OpenNebula::ImagePool) + if ipool.respond_to?(:message) + raise "Could not get OpenNebula ImagePool: #{ipool.message}" + end vm.config.hardware.device.each do |disk| if is_disk_or_cdrom?(disk)