diff --git a/src/sunstone/routes/vcenter.rb b/src/sunstone/routes/vcenter.rb index ec1b71ea4c..7fc9006a12 100644 --- a/src/sunstone/routes/vcenter.rb +++ b/src/sunstone/routes/vcenter.rb @@ -78,7 +78,17 @@ end get '/vcenter' do begin dc_folder = VCenterDriver::DatacenterFolder.new(vcenter_client) - rs = dc_folder.get_unimported_hosts + + hpool = VCenterDriver::VIHelper.one_pool(OpenNebula::HostPool, false) + + if hpool.respond_to?(:message) + msg = "Could not get OpenNebula HostPool: #{hpool.message}" + logger.error("[vCenter] " + msg) + error = Error.new(msg) + error 404, error.to_json + end + + rs = dc_folder.get_unimported_hosts(hpool) [200, rs.to_json] rescue Exception => e logger.error("[vCenter] " + e.message) @@ -90,7 +100,17 @@ end get '/vcenter/templates' do begin dc_folder = VCenterDriver::DatacenterFolder.new(vcenter_client) - templates = dc_folder.get_unimported_templates(vcenter_client) + + tpool = VCenterDriver::VIHelper.one_pool(OpenNebula::TemplatePool, false) + + if tpool.respond_to?(:message) + msg = "Could not get OpenNebula TemplatePool: #{tpool.message}" + logger.error("[vCenter] " + msg) + error = Error.new(msg) + error 404, error.to_json + end + + templates = dc_folder.get_unimported_templates(vcenter_client, tpool) if templates.nil? msg = "No datacenter found" @@ -154,7 +174,17 @@ end get '/vcenter/networks' do begin dc_folder = VCenterDriver::DatacenterFolder.new(vcenter_client) - networks = dc_folder.get_unimported_networks + + npool = VCenterDriver::VIHelper.one_pool(OpenNebula::VirtualNetworkPool, false) + + 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 + + networks = dc_folder.get_unimported_networks(npool) if networks.nil? msg = "No datacenter found" @@ -200,7 +230,17 @@ end get '/vcenter/datastores' do begin dc_folder = VCenterDriver::DatacenterFolder.new(vcenter_client) - datastores = dc_folder.get_unimported_datastores + + hpool = VCenterDriver::VIHelper.one_pool(OpenNebula::DatastorePool, false) + + if hpool.respond_to?(:message) + msg = "Could not get OpenNebula DatastorePool: #{hpool.message}" + logger.error("[vCenter] " + msg) + error = Error.new(msg) + error 404, error.to_json + end + + datastores = dc_folder.get_unimported_datastores(hpool) if datastores.nil? msg = "No datacenter found" logger.error("[vCenter] " + msg) diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/datacenter.rb b/src/vmm_mad/remotes/lib/vcenter_driver/datacenter.rb index 2c4a98985d..30daeecdd6 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/datacenter.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/datacenter.rb @@ -88,19 +88,13 @@ class DatacenterFolder clusters end - def get_unimported_hosts + def get_unimported_hosts(hpool) host_objects = {} vcenter_uuid = get_vcenter_instance_uuid vcenter_version = get_vcenter_api_version - hpool = VCenterDriver::VIHelper.one_pool(OpenNebula::HostPool, false) - - if hpool.respond_to?(:message) - raise "Could not get OpenNebula HostPool: #{hpool.message}" - end - fetch! if @items.empty? #Get datacenters @items.values.each do |dc| @@ -131,19 +125,13 @@ class DatacenterFolder return host_objects end - def get_unimported_datastores + def get_unimported_datastores(hpool) ds_objects = {} vcenter_uuid = get_vcenter_instance_uuid vcenter_instance_name = get_vcenter_instance_name - pool = VCenterDriver::VIHelper.one_pool(OpenNebula::DatastorePool, false) - - if pool.respond_to?(:message) - raise "Could not get OpenNebula DatastorePool: #{pool.message}" - end - fetch! if @items.empty? #Get datacenters one_clusters = get_clusters @@ -169,14 +157,14 @@ class DatacenterFolder end clusters_in_ds.each do |ccr_ref, ccr_name| - already_image_ds = VCenterDriver::Storage.exists_one_by_ref_ccr_and_type?(ds["_ref"], ccr_ref, vcenter_uuid, "IMAGE_DS", pool) + already_image_ds = VCenterDriver::Storage.exists_one_by_ref_ccr_and_type?(ds["_ref"], ccr_ref, vcenter_uuid, "IMAGE_DS", hpool) if !already_image_ds object = ds.to_one_template(one_clusters[dc_name], ccr_ref, ccr_name, "IMAGE_DS", vcenter_uuid, vcenter_instance_name, dc_name) ds_objects[dc_name] << object if !object.nil? end - already_system_ds = VCenterDriver::Storage.exists_one_by_ref_ccr_and_type?(ds["_ref"], ccr_ref, vcenter_uuid, "SYSTEM_DS", pool) + already_system_ds = VCenterDriver::Storage.exists_one_by_ref_ccr_and_type?(ds["_ref"], ccr_ref, vcenter_uuid, "SYSTEM_DS", hpool) if !already_system_ds object = ds.to_one_template(one_clusters[dc_name], ccr_ref, ccr_name, "SYSTEM_DS", vcenter_uuid, vcenter_instance_name, dc_name) @@ -199,7 +187,7 @@ class DatacenterFolder end clusters_in_spod.each do |ccr_ref, ccr_name| - already_system_ds = VCenterDriver::Storage.exists_one_by_ref_ccr_and_type?(ds["_ref"], ccr_ref, vcenter_uuid, "SYSTEM_DS", pool) + already_system_ds = VCenterDriver::Storage.exists_one_by_ref_ccr_and_type?(ds["_ref"], ccr_ref, vcenter_uuid, "SYSTEM_DS", hpool) if !already_system_ds object = ds.to_one_template(one_clusters[dc_name], ccr_ref, ccr_name, "SYSTEM_DS", vcenter_uuid, vcenter_instance_name, dc_name) @@ -213,14 +201,9 @@ class DatacenterFolder ds_objects end - def get_unimported_templates(vi_client) + def get_unimported_templates(vi_client, tpool) template_objects = {} vcenter_uuid = get_vcenter_instance_uuid - tpool = VCenterDriver::VIHelper.one_pool(OpenNebula::TemplatePool, false) - - if tpool.respond_to?(:message) - raise "Could not get OpenNebula TemplatePool: #{tpool.message}" - end fetch! if @items.empty? #Get datacenters @@ -288,15 +271,10 @@ class DatacenterFolder return template_objects end - def get_unimported_networks + def get_unimported_networks(npool) network_objects = {} vcenter_uuid = get_vcenter_instance_uuid - npool = VCenterDriver::VIHelper.one_pool(OpenNebula::VirtualNetworkPool, false) - - if npool.respond_to?(:message) - raise "Could not get OpenNebula VirtualNetworkPool: #{npool.message}" - end fetch! if @items.empty? #Get datacenters @@ -310,6 +288,8 @@ class DatacenterFolder network_folder.fetch! network_folder.items.values.each do |network| + next if network.instance_of? VCenterDriver::DistributedVirtualSwitch + one_network = VCenterDriver::VIHelper.find_by_ref(OpenNebula::VirtualNetworkPool, "TEMPLATE/VCENTER_NET_REF", network['_ref'], @@ -324,7 +304,6 @@ class DatacenterFolder one_vnet = VCenterDriver::Network.to_one_template(network_name, network_ref, network.network_type, - vlan_id, ccr_ref, ccr_name, vcenter_uuid) diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/importer.rb b/src/vmm_mad/remotes/lib/vcenter_driver/importer.rb index 8b3fcaabac..8b97114a60 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/importer.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/importer.rb @@ -22,7 +22,14 @@ def self.import_clusters(con_ops, options) # Get vcenter API version vc_version = vi_client.vim.serviceContent.about.apiVersion - rs = dc_folder.get_unimported_hosts + # 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 + + rs = dc_folder.get_unimported_hosts(hpool) STDOUT.print "done!\n\n" @@ -77,7 +84,14 @@ def self.import_templates(con_ops, options) dc_folder = VCenterDriver::DatacenterFolder.new(vi_client) - rs = dc_folder.get_unimported_templates(vi_client) + # 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 + + rs = dc_folder.get_unimported_templates(vi_client, tpool) STDOUT.print "done!\n" @@ -272,7 +286,14 @@ def self.import_networks(con_ops, options) dc_folder = VCenterDriver::DatacenterFolder.new(vi_client) - rs = dc_folder.get_unimported_networks + # 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 + + rs = dc_folder.get_unimported_networks(npool) STDOUT.print "done!\n" @@ -293,9 +314,8 @@ def self.import_networks(con_ops, options) if !use_defaults print_str = "\n * Network found:\n"\ - " - Name : #{n[:name]}\n"\ - " - Type : #{n[:type]}\n" - print_str << " - VLAN ID : #{n[:vlan_id]}\n" if !n[:vlan_id].empty? + " - Name : #{n[:name]}\n"\ + " - Type : #{n[:type]}\n" print_str << " - Cluster : #{n[:cluster]}\n" print_str << " Import this Network (y/[n])? " @@ -427,7 +447,13 @@ def self.import_datastore(con_ops, options) dc_folder = VCenterDriver::DatacenterFolder.new(vi_client) - rs = dc_folder.get_unimported_datastores + hpool = VCenterDriver::VIHelper.one_pool(OpenNebula::DatastorePool, false) + + if hpool.respond_to?(:message) + raise "Could not get OpenNebula DatastorePool: #{hpool.message}" + end + + rs = dc_folder.get_unimported_datastores(hpool) STDOUT.print "done!\n"