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] %>'
};