diff --git a/src/sunstone/etc/sunstone-views/admin_vcenter.yaml b/src/sunstone/etc/sunstone-views/admin_vcenter.yaml index e3aca43f45..7e7e2288e3 100644 --- a/src/sunstone/etc/sunstone-views/admin_vcenter.yaml +++ b/src/sunstone/etc/sunstone-views/admin_vcenter.yaml @@ -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 diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/datacenter.rb b/src/vmm_mad/remotes/lib/vcenter_driver/datacenter.rb index 1976ded20d..fb33a2a381 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/datacenter.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/datacenter.rb @@ -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 diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/datastore.rb b/src/vmm_mad/remotes/lib/vcenter_driver/datastore.rb index cc353ff3e9..bd089f319b 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/datastore.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/datastore.rb @@ -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]) } diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/importer.rb b/src/vmm_mad/remotes/lib/vcenter_driver/importer.rb index c62bfb3bf9..87c242ef3f 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/importer.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/importer.rb @@ -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 } }