1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-25 02:50:08 +03:00

F #4913: Fix importer only one pool per call. Remove remnants of vlan_id in network importer

This commit is contained in:
mcabrerizo 2017-04-03 18:01:35 +02:00
parent 82d72d93d8
commit 93f85d82a5
3 changed files with 86 additions and 41 deletions

View File

@ -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)

View File

@ -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)

View File

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