diff --git a/src/sunstone/models/SunstoneServer.rb b/src/sunstone/models/SunstoneServer.rb index a5511db45d..54c01110f6 100644 --- a/src/sunstone/models/SunstoneServer.rb +++ b/src/sunstone/models/SunstoneServer.rb @@ -75,6 +75,42 @@ class SunstoneServer < CloudServer end end + ############################################################################ + # + ############################################################################ + def get_pool_in_zone(kind,gid,client) + if gid == "0" + user_flag = Pool::INFO_ALL + else + user_flag = POOL_FILTER + end + + pool = case kind + when "group" then GroupPoolJSON.new(client) + when "cluster" then ClusterPoolJSON.new(client) + when "host" then HostPoolJSON.new(client) + when "image" then ImagePoolJSON.new(client, user_flag) + when "vmtemplate" then TemplatePoolJSON.new(client, user_flag) + when "vm" then VirtualMachinePoolJSON.new(client, user_flag) + when "vnet" then VirtualNetworkPoolJSON.new(client, user_flag) + when "user" then UserPoolJSON.new(client) + when "acl" then AclPoolJSON.new(client) + when "datastore" then DatastorePoolJSON.new(client) + when "zone" then ZonePoolJSON.new(client) + else + error = Error.new("Error: #{kind} resource not supported") + return [404, error.to_json] + end + + rc = pool.get_hash + + if OpenNebula.is_error?(rc) + return [500, rc.to_json] + else + return [200, rc.to_json] + end + end + ############################################################################ # ############################################################################ diff --git a/src/sunstone/public/js/opennebula.js b/src/sunstone/public/js/opennebula.js index 0eba45f476..96a8432d76 100644 --- a/src/sunstone/public/js/opennebula.js +++ b/src/sunstone/public/js/opennebula.js @@ -367,6 +367,31 @@ var OpenNebula = { }); }, + "list_in_zone": function(params, resource, path){ + var callback = params.success; + var callback_error = params.error; + var timeout = params.timeout || false; + var request = OpenNebula.Helper.request(resource,"list"); + var req_path = path ? path : resource.toLowerCase(); + + $.ajax({ + url: req_path, + type: "GET", + data: {timeout: timeout, zone_id: params.data.zone_id}, + dataType: "json", + success: function(response){ + var list = OpenNebula.Helper.pool(resource,response) + return callback ? + callback(request, list) : null; + }, + error: function(response) + { + return callback_error ? + callback_error(request, OpenNebula.Error(response)) : null; + } + }); + }, + //Subresource examples: "fetch_template", "log"... "show": function(params, resource, subresource, path){ var callback = params.success; @@ -1175,6 +1200,9 @@ var OpenNebula = { "list" : function(params){ OpenNebula.Action.list(params,OpenNebula.Cluster.resource); }, + "list_in_zone" : function(params){ + OpenNebula.Action.list_in_zone(params,OpenNebula.Cluster.resource); + }, "show" : function(params){ OpenNebula.Action.show(params,OpenNebula.Cluster.resource); }, diff --git a/src/sunstone/public/js/plugins/groups-tab.js b/src/sunstone/public/js/plugins/groups-tab.js index 7eedb41ae5..4c0ee6221d 100644 --- a/src/sunstone/public/js/plugins/groups-tab.js +++ b/src/sunstone/public/js/plugins/groups-tab.js @@ -206,7 +206,7 @@ var create_group_tmpl =
\
\ \ - \ + \ \
\ \ @@ -919,10 +919,6 @@ function setup_add_rp_dialog(group_id){ $.each(obj_list,function(){ add_resource_tab(this.ZONE.ID, this.ZONE.NAME, dialog, "add_rp"); }); - - if (obj_list.length == 0){ - add_resource_tab(0, "Local Zone", dialog, "add_rp"); - } }, error: onError }); @@ -959,7 +955,7 @@ function setup_group_resource_tab_content(zone_id, zone_section, str_zone_tab_id }); // Retrieve the clusters to fill the datatable - update_datatable_group_clusters(dataTable_group_clusters); + update_datatable_group_clusters(dataTable_group_clusters, zone_id); $('#'+str_zone_tab_id+'_search', zone_section).keyup(function(){ dataTable_group_clusters.fnFilter( $(this).val() ); @@ -1027,7 +1023,7 @@ function setup_group_resource_tab_content(zone_id, zone_section, str_zone_tab_id setupTips(zone_section); } -function generate_group_resource_tab_content(str_zone_tab_id, str_datatable_id){ +function generate_group_resource_tab_content(str_zone_tab_id, str_datatable_id, zone_id){ var html = '
\
\ @@ -1079,20 +1075,17 @@ function generate_group_resource_tab_content(str_zone_tab_id, str_datatable_id){ $("#refresh_group_clusters_table_button_class"+str_zone_tab_id).die(); $("#refresh_group_clusters_table_button_class"+str_zone_tab_id).live('click', function(){ - update_datatable_group_clusters($('table[id='+str_datatable_id+']').dataTable()); + update_datatable_group_clusters($('table[id='+str_datatable_id+']').dataTable(), zone_id); }); return html; } // TODO: Refactor? same function in templates-tab.js -function update_datatable_group_clusters(datatable, fnDrawCallback) { - if (fnDrawCallback) { - datatable.unbind('draw'); - datatable.on('draw', fnDrawCallback); - } +function update_datatable_group_clusters(datatable, zone_id) { - OpenNebula.Cluster.list({ + OpenNebula.Cluster.list_in_zone({ + data:{zone_id:zone_id}, timeout: true, success: function (request, obj_list){ var obj_list_array = []; @@ -1103,8 +1096,7 @@ function update_datatable_group_clusters(datatable, fnDrawCallback) { }); updateView(obj_list_array, datatable); - }, - error: onError + } }); }; @@ -1127,7 +1119,7 @@ var add_resource_tab = function(zone_id, zone_name, dialog, id_suffix) { // Append the new div containing the tab and add the tab to the list var html_tab_content = '
  • '+ - generate_group_resource_tab_content(str_zone_tab_id, str_datatable_id) + + generate_group_resource_tab_content(str_zone_tab_id, str_datatable_id, zone_id) + '
  • ' $(html_tab_content).appendTo($("ul#group_zones_tabs_content", dialog)); diff --git a/src/sunstone/sunstone-server.rb b/src/sunstone/sunstone-server.rb index 30247b8dd7..8f4ab4b7d8 100755 --- a/src/sunstone/sunstone-server.rb +++ b/src/sunstone/sunstone-server.rb @@ -405,9 +405,23 @@ end # GET Pool information ############################################################################## get '/:pool' do + +if params[:zone_id] + zone = OpenNebula::Zone.new_with_id(params[:zone_id].to_i, + $cloud_auth.client(session[:user])) + rc = zone.info + return [500, rc.message] if OpenNebula.is_error?(rc) + zone_client = $cloud_auth.client(session[:user], + zone['TEMPLATE/ENDPOINT']) + @SunstoneServer.get_pool_in_zone(params[:pool], + session[:user_gid], + zone_client) +else @SunstoneServer.get_pool(params[:pool], session[:user_gid]) end +end + ############################################################################## # GET Resource information ############################################################################## diff --git a/src/sunstone/views/index.erb b/src/sunstone/views/index.erb index 6ce658f032..56d0f770b1 100644 --- a/src/sunstone/views/index.erb +++ b/src/sunstone/views/index.erb @@ -58,7 +58,7 @@ 'view' : view, 'available_views' : available_views, 'display_name' : '<%= session[:display_name] %>', - 'zone_name' : '<%= session[:zone_name] ? session[:zone_name] : "Local Zone" %>' + 'zone_name' : '<%= session[:zone_name] %>' };