mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-16 22:50:10 +03:00
Merge remote-tracking branch 'hector/sunstone-3.4'
This commit is contained in:
commit
4310327cd4
@ -161,7 +161,7 @@ var OCCI = {
|
||||
});
|
||||
},
|
||||
|
||||
"delete": function(params,resource){
|
||||
"del": function(params,resource){
|
||||
var callback = params.success;
|
||||
var callback_error = params.error;
|
||||
var id = params.data.id;
|
||||
@ -373,8 +373,8 @@ var OCCI = {
|
||||
"create": function(params){
|
||||
OCCI.Action.create(params,OCCI.Network.resource);
|
||||
},
|
||||
"delete": function(params){
|
||||
OCCI.Action.delete(params,OCCI.Network.resource);
|
||||
"del": function(params){
|
||||
OCCI.Action.del(params,OCCI.Network.resource);
|
||||
},
|
||||
"list": function(params){
|
||||
OCCI.Action.list(params,OCCI.Network.resource);
|
||||
@ -398,8 +398,8 @@ var OCCI = {
|
||||
"create": function(params){
|
||||
OCCI.Action.create(params,OCCI.VM.resource);
|
||||
},
|
||||
"delete": function(params){
|
||||
OCCI.Action.delete(params,OCCI.VM.resource);
|
||||
"del": function(params){
|
||||
OCCI.Action.del(params,OCCI.VM.resource);
|
||||
},
|
||||
"list": function(params){
|
||||
OCCI.Action.list(params,OCCI.VM.resource);
|
||||
@ -502,8 +502,8 @@ var OCCI = {
|
||||
}
|
||||
});
|
||||
},
|
||||
"delete": function(params){
|
||||
OCCI.Action.delete(params,OCCI.Image.resource);
|
||||
"del": function(params){
|
||||
OCCI.Action.del(params,OCCI.Image.resource);
|
||||
},
|
||||
"list": function(params){
|
||||
OCCI.Action.list(params,OCCI.Image.resource);
|
||||
@ -535,8 +535,8 @@ var OCCI = {
|
||||
"create" : function(params){
|
||||
OCCI.Action.create(params,OCCI.Template.resource);
|
||||
},
|
||||
"delete" : function(params){
|
||||
OCCI.Action.delete(params,OCCI.Template.resource);
|
||||
"del" : function(params){
|
||||
OCCI.Action.del(params,OCCI.Template.resource);
|
||||
},
|
||||
"list" : function(params){
|
||||
OCCI.Action.list(params,OCCI.Template.resource);
|
||||
|
@ -143,7 +143,7 @@ var vnet_actions = {
|
||||
|
||||
"Network.delete" : {
|
||||
type: "multiple",
|
||||
call: OCCI.Network.delete,
|
||||
call: OCCI.Network.del,
|
||||
callback: deleteVNetworkElement,
|
||||
elements: vnElements,
|
||||
error: onError,
|
||||
|
@ -199,7 +199,7 @@ var image_actions = {
|
||||
|
||||
"Image.delete" : {
|
||||
type: "multiple",
|
||||
call: OCCI.Image.delete,
|
||||
call: OCCI.Image.del,
|
||||
callback: deleteImageElement,
|
||||
elements: imageElements,
|
||||
error: onError,
|
||||
|
@ -223,7 +223,7 @@ var oZones = {
|
||||
});
|
||||
},
|
||||
|
||||
"delete": function(params,resource){
|
||||
"del": function(params,resource){
|
||||
var callback = params.success;
|
||||
var callback_error = params.error;
|
||||
var id = params.data.id;
|
||||
@ -381,8 +381,8 @@ var oZones = {
|
||||
"create": function(params){
|
||||
oZones.Action.create(params,oZones.Zone.resource);
|
||||
},
|
||||
"delete" : function(params){
|
||||
oZones.Action.delete(params,oZones.Zone.resource);
|
||||
"del" : function(params){
|
||||
oZones.Action.del(params,oZones.Zone.resource);
|
||||
},
|
||||
"list": function(params){
|
||||
oZones.Action.list(params,oZones.Zone.resource);
|
||||
@ -446,8 +446,8 @@ var oZones = {
|
||||
"update": function(params){
|
||||
oZones.Action.update(params,oZones.VDC.resource);
|
||||
},
|
||||
"delete": function(params){
|
||||
oZones.Action.delete(params,oZones.VDC.resource);
|
||||
"del": function(params){
|
||||
oZones.Action.del(params,oZones.VDC.resource);
|
||||
},
|
||||
"list": function(params){
|
||||
oZones.Action.list(params,oZones.VDC.resource);
|
||||
|
@ -155,7 +155,7 @@ var vdc_actions = {
|
||||
|
||||
"VDC.delete" : {
|
||||
type: "multiple",
|
||||
call: oZones.VDC.delete,
|
||||
call: oZones.VDC.del,
|
||||
callback: deleteVDCElement,
|
||||
elements: vdcSelectedNodes,
|
||||
error: onError,
|
||||
|
@ -118,7 +118,7 @@ var zone_actions = {
|
||||
|
||||
"Zone.delete" : {
|
||||
type: "multiple",
|
||||
call: oZones.Zone.delete,
|
||||
call: oZones.Zone.del,
|
||||
callback: deleteZoneElement,
|
||||
elements: zoneSelectedNodes,
|
||||
error: onError,
|
||||
|
@ -53,11 +53,15 @@
|
||||
:ALL: true
|
||||
:user:
|
||||
:group:
|
||||
- plugins/hosts-tab.js:
|
||||
- plugins/clusters-tab.js:
|
||||
:ALL: false
|
||||
:user:
|
||||
:group:
|
||||
oneadmin: true
|
||||
- plugins/hosts-tab.js:
|
||||
:ALL: true
|
||||
:user:
|
||||
:group:
|
||||
- plugins/datastores-tab.js:
|
||||
:ALL: true
|
||||
:user:
|
||||
@ -66,8 +70,3 @@
|
||||
:ALL: true
|
||||
:user:
|
||||
:group:
|
||||
- plugins/clusters-tab.js:
|
||||
:ALL: false
|
||||
:user:
|
||||
:group:
|
||||
oneadmin: true
|
||||
|
@ -198,7 +198,7 @@ class SunstoneServer < CloudServer
|
||||
end
|
||||
|
||||
############################################################################
|
||||
#
|
||||
# Unused
|
||||
############################################################################
|
||||
def get_vm_log(id)
|
||||
resource = retrieve_resource("vm", id)
|
||||
|
@ -46,21 +46,24 @@ var OpenNebula = {
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
case "HOST","host":
|
||||
case "HOST":
|
||||
case "host":
|
||||
return ["INIT",
|
||||
"MONITORING",
|
||||
"MONITORED",
|
||||
"ERROR",
|
||||
"DISABLED"][value];
|
||||
break;
|
||||
case "HOST_SIMPLE","host_simple":
|
||||
case "HOST_SIMPLE":
|
||||
case "host_simple":
|
||||
return ["ON",
|
||||
"ON",
|
||||
"ON",
|
||||
"ERROR",
|
||||
"OFF"][value];
|
||||
break;
|
||||
case "VM","vm":
|
||||
case "VM":
|
||||
case "vm":
|
||||
return ["INIT",
|
||||
"PENDING",
|
||||
"HOLD",
|
||||
@ -70,7 +73,8 @@ var OpenNebula = {
|
||||
"DONE",
|
||||
"FAILED"][value];
|
||||
break;
|
||||
case "VM_LCM","vm_lcm":
|
||||
case "VM_LCM":
|
||||
case "vm_lcm":
|
||||
return ["LCM_INIT",
|
||||
"PROLOG",
|
||||
"BOOT",
|
||||
@ -89,7 +93,8 @@ var OpenNebula = {
|
||||
"CLEANUP",
|
||||
"UNKNOWN"][value];
|
||||
break;
|
||||
case "IMAGE","image":
|
||||
case "IMAGE":
|
||||
case "image":
|
||||
return ["INIT",
|
||||
"READY",
|
||||
"USED",
|
||||
@ -97,6 +102,14 @@ var OpenNebula = {
|
||||
"LOCKED",
|
||||
"ERROR"][value];
|
||||
break;
|
||||
case "VM_MIGRATE_REASON":
|
||||
case "vm_migrate_reason":
|
||||
return ["NONE",
|
||||
"ERROR",
|
||||
"STOP_RESUME",
|
||||
"USER",
|
||||
"CANCEL"][value];
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
@ -203,7 +216,7 @@ var OpenNebula = {
|
||||
});
|
||||
},
|
||||
|
||||
"delete": function(params,resource){
|
||||
"del": function(params,resource){
|
||||
var callback = params.success;
|
||||
var callback_error = params.error;
|
||||
var id = params.data.id;
|
||||
@ -437,8 +450,8 @@ var OpenNebula = {
|
||||
"create": function(params){
|
||||
OpenNebula.Action.create(params,OpenNebula.Host.resource);
|
||||
},
|
||||
"delete": function(params){
|
||||
OpenNebula.Action.delete(params,OpenNebula.Host.resource);
|
||||
"del": function(params){
|
||||
OpenNebula.Action.del(params,OpenNebula.Host.resource);
|
||||
},
|
||||
"list": function(params){
|
||||
OpenNebula.Action.list(params,OpenNebula.Host.resource);
|
||||
@ -476,8 +489,8 @@ var OpenNebula = {
|
||||
"create": function(params){
|
||||
OpenNebula.Action.create(params,OpenNebula.Network.resource);
|
||||
},
|
||||
"delete": function(params){
|
||||
OpenNebula.Action.delete(params,OpenNebula.Network.resource);
|
||||
"del": function(params){
|
||||
OpenNebula.Action.del(params,OpenNebula.Network.resource);
|
||||
},
|
||||
"list": function(params){
|
||||
OpenNebula.Action.list(params,OpenNebula.Network.resource);
|
||||
@ -550,8 +563,8 @@ var OpenNebula = {
|
||||
"create": function(params){
|
||||
OpenNebula.Action.create(params,OpenNebula.VM.resource);
|
||||
},
|
||||
"delete": function(params){
|
||||
OpenNebula.Action.delete(params,OpenNebula.VM.resource);
|
||||
"del": function(params){
|
||||
OpenNebula.Action.del(params,OpenNebula.VM.resource);
|
||||
},
|
||||
"list": function(params){
|
||||
OpenNebula.Action.list(params,OpenNebula.VM.resource);
|
||||
@ -668,8 +681,8 @@ var OpenNebula = {
|
||||
"create": function(params){
|
||||
OpenNebula.Action.create(params,OpenNebula.Group.resource);
|
||||
},
|
||||
"delete": function(params){
|
||||
OpenNebula.Action.delete(params,OpenNebula.Group.resource);
|
||||
"del": function(params){
|
||||
OpenNebula.Action.del(params,OpenNebula.Group.resource);
|
||||
},
|
||||
"list": function(params){
|
||||
OpenNebula.Action.list(params,OpenNebula.Group.resource);
|
||||
@ -682,8 +695,8 @@ var OpenNebula = {
|
||||
"create": function(params){
|
||||
OpenNebula.Action.create(params,OpenNebula.User.resource);
|
||||
},
|
||||
"delete": function(params){
|
||||
OpenNebula.Action.delete(params,OpenNebula.User.resource);
|
||||
"del": function(params){
|
||||
OpenNebula.Action.del(params,OpenNebula.User.resource);
|
||||
},
|
||||
"list": function(params){
|
||||
OpenNebula.Action.list(params,OpenNebula.User.resource);
|
||||
@ -734,8 +747,8 @@ var OpenNebula = {
|
||||
"create": function(params){
|
||||
OpenNebula.Action.create(params,OpenNebula.Image.resource);
|
||||
},
|
||||
"delete": function(params){
|
||||
OpenNebula.Action.delete(params,OpenNebula.Image.resource);
|
||||
"del": function(params){
|
||||
OpenNebula.Action.del(params,OpenNebula.Image.resource);
|
||||
},
|
||||
"list": function(params){
|
||||
OpenNebula.Action.list(params,OpenNebula.Image.resource);
|
||||
@ -793,8 +806,8 @@ var OpenNebula = {
|
||||
"create" : function(params){
|
||||
OpenNebula.Action.create(params,OpenNebula.Template.resource);
|
||||
},
|
||||
"delete" : function(params){
|
||||
OpenNebula.Action.delete(params,OpenNebula.Template.resource);
|
||||
"del" : function(params){
|
||||
OpenNebula.Action.del(params,OpenNebula.Template.resource);
|
||||
},
|
||||
"list" : function(params){
|
||||
OpenNebula.Action.list(params,OpenNebula.Template.resource);
|
||||
@ -846,8 +859,8 @@ var OpenNebula = {
|
||||
"create" : function(params){
|
||||
OpenNebula.Action.create(params,OpenNebula.Acl.resource);
|
||||
},
|
||||
"delete" : function(params){
|
||||
OpenNebula.Action.delete(params,OpenNebula.Acl.resource);
|
||||
"del" : function(params){
|
||||
OpenNebula.Action.del(params,OpenNebula.Acl.resource);
|
||||
},
|
||||
"list" : function(params){
|
||||
OpenNebula.Action.list(params,OpenNebula.Acl.resource);
|
||||
@ -860,8 +873,8 @@ var OpenNebula = {
|
||||
"create" : function(params){
|
||||
OpenNebula.Action.create(params,OpenNebula.Cluster.resource);
|
||||
},
|
||||
"delete" : function(params){
|
||||
OpenNebula.Action.delete(params,OpenNebula.Cluster.resource);
|
||||
"del" : function(params){
|
||||
OpenNebula.Action.del(params,OpenNebula.Cluster.resource);
|
||||
},
|
||||
"list" : function(params){
|
||||
OpenNebula.Action.list(params,OpenNebula.Cluster.resource);
|
||||
@ -906,8 +919,8 @@ var OpenNebula = {
|
||||
"create" : function(params){
|
||||
OpenNebula.Action.create(params,OpenNebula.Datastore.resource);
|
||||
},
|
||||
"delete" : function(params){
|
||||
OpenNebula.Action.delete(params,OpenNebula.Datastore.resource);
|
||||
"del" : function(params){
|
||||
OpenNebula.Action.del(params,OpenNebula.Datastore.resource);
|
||||
},
|
||||
"list" : function(params){
|
||||
OpenNebula.Action.list(params,OpenNebula.Datastore.resource);
|
||||
|
@ -129,7 +129,7 @@ var acl_actions = {
|
||||
|
||||
"Acl.delete" : {
|
||||
type: "multiple",
|
||||
call: OpenNebula.Acl.delete,
|
||||
call: OpenNebula.Acl.del,
|
||||
callback: deleteAclElement,
|
||||
elements: aclElements,
|
||||
error: onError,
|
||||
|
@ -166,7 +166,7 @@ var cluster_actions = {
|
||||
|
||||
"Cluster.delete" : {
|
||||
type: "multiple",
|
||||
call : OpenNebula.Cluster.delete,
|
||||
call : OpenNebula.Cluster.del,
|
||||
callback : deleteClusterElement,
|
||||
elements: clusterElements,
|
||||
error : onError,
|
||||
@ -366,7 +366,82 @@ function clusterTabContent(cluster_json) {
|
||||
vnets_list = '<li class="clusterElemLi">'+cluster.VNETS.ID+' - '+getVNetName(cluster.VNETS.ID)+'</li>';
|
||||
*/
|
||||
|
||||
//special case for cluster none, simplified dashboard
|
||||
if (cluster.ID == "-"){
|
||||
var html_code = '\
|
||||
<table class="dashboard_table">\
|
||||
<tr>\
|
||||
<td style="width:50%">\
|
||||
<table style="width:100%">\
|
||||
<tr>\
|
||||
<td>\
|
||||
<div class="panel">\
|
||||
<h3>' + tr("Cluster information") + '</h3>\
|
||||
<div class="panel_info">\
|
||||
\
|
||||
<table class="info_table">\
|
||||
<tr>\
|
||||
<td class="key_td">' + tr("ID") + '</td>\
|
||||
<td class="value_td">'+cluster.ID+'</td>\
|
||||
</tr>\
|
||||
<tr>\
|
||||
<td class="key_td">' + tr("Name") + '</td>\
|
||||
<td class="value_td">'+cluster.NAME+'</td>\
|
||||
</tr>\
|
||||
</table>\
|
||||
\
|
||||
</div>\
|
||||
</div>\
|
||||
</td>\
|
||||
</tr>\
|
||||
<tr>\
|
||||
<td>\
|
||||
<div class="panel">\
|
||||
<h3>' + tr("Hosts") + '</h3>\
|
||||
<div class="panel_info">\
|
||||
<br />\
|
||||
<span class="ui-icon ui-icon-arrowreturnthick-1-e inline-icon" /><a class="action_button" href="#hosts_tab" value="Host.create_dialog">'+tr("Create new host")+'</a><br />\
|
||||
<span class="ui-icon ui-icon-arrowreturnthick-1-e inline-icon" /><a class="show_tab_button" filter_id="'+cluster.ID+'" href="#hosts_tab">'+tr("Manage unclustered hosts")+'</a><br /></p>\
|
||||
\
|
||||
</div>\
|
||||
</td>\
|
||||
</tr>\
|
||||
</table>\
|
||||
</td>\
|
||||
<td style="width:50%">\
|
||||
<table style="width:100%">\
|
||||
<tr>\
|
||||
<td>\
|
||||
<div class="panel">\
|
||||
<h3>' + tr("Datastores") + '</h3>\
|
||||
<div class="panel_info">\
|
||||
<br />\
|
||||
<span class="ui-icon ui-icon-arrowreturnthick-1-e inline-icon" /><a class="action_button" href="#datastores_tab" value="Datastore.create_dialog">'+tr("Create new datastore")+'</a><br />\
|
||||
<span class="ui-icon ui-icon-arrowreturnthick-1-e inline-icon" /><a class="show_tab_button" filter_id="'+cluster.ID+'" href="#datastores_tab">'+tr("Manage unclustered datastores")+'</a><br /></p>\
|
||||
</div>\
|
||||
</div>\
|
||||
</td>\
|
||||
</tr>\
|
||||
<tr>\
|
||||
<td>\
|
||||
<div class="panel">\
|
||||
<h3>' + tr("Virtual Networks") + '</h3>\
|
||||
<div class="panel_info">\
|
||||
<br />\
|
||||
<span class="ui-icon ui-icon-arrowreturnthick-1-e inline-icon" /><a class="action_button" href="#vnets_tab" value="Network.create_dialog">'+tr("Create new virtual network")+'</a><br />\
|
||||
<span class="ui-icon ui-icon-arrowreturnthick-1-e inline-icon" /><a class="show_tab_button" filter_id="'+cluster.ID+'" href="#vnets_tab">'+tr("Manage unclustered virtual networks")+'</a><br /></p>\
|
||||
</div>\
|
||||
</div>\
|
||||
</td>\
|
||||
</tr>\
|
||||
</table>\
|
||||
</td>\
|
||||
</tr></table>\
|
||||
';
|
||||
return html_code;
|
||||
};
|
||||
|
||||
//end cluster none special html
|
||||
|
||||
var html_code = '\
|
||||
<table class="dashboard_table">\
|
||||
@ -453,7 +528,7 @@ function removeClusterMenus(){
|
||||
// Sunstone.removeMainTab('cluster_vnets_tab_n',true);
|
||||
// Sunstone.removeMainTab('cluster_datastores_tab_n',true);
|
||||
// Sunstone.removeMainTab('cluster_hosts_tab_n',true);
|
||||
Sunstone.removeMainTab('cluster_tab_n',true);
|
||||
Sunstone.removeMainTab('cluster_tab_-',true);
|
||||
|
||||
for (var i=0; i < data.length; i++){
|
||||
var id = data[i][1];
|
||||
|
@ -207,7 +207,7 @@ var datastore_actions = {
|
||||
|
||||
"Datastore.delete" : {
|
||||
type: "multiple",
|
||||
call : OpenNebula.Datastore.delete,
|
||||
call : OpenNebula.Datastore.del,
|
||||
callback : deleteDatastoreElement,
|
||||
elements: datastoreElements,
|
||||
error : onError,
|
||||
@ -271,7 +271,8 @@ var datastore_buttons = {
|
||||
"Datastore.update_dialog" : {
|
||||
type: "action",
|
||||
text: tr("Update properties"),
|
||||
alwaysActive: true
|
||||
alwaysActive: true,
|
||||
condition: mustBeAdmin,
|
||||
},
|
||||
"Datastore.addtocluster" : {
|
||||
type: "confirm_with_select",
|
||||
@ -296,7 +297,8 @@ var datastore_buttons = {
|
||||
},
|
||||
"Datastore.delete" : {
|
||||
type: "confirm",
|
||||
text: tr("Delete")
|
||||
text: tr("Delete"),
|
||||
condition: mustBeAdmin
|
||||
}
|
||||
}
|
||||
|
||||
@ -443,7 +445,7 @@ function updateDatastoreInfo(request,ds){
|
||||
</tr>\
|
||||
<tr>\
|
||||
<td class="key_td">'+tr("Cluster")+'</td>\
|
||||
<td class="value_td">'+(element.CLUSTER.length ? element.CLUSTER : "-")+'</td>\
|
||||
<td class="value_td">'+(info.CLUSTER.length ? info.CLUSTER : "-")+'</td>\
|
||||
</tr>\
|
||||
<tr>\
|
||||
<td class="key_td">'+tr("DS Mad")+'</td>\
|
||||
|
@ -97,7 +97,7 @@ var group_actions = {
|
||||
|
||||
"Group.delete" : {
|
||||
type: "multiple",
|
||||
call : OpenNebula.Group.delete,
|
||||
call : OpenNebula.Group.del,
|
||||
callback : deleteGroupElement,
|
||||
error : onError,
|
||||
elements: groupElements,
|
||||
|
@ -189,7 +189,7 @@ var host_actions = {
|
||||
|
||||
"Host.delete" : {
|
||||
type: "multiple",
|
||||
call : OpenNebula.Host.delete,
|
||||
call : OpenNebula.Host.del,
|
||||
callback : deleteHostElement,
|
||||
elements: hostElements,
|
||||
error : onError,
|
||||
@ -271,30 +271,36 @@ var host_buttons = {
|
||||
},
|
||||
"Host.create_dialog" : {
|
||||
type: "create_dialog",
|
||||
text: tr("+ New")
|
||||
text: tr("+ New"),
|
||||
condition: mustBeAdmin
|
||||
},
|
||||
"Host.update_dialog" : {
|
||||
type: "action",
|
||||
text: tr("Update a template"),
|
||||
alwaysActive: true
|
||||
alwaysActive: true,
|
||||
condition: mustBeAdmin
|
||||
},
|
||||
"Host.addtocluster" : {
|
||||
type: "confirm_with_select",
|
||||
text: tr("Select cluster"),
|
||||
select: clusters_sel,
|
||||
tip: tr("Select the destination cluster:"),
|
||||
condition: mustBeAdmin
|
||||
},
|
||||
"Host.enable" : {
|
||||
type: "action",
|
||||
text: tr("Enable")
|
||||
text: tr("Enable"),
|
||||
condition: mustBeAdmin
|
||||
},
|
||||
"Host.disable" : {
|
||||
type: "action",
|
||||
text: tr("Disable")
|
||||
text: tr("Disable"),
|
||||
condition: mustBeAdmin
|
||||
},
|
||||
"Host.delete" : {
|
||||
type: "confirm",
|
||||
text: tr("Delete host")
|
||||
text: tr("Delete host"),
|
||||
condition: mustBeAdmin
|
||||
}
|
||||
};
|
||||
|
||||
@ -475,7 +481,7 @@ function updateHostInfo(request,host){
|
||||
</tr>\
|
||||
<tr>\
|
||||
<td class="key_td">' + tr("Cluster") + '</td>\
|
||||
<td class="value_td">'+(host.CLUSTER.length ? host.CLUSTER : "-")+'</td>\
|
||||
<td class="value_td">'+(host_info.CLUSTER.length ? host_info.CLUSTER : "-")+'</td>\
|
||||
</tr>\
|
||||
<tr>\
|
||||
<td class="key_td">' + tr("State") + '</td>\
|
||||
@ -493,10 +499,6 @@ function updateHostInfo(request,host){
|
||||
<td class="key_td">'+ tr("VN MAD") +'</td>\
|
||||
<td class="value_td">'+host_info.VN_MAD+'</td>\
|
||||
</tr>\
|
||||
<tr>\
|
||||
<td class="key_td">'+ tr("TM MAD") +'</td>\
|
||||
<td class="value_td">'+host_info.TM_MAD+'</td>\
|
||||
</tr>\
|
||||
</tbody>\
|
||||
</table>\
|
||||
<table id="host_shares_table" class="info_table">\
|
||||
|
@ -374,7 +374,7 @@ var image_actions = {
|
||||
|
||||
"Image.delete" : {
|
||||
type: "multiple",
|
||||
call: OpenNebula.Image.delete,
|
||||
call: OpenNebula.Image.del,
|
||||
callback: deleteImageElement,
|
||||
elements: imageElements,
|
||||
error: onError,
|
||||
|
@ -15,7 +15,7 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
var infra_tab_content =
|
||||
'<table class="dashboard_table" style=>\
|
||||
'<table class="dashboard_table" id="infra_dashboard" style=>\
|
||||
<tr>\
|
||||
<td style="width:50%">\
|
||||
<table style="width:100%">\
|
||||
@ -26,7 +26,7 @@ var infra_tab_content =
|
||||
<div class="panel_info">\
|
||||
\
|
||||
<table class="info_table">\
|
||||
<tr>\
|
||||
<tr class="cluster_related">\
|
||||
<td class="key_td">' + tr("Clusters") + '</td>\
|
||||
<td class="value_td"><span id="infra_total_clusters"></span></td>\
|
||||
</tr>\
|
||||
@ -54,7 +54,7 @@ var infra_tab_content =
|
||||
<h3>' + tr("Quickstart") + '</h3>\
|
||||
<div class="panel_info dashboard_p">\
|
||||
<p></br>\
|
||||
<span class="ui-icon ui-icon-arrowreturnthick-1-e inline-icon" /><a class="action_button" href="#clusters_tab" value="Cluster.create_dialog">'+tr("Create new Cluster")+'</a></br>\
|
||||
<span class="ui-icon ui-icon-arrowreturnthick-1-e inline-icon cluster_related" /><a class="action_button cluster_related" href="#clusters_tab" value="Cluster.create_dialog">'+tr("Create new Cluster")+'</a></br>\
|
||||
<span class="ui-icon ui-icon-arrowreturnthick-1-e inline-icon" /><a class="action_button" href="#hosts_tab" value="Host.create_dialog">'+tr("Create new Host")+'</a></br>\
|
||||
<span class="ui-icon ui-icon-arrowreturnthick-1-e inline-icon" /><a class="action_button" href="#datastores_tab" value="Datastore.create_dialog">'+tr("Create new Datastore")+'</a></br>\
|
||||
<span class="ui-icon ui-icon-arrowreturnthick-1-e inline-icon" /><a class="action_button" href="#vnets_tab" value="Network.create_dialog">'+tr("Create new Virtual Network")+'</a></br>\
|
||||
@ -72,7 +72,7 @@ var infra_tab_content =
|
||||
<div class="panel">\
|
||||
<h3>' + tr("Infrastructure resources") + '</h3>\
|
||||
<div class="panel_info">\
|
||||
<p>'+tr("The Infrastructure menu allows management of Hosts, Datastores, Virtual Networks and the Clusters they are placed in. The Clusters node can be expanded, and resources can be managed for each cluster.")+'</p>\
|
||||
<p>'+tr("The Infrastructure menu allows management of Hosts, Datastores, Virtual Networks. Users in the oneadmin group can manage clusters as well.")+'</p>\
|
||||
<p>'+tr("You can find further information on the following links:")+'</p>\
|
||||
<ul>\
|
||||
<li><a href="http://opennebula.org/documentation:rel3.4:hostsubsystem" target="_blank">Host subsystem</a></li>\
|
||||
@ -117,5 +117,6 @@ function updateInfraDashboard(what,json_info){
|
||||
};
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
if (!mustBeAdmin())
|
||||
$('table#infra_dashboard .cluster_related', main_tabs_context).hide();
|
||||
});
|
@ -186,7 +186,7 @@ var create_template_tmpl = '<div id="template_create_tabs">\
|
||||
<h3>'+tr("Add disks/images")+' <a id="add_disks" class="icon_left" href="#"><span class="ui-icon ui-icon-plus" /></a></h3>\
|
||||
</div>\
|
||||
<fieldset><legend>'+tr("Disks")+'</legend>\
|
||||
<div class="" id="image_vs_disk">\
|
||||
<div class="" id="image_vs_disk" style="display:none;">\
|
||||
<label>'+tr("Add disk/image")+'</label>\
|
||||
<input type="radio" id="add_disk" name="image_vs_disk" value="disk">'+tr("Disk")+'</input>\
|
||||
<!--<label for="add_disk">Add a disk</label>-->\
|
||||
@ -228,6 +228,11 @@ var create_template_tmpl = '<div id="template_create_tabs">\
|
||||
<input type="text" id="SOURCE" name="source" />\
|
||||
<div class="tip">'+tr("Disk file location path or URL")+'</div>\
|
||||
</div>\
|
||||
<div class="vm_param kvm xen vmware add_disk">\
|
||||
<label for="TM_MAD">'+tr("Transfer Manager")+':</label>\
|
||||
<input type="text" id="TM_MAD" name="tm_mad" />\
|
||||
<div class="tip">'+tr("shared,ssh,iscsi,dummy")+'</div>\
|
||||
</div>\
|
||||
<div class="vm_param kvm_opt xen_opt add_disk ">\
|
||||
<!--Mandatory for swap, fs and block images-->\
|
||||
<label for="SIZE">'+tr("Size")+':</label>\
|
||||
@ -283,7 +288,7 @@ var create_template_tmpl = '<div id="template_create_tabs">\
|
||||
<h3>'+tr("Setup Networks")+' <a id="add_networks" class="icon_left" href="#"><span class="ui-icon ui-icon-plus" /></a></h3>\
|
||||
</div>\
|
||||
<fieldset><legend>'+tr("Network")+'</legend>\
|
||||
<div class="" id="network_vs_niccfg">\
|
||||
<div class="" id="network_vs_niccfg" style="display:none;">\
|
||||
<label>'+tr("Add network")+'</label>\
|
||||
<input type="radio" id="add_network" name="network_vs_niccfg" value="network">'+tr("Predefined")+'</input>\
|
||||
<!--<label style="width:200px;" for="add_network">Pre-defined network</label>-->\
|
||||
@ -324,7 +329,7 @@ var create_template_tmpl = '<div id="template_create_tabs">\
|
||||
<input type="text" id="SCRIPT" name="script" />\
|
||||
<div class="tip">'+tr("Name of a shell script to be executed after creating the tun device for the VM")+'</div>\
|
||||
</div>\
|
||||
<div class="vm_param kvm_opt xen_opt vmware_opt niccfg">\
|
||||
<div class="vm_param kvm_opt xen_opt vmware_opt niccfg network">\
|
||||
<label for="MODEL">'+tr("Model")+':</label>\
|
||||
<input type="text" id="MODEL" name="model" />\
|
||||
<div class="tip">'+tr("Hardware that will emulate this network interface. With Xen this is the type attribute of the vif.")+'</div>\
|
||||
@ -720,7 +725,7 @@ var template_actions = {
|
||||
|
||||
"Template.delete" : {
|
||||
type: "multiple",
|
||||
call: OpenNebula.Template.delete,
|
||||
call: OpenNebula.Template.del,
|
||||
callback: deleteTemplateElement,
|
||||
elements: templateElements,
|
||||
error: onError,
|
||||
@ -1406,7 +1411,7 @@ function setupCreateTemplateDialog(){
|
||||
$('#image_vs_disk input',section_disks).click(function(){
|
||||
//$('fieldset',section_disks).show();
|
||||
$('.vm_param', section_disks).show();
|
||||
var select = $('#image_vs_disk :checked',section_disks).val();
|
||||
var select = $(this).val();
|
||||
switch (select)
|
||||
{
|
||||
case "disk":
|
||||
@ -1540,7 +1545,11 @@ function setupCreateTemplateDialog(){
|
||||
box_remove_element(section_disks,'#disks_box');
|
||||
return false;
|
||||
});
|
||||
};
|
||||
|
||||
//preselect now hidden option
|
||||
$('#image_vs_disk input#add_image',section_disks).trigger('click');
|
||||
|
||||
};
|
||||
|
||||
// Sets up the network section
|
||||
var networks_setup = function(){
|
||||
@ -1570,7 +1579,7 @@ function setupCreateTemplateDialog(){
|
||||
$('.firewall_select',section_networks).show();
|
||||
$('.firewall_select select option',section_networks).removeAttr('selected');
|
||||
|
||||
select = $('#network_vs_niccfg :checked',section_networks).val();
|
||||
select = $(this).val();
|
||||
switch (select) {
|
||||
case "network":
|
||||
$('.niccfg',section_networks).hide();
|
||||
@ -1648,6 +1657,8 @@ function setupCreateTemplateDialog(){
|
||||
return false;
|
||||
});
|
||||
|
||||
//preselect now hidden option
|
||||
$('#network_vs_niccfg input#add_network',section_networks).trigger('click');
|
||||
};
|
||||
|
||||
//Sets up the input section - basicly enabling adding and removing from box
|
||||
|
@ -197,7 +197,7 @@ var user_actions = {
|
||||
|
||||
"User.delete" : {
|
||||
type: "multiple",
|
||||
call: OpenNebula.User.delete,
|
||||
call: OpenNebula.User.del,
|
||||
callback: deleteUserElement,
|
||||
elements: userElements,
|
||||
error: onError,
|
||||
|
@ -63,6 +63,7 @@ var vms_tab_content =
|
||||
<th>'+tr("CPU")+'</th>\
|
||||
<th>'+tr("Memory")+'</th>\
|
||||
<th>'+tr("Hostname")+'</th>\
|
||||
<th>'+tr("IPs")+'</th>\
|
||||
<th>'+tr("Start Time")+'</th>\
|
||||
<th>'+tr("VNC Access")+'</th>\
|
||||
</tr>\
|
||||
@ -353,7 +354,7 @@ var vm_actions = {
|
||||
|
||||
"VM.delete" : {
|
||||
type: "multiple",
|
||||
call: OpenNebula.VM.delete,
|
||||
call: OpenNebula.VM.del,
|
||||
callback: deleteVMachineElement,
|
||||
elements: vmElements,
|
||||
error: onError,
|
||||
@ -592,6 +593,10 @@ var vm_info_panel = {
|
||||
"vm_log_tab" : {
|
||||
title: tr("VM log"),
|
||||
content: ""
|
||||
},
|
||||
"vm_history_tab" : {
|
||||
title: tr("History information"),
|
||||
content: "",
|
||||
}
|
||||
}
|
||||
|
||||
@ -619,7 +624,21 @@ function vmShow(req) {
|
||||
// Returns a human readable running time for a VM
|
||||
function str_start_time(vm){
|
||||
return pretty_time(vm.STIME);
|
||||
}
|
||||
};
|
||||
|
||||
function ip_str(vm){
|
||||
var nic = vm.TEMPLATE.NIC;
|
||||
var ip = '--';
|
||||
if ($.isArray(nic)) {
|
||||
ip = '';
|
||||
$.each(nic, function(index,value){
|
||||
ip += value.IP+'<br />';
|
||||
});
|
||||
} else if (nic && nic.IP) {
|
||||
ip = nic.IP;
|
||||
};
|
||||
return ip;
|
||||
};
|
||||
|
||||
// Returns an array formed by the information contained in the vm_json
|
||||
// and ready to be introduced in a dataTable
|
||||
@ -650,10 +669,11 @@ function vMachineElementArray(vm_json){
|
||||
vm.CPU,
|
||||
humanize_size(vm.MEMORY),
|
||||
hostname,
|
||||
ip_str(vm),
|
||||
str_start_time(vm),
|
||||
vncIcon(vm)
|
||||
];
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//Creates a listener for the TDs of the VM table
|
||||
@ -703,7 +723,69 @@ function updateVMachinesView(request, vmachine_list){
|
||||
updateView(vmachine_list_array,dataTable_vMachines);
|
||||
updateDashboard("vms",vmachine_list);
|
||||
updateVResDashboard("vms",vmachine_list);
|
||||
}
|
||||
};
|
||||
|
||||
function generateHistoryTable(vm){
|
||||
var html = ' <table id="vm_history_table" class="info_table" style="width:80%">\
|
||||
<thead>\
|
||||
<tr>\
|
||||
<th>'+tr("Sequence")+'</th>\
|
||||
<th>'+tr("Hostname")+'</th>\
|
||||
<th>'+tr("Reason")+'</th>\
|
||||
<th>'+tr("State change time")+'</th>\
|
||||
<th>'+tr("Total time")+'</th>\
|
||||
<th colspan="2">'+tr("Prolog time")+'</th>\
|
||||
</tr>\
|
||||
</thead>\
|
||||
<tbody>';
|
||||
|
||||
var history = [];
|
||||
|
||||
if ($.isArray(vm.HISTORY_RECORDS.HISTORY))
|
||||
history = vm.HISTORY_RECORDS.HISTORY;
|
||||
else if (vm.HISTORY_RECORDS.HISTORY.SEQ)
|
||||
history = [vm.HISTORY_RECORDS.HISTORY];
|
||||
|
||||
var now = Math.round(new Date().getTime() / 1000);
|
||||
|
||||
for (var i=0; i < history.length; i++){
|
||||
// :TIME time calculations copied from onevm_helper.rb
|
||||
var stime = parseInt(history[i].STIME, 10);
|
||||
|
||||
var etime = parseInt(history[i].ETIME, 10)
|
||||
etime = etime == 0 ? now : etime;
|
||||
|
||||
var dtime = etime - stime;
|
||||
// end :TIME
|
||||
|
||||
//:PTIME
|
||||
var stime2 = parseInt(history[i].PSTIME, 10);
|
||||
var etime2;
|
||||
var ptime2 = parseInt(history[i].PETIME, 10);
|
||||
if (stime2 == 0)
|
||||
etime2 = 0;
|
||||
else
|
||||
etime2 = ptime2 == 0 ? now : ptime2;
|
||||
var dtime2 = etime2 - stime2;
|
||||
|
||||
//end :PTIME
|
||||
|
||||
|
||||
html += ' <tr>\
|
||||
<td style="width:20%">'+history[i].SEQ+'</td>\
|
||||
<td style="width:20%">'+history[i].HOSTNAME+'</td>\
|
||||
<td style="width:16%">'+OpenNebula.Helper.resource_state("VM_MIGRATE_REASON",parseInt(history[i].REASON, 10))+'</td>\
|
||||
<td style="width:16%">'+pretty_time(history[i].STIME)+'</td>\
|
||||
<td style="width:16%">'+pretty_time_runtime(dtime)+'</td>\
|
||||
<td style="width:16%">'+pretty_time_runtime(dtime2)+'</td>\
|
||||
<td></td>\
|
||||
</tr>'
|
||||
};
|
||||
html += '</tbody>\
|
||||
</table>';
|
||||
return html;
|
||||
|
||||
};
|
||||
|
||||
|
||||
// Refreshes the information panel for a VM
|
||||
@ -805,7 +887,7 @@ function updateVMInfo(request,vm){
|
||||
</tr>\
|
||||
</tbody>\
|
||||
</table>'
|
||||
}
|
||||
};
|
||||
|
||||
var template_tab = {
|
||||
title: tr("VM Template"),
|
||||
@ -814,21 +896,27 @@ function updateVMInfo(request,vm){
|
||||
<thead><tr><th colspan="2">'+tr("VM template")+'</th></tr></thead>'+
|
||||
prettyPrintJSON(vm_info.TEMPLATE)+
|
||||
'</table>'
|
||||
}
|
||||
};
|
||||
|
||||
var log_tab = {
|
||||
title: tr("VM log"),
|
||||
content: '<div>'+spinner+'</div>'
|
||||
}
|
||||
};
|
||||
|
||||
var monitoring_tab = {
|
||||
title: tr("Monitoring information"),
|
||||
content: generateMonitoringDivs(vm_graphs,"vm_monitor_")
|
||||
}
|
||||
};
|
||||
|
||||
var history_tab = {
|
||||
title: tr("History information"),
|
||||
content: generateHistoryTable(vm_info),
|
||||
};
|
||||
|
||||
Sunstone.updateInfoPanelTab("vm_info_panel","vm_info_tab",info_tab);
|
||||
Sunstone.updateInfoPanelTab("vm_info_panel","vm_template_tab",template_tab);
|
||||
Sunstone.updateInfoPanelTab("vm_info_panel","vm_log_tab",log_tab);
|
||||
Sunstone.updateInfoPanelTab("vm_info_panel","vm_history_tab",history_tab);
|
||||
Sunstone.updateInfoPanelTab("vm_info_panel","vm_monitoring_tab",monitoring_tab);
|
||||
|
||||
//Pop up the info panel and asynchronously get vm_log and stats
|
||||
@ -1284,9 +1372,9 @@ $(document).ready(function(){
|
||||
"aoColumnDefs": [
|
||||
{ "bSortable": false, "aTargets": ["check"] },
|
||||
{ "sWidth": "60px", "aTargets": [0,6,7] },
|
||||
{ "sWidth": "35px", "aTargets": [1,10] },
|
||||
{ "sWidth": "150px", "aTargets": [5,9] },
|
||||
{ "sWidth": "100px", "aTargets": [2,3] }
|
||||
{ "sWidth": "35px", "aTargets": [1,11] },
|
||||
{ "sWidth": "150px", "aTargets": [5,10] },
|
||||
{ "sWidth": "100px", "aTargets": [2,3,9] }
|
||||
],
|
||||
"oLanguage": (datatable_lang != "") ?
|
||||
{
|
||||
@ -1297,7 +1385,7 @@ $(document).ready(function(){
|
||||
dataTable_vMachines.fnClearTable();
|
||||
addElement([
|
||||
spinner,
|
||||
'','','','','','','','','',''],dataTable_vMachines);
|
||||
'','','','','','','','','','',''],dataTable_vMachines);
|
||||
Sunstone.runAction("VM.list");
|
||||
|
||||
setupCreateVMDialog();
|
||||
|
@ -283,7 +283,7 @@ var vnet_actions = {
|
||||
|
||||
"Network.delete" : {
|
||||
type: "multiple",
|
||||
call: OpenNebula.Network.delete,
|
||||
call: OpenNebula.Network.del,
|
||||
callback: deleteVNetworkElement,
|
||||
elements: vnElements,
|
||||
error: onError,
|
||||
@ -566,7 +566,7 @@ function updateVNetworkInfo(request,vn){
|
||||
</tr>\
|
||||
<tr>\
|
||||
<td class="key_td">'+tr("Cluster")+'</td>\
|
||||
<td class="value_td">'+(network.CLUSTER.length ? network.CLUSTER : "-")+'</td>\
|
||||
<td class="value_td">'+(vn_info.CLUSTER.length ? vn_info.CLUSTER : "-")+'</td>\
|
||||
</tr>\
|
||||
<tr>\
|
||||
<td class="key_td">'+tr("Owner")+'</td>\
|
||||
|
@ -60,6 +60,20 @@ function pretty_time_axis(time){
|
||||
return hour + ":" + mins + ":" + secs;// + " " + month + "/" + day;
|
||||
}
|
||||
|
||||
function pretty_time_runtime(time){
|
||||
var d = new Date();
|
||||
d.setTime(time*1000);
|
||||
|
||||
var secs = pad(d.getUTCSeconds(),2);
|
||||
var hour = pad(d.getUTCHours(),2);
|
||||
var mins = pad(d.getUTCMinutes(),2);
|
||||
var day = d.getUTCDate()-1;
|
||||
var month = pad(d.getUTCMonth()+1,2); //getMonths returns 0-11
|
||||
var year = d.getUTCFullYear();
|
||||
|
||||
return day + "d " + hour + ":" + mins;// + ":" + secs;// + " " + month + "/" + day;
|
||||
}
|
||||
|
||||
//returns a human readable size in Kilo, Mega, Giga or Tera bytes
|
||||
function humanize_size(value) {
|
||||
if (typeof(value) === "undefined") {
|
||||
|
@ -465,7 +465,19 @@ function insertTab(tab_name){
|
||||
|
||||
$('div#'+tab_name,main_tabs_context).html(tab_info.content);
|
||||
|
||||
$('div#menu ul#navigation').append('<li id="li_'+tab_name+'" class="'+tabClass+' '+parent+'">'+tab_info.title+'<span class="ui-icon ui-icon-circle-plus plusIcon"></span></li>');
|
||||
var li_item = '<li id="li_'+tab_name+'" class="'+tabClass+' '+parent+'">'+tab_info.title+'<span class="ui-icon ui-icon-circle-plus plusIcon"></span></li>';
|
||||
|
||||
//if this is a submenu...
|
||||
if (parent.length) {
|
||||
var children = $('div#menu ul#navigation li.'+parent);
|
||||
//if there are other submenus, insert after last of them
|
||||
if (children.length)
|
||||
$(children[children.length-1]).after(li_item);
|
||||
else //instert after parent menu
|
||||
$('div#menu ul#navigation li#li_'+parent).after(li_item);
|
||||
} else { //not a submenu, instert in the end
|
||||
$('div#menu ul#navigation').append(li_item);
|
||||
};
|
||||
|
||||
if (parent){ //this is a subtab
|
||||
$('div#menu li#li_'+tab_name).hide();//hide by default
|
||||
|
Loading…
x
Reference in New Issue
Block a user