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

F #4913: Host, datastore and network imports can now select a different OpenNebula cluster to be added

This commit is contained in:
mcabrerizo 2017-04-05 11:35:46 +02:00
parent dcffd52a95
commit 704c01ab29
2 changed files with 111 additions and 11 deletions

View File

@ -318,7 +318,7 @@ class ClusterComputeResource
Datacenter.new(item)
end
def self.to_one(cluster, con_ops, rp)
def self.to_one(cluster, con_ops, rp, one_cluster_id)
one_host = VCenterDriver::VIHelper.new_one_item(OpenNebula::Host)
@ -326,8 +326,9 @@ class ClusterComputeResource
raise "Could not create host: #{one_host.message}"
end
rc = one_host.allocate(cluster[:cluster_name], 'vcenter', 'vcenter',
::OpenNebula::ClusterPool::NONE_CLUSTER_ID)
one_cluster_id = -1 if !one_cluster_id
rc = one_host.allocate(cluster[:cluster_name], 'vcenter', 'vcenter', one_cluster_id.to_i)
if OpenNebula.is_error?(rc)
raise "Could not allocate host: #{rc.message}"

View File

@ -22,6 +22,20 @@ def self.import_clusters(con_ops, options)
# Get vcenter API version
vc_version = vi_client.vim.serviceContent.about.apiVersion
# 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
cpool.info
cluster_list = {}
cpool.each do |c|
cluster_list[c["ID"]] = c["NAME"]
end
# Get OpenNebula's host pool
hpool = VCenterDriver::VIHelper.one_pool(OpenNebula::HostPool, false)
@ -46,11 +60,27 @@ def self.import_clusters(con_ops, options)
end
clusters.each{ |cluster|
one_cluster_id = nil
rpool = nil
if !use_defaults
STDOUT.print "\n * Import cluster #{cluster[:cluster_name]} (y/[n])? "
next if STDIN.gets.strip.downcase != 'y'
if cluster_list.size > 1
STDOUT.print "\n In which OpenNebula cluster do you want the vCenter cluster to be included?\n "
cluster_list_str = "\n"
cluster_list.each do |key, value|
cluster_list_str << " - ID: " << key << " - NAME: " << value << "\n"
end
STDOUT.print "\n #{cluster_list_str}"
STDOUT.print "\n Specify the ID of the cluster or Enter to use the default cluster: "
answer = STDIN.gets.strip
one_cluster_id = answer if !answer.empty?
end
rpools = cluster[:rp_list]
if !rpools.empty?
@ -78,7 +108,8 @@ def self.import_clusters(con_ops, options)
one_host = VCenterDriver::ClusterComputeResource.to_one(cluster,
con_ops,
rpool)
rpool,
one_cluster_id)
STDOUT.puts "\n OpenNebula host #{cluster[:cluster_name]} with"\
" id #{one_host.id} successfully created."
@ -312,6 +343,20 @@ def self.import_networks(con_ops, options)
dc_folder = VCenterDriver::DatacenterFolder.new(vi_client)
# 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
cpool.info
cluster_list = {}
cpool.each do |c|
cluster_list[c["ID"]] = c["NAME"]
end
# OpenNebula's VirtualNetworkPool
npool = VCenterDriver::VIHelper.one_pool(OpenNebula::VirtualNetworkPool, false)
@ -337,7 +382,7 @@ def self.import_networks(con_ops, options)
end
tmps.each do |n|
one_cluster_id = nil
if !use_defaults
print_str = "\n * Network found:\n"\
" - Name : #{n[:name]}\n"\
@ -348,6 +393,22 @@ def self.import_networks(con_ops, options)
STDOUT.print print_str
next if STDIN.gets.strip.downcase != 'y'
if cluster_list.size > 1
STDOUT.print "\n In which OpenNebula cluster do you want the network to be included?\n "
cluster_list_str = "\n"
cluster_list.each do |key, value|
cluster_list_str << " - ID: " << key << " - NAME: " << value << "\n"
end
STDOUT.print "\n #{cluster_list_str}"
STDOUT.print "\n Specify the ID of the cluster or Enter to use the default cluster: "
answer = STDIN.gets.strip
one_cluster_id = answer if !answer.empty?
end
end
size="255"
@ -438,13 +499,17 @@ def self.import_networks(con_ops, options)
one_vn = VCenterDriver::VIHelper.new_one_item(OpenNebula::VirtualNetwork)
rc = one_vn.allocate(n[:one])
if one_cluster_id
rc = one_vn.allocate(n[:one],one_cluster_id.to_i)
else
rc = one_vn.allocate(n[:one])
end
if ::OpenNebula.is_error?(rc)
STDOUT.puts " Error creating virtual network: " +
STDOUT.puts "\n Error creating virtual network: " +
" #{rc.message}\n"
else
STDOUT.puts " OpenNebula virtual network " +
STDOUT.puts "\n OpenNebula virtual network " +
"#{one_vn.id} created with size #{size}!\n"
end
end
@ -473,6 +538,20 @@ def self.import_datastore(con_ops, options)
dc_folder = VCenterDriver::DatacenterFolder.new(vi_client)
# 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
cpool.info
cluster_list = {}
cpool.each do |c|
cluster_list[c["ID"]] = c["NAME"]
end
hpool = VCenterDriver::VIHelper.one_pool(OpenNebula::DatastorePool, false)
if hpool.respond_to?(:message)
@ -496,6 +575,7 @@ def self.import_datastore(con_ops, options)
end
tmps.each{ |d|
one_cluster_id = nil
if !use_defaults
STDOUT.print "\n * Datastore found:\n"\
" - Name : #{d[:name]}\n"\
@ -505,21 +585,40 @@ def self.import_datastore(con_ops, options)
" Import this as Datastore [y/n]? "
next if STDIN.gets.strip.downcase != 'y'
if cluster_list.size > 1
STDOUT.print "\n In which OpenNebula cluster do you want the datastore to be included?\n "
cluster_list_str = "\n"
cluster_list.each do |key, value|
cluster_list_str << " - ID: " << key << " - NAME: " << value << "\n"
end
STDOUT.print "\n #{cluster_list_str}"
STDOUT.print "\n Specify the ID of the cluster or Enter to use the default cluster: "
answer = STDIN.gets.strip
one_cluster_id = answer if !answer.empty?
end
end
one_d = VCenterDriver::VIHelper.new_one_item(OpenNebula::Datastore)
rc = one_d.allocate(d[:one])
if one_cluster_id
rc = one_d.allocate(d[:one], one_cluster_id.to_i)
else
rc = one_d.allocate(d[:one])
end
if ::OpenNebula.is_error?(rc)
STDOUT.puts " Error creating datastore: #{rc.message}\n"\
STDOUT.puts " \nError creating datastore: #{rc.message}\n"\
" One datastore can exist only once, and "\
"can be used in any vCenter Cluster that "\
"has access to it. Also, no spaces allowed "\
"in datastore name (rename it in vCenter "\
"and try again)"
else
STDOUT.puts " OpenNebula datastore #{one_d.id} created!\n"
STDOUT.puts " \nOpenNebula datastore #{one_d.id} created!\n"
end
}
}