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

F #4913: Datastore import, only one datastore is shown to users but two datastores may be created in the background

This commit is contained in:
mcabrerizo 2017-04-13 08:52:28 +02:00
parent 1ce3451a9b
commit 42e8418556
4 changed files with 52 additions and 35 deletions

View File

@ -17,8 +17,8 @@ enabled_tabs:
- datastores-tab
- images-tab
#- files-tab
#- marketplaces-tab
#- marketplaceapps-tab
- marketplaces-tab
- marketplaceapps-tab
- network-top-tab
- vnets-tab
- vnets-topology-tab

View File

@ -126,6 +126,12 @@ class DatacenterFolder
datastore_folder.items.values.each do |ds|
name, capacity, freeSpace = ds.item.collect("name","summary.capacity","summary.freeSpace")
ds_name = "[#{vcenter_instance_name} - #{dc_name}] #{name}"
ds_total_mb = ((capacity.to_i / 1024) / 1024)
ds_free_mb = ((freeSpace.to_i / 1024) / 1024)
if ds.instance_of? VCenterDriver::Datastore
hosts_in_ds = ds['host']
clusters_in_ds = {}
@ -138,19 +144,29 @@ class DatacenterFolder
end
clusters_in_ds.each do |ccr_ref, ccr_name|
ds_hash = {}
ds_hash[:name] = "#{ds_name} - #{ccr_name.tr(" ", "_")}"
ds_hash[:total_mb] = ds_total_mb
ds_hash[:free_mb] = ds_free_mb
ds_hash[:cluster] = ccr_name
ds_hash[:ds] = []
already_image_ds = VCenterDriver::Storage.exists_one_by_ref_ccr_and_type?(ds["_ref"], ccr_ref, vcenter_uuid, "IMAGE_DS", dpool)
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?
object = ds.to_one_template(one_clusters[dc_name], ds_hash[:name], ccr_ref, "IMAGE_DS", vcenter_uuid)
ds_hash[:ds] << 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", dpool)
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)
ds_objects[dc_name] << object if !object.nil?
object = ds.to_one_template(one_clusters[dc_name], ds_hash[:name], ccr_ref, "SYSTEM_DS", vcenter_uuid)
ds_hash[:ds] << object if !object.nil?
end
ds_objects[dc_name] << ds_hash if !ds_hash[:ds].empty?
end
end
@ -169,12 +185,22 @@ class DatacenterFolder
end
clusters_in_spod.each do |ccr_ref, ccr_name|
ds_hash = {}
ds_hash[:name] = "#{ds_name} - #{ccr_name.tr(" ", "_")} [StorPod]"
ds_hash[:total_mb] = ds_total_mb
ds_hash[:free_mb] = ds_free_mb
ds_hash[:cluster] = ccr_name
ds_hash[:ds] = []
ds_hash[:ds] = []
already_system_ds = VCenterDriver::Storage.exists_one_by_ref_ccr_and_type?(ds["_ref"], ccr_ref, vcenter_uuid, "SYSTEM_DS", dpool)
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)
ds_objects[dc_name] << object if !object.nil?
object = ds.to_one_template(one_clusters[dc_name], ds_hash[:name], ccr_ref, "SYSTEM_DS", vcenter_uuid)
ds_hash[:ds] << object if !object.nil?
end
ds_objects[dc_name] << ds_hash if !ds_hash[:ds].empty?
end
end
end

View File

@ -154,28 +154,22 @@ class Storage
return one
end
def to_one_template(one_clusters, ccr_ref, ccr_name, type, vcenter_uuid, vcenter_instance_name, dc_name)
def to_one_template(one_clusters, name, ccr_ref, type, vcenter_uuid)
one_cluster = one_clusters.select { |ccr| ccr[:ref] == ccr_ref }.first rescue nil
return nil if one_cluster.nil?
name, capacity, freeSpace = @item.collect("name","summary.capacity","summary.freeSpace")
ds_name = ""
if type == "IMAGE_DS"
ds_name << "[#{vcenter_instance_name} - #{dc_name}] #{name} - #{ccr_name.tr(" ", "_")} (IMG)"
ds_name << "#{name} (IMG)"
else
ds_name << "[#{vcenter_instance_name} - #{dc_name}] #{name} - #{ccr_name.tr(" ", "_")} (SYS)"
ds_name << "#{name} (SYS)"
ds_name << " [StorDRS]" if self.class == VCenterDriver::StoragePod
end
one_tmp = {
:name => ds_name,
:total_mb => ((capacity.to_i / 1024) / 1024),
:free_mb => ((freeSpace.to_i / 1024) / 1024),
:cluster => ccr_name,
:one => to_one(ds_name, vcenter_uuid, ccr_ref, one_cluster[:host_id])
}

View File

@ -666,7 +666,6 @@ 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"\
@ -676,25 +675,23 @@ def self.import_datastore(con_ops, options)
" Import this as Datastore [y/n]? "
next if STDIN.gets.strip.downcase != 'y'
STDOUT.print "\n NOTE: For each vcenter datastore a SYSTEM and IMAGE datastore\n"\
" will be created in OpenNebula except for a StorageDRS which is \n"\
" represented as a SYSTEM datastore only.\n"
end
one_d = VCenterDriver::VIHelper.new_one_item(OpenNebula::Datastore)
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 " \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 " \nOpenNebula datastore #{one_d.id} created!\n"
ds_allocate_error = false
d[:ds].each do |ds|
one_d = VCenterDriver::VIHelper.new_one_item(OpenNebula::Datastore)
rc = one_d.allocate(ds[:one])
if ::OpenNebula.is_error?(rc)
STDOUT.puts " \n Error creating datastore: #{rc.message}"
ds_allocate_error = true
else
STDOUT.puts " \n OpenNebula datastore #{one_d.id} created!\n"
end
end
}
}