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:
parent
1ce3451a9b
commit
42e8418556
@ -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
|
||||
|
@ -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
|
||||
|
@ -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])
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user