mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-22 18:50:08 +03:00
Merge branch 'master' of git.opennebula.org:one
This commit is contained in:
commit
27aa3c39fe
@ -365,9 +365,8 @@ module OpenNebula
|
||||
#
|
||||
def attr_to_str(attr)
|
||||
attr.gsub!('"',"\\\"")
|
||||
attr.prepend('"')
|
||||
attr << '"'
|
||||
|
||||
attr = "\"#{attr}\""
|
||||
|
||||
return attr
|
||||
end
|
||||
end
|
||||
|
@ -19,44 +19,44 @@ body {
|
||||
}
|
||||
|
||||
p{
|
||||
margin:0 10px 10px;
|
||||
}
|
||||
margin:0 10px 10px;
|
||||
}
|
||||
a {
|
||||
color: #000C96; text-decoration: none;
|
||||
}
|
||||
color: #000C96; text-decoration: none;
|
||||
}
|
||||
a:hover {
|
||||
color: #127FE4; text-decoration: none;
|
||||
}
|
||||
color: #127FE4; text-decoration: none;
|
||||
}
|
||||
select, button {
|
||||
padding: 2px;
|
||||
}
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
float:left;
|
||||
font-size:20px;
|
||||
margin-bottom: 5px;
|
||||
padding-bottom: 0}
|
||||
float:left;
|
||||
font-size:20px;
|
||||
margin-bottom: 5px;
|
||||
padding-bottom: 0}
|
||||
|
||||
h3 {
|
||||
border-bottom: 1px solid #CCCCCC;
|
||||
color: #353735;
|
||||
font-size: 14px;
|
||||
font-weight: normal;
|
||||
padding: 5px 8px;
|
||||
margin: 0 0;
|
||||
border-bottom: 1px solid #CCCCCC;
|
||||
color: #353735;
|
||||
font-size: 14px;
|
||||
font-weight: normal;
|
||||
padding: 5px 8px;
|
||||
margin: 0 0;
|
||||
}
|
||||
|
||||
table#dashboard_table{
|
||||
width:100%;
|
||||
margin: 0;
|
||||
}
|
||||
width:100%;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
table#dashboard_table tr {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
table#dashboard_table > tbody > tr > td{
|
||||
width:50%;
|
||||
width:50%;
|
||||
}
|
||||
|
||||
div.panel {
|
||||
@ -130,16 +130,16 @@ ul.multi_action_menu li:hover { background-color: #D3D3D3;}
|
||||
|
||||
|
||||
div.action_block {
|
||||
display:inline;
|
||||
margin-right: 5px;
|
||||
border-right: 1px solid #D3D3D3;
|
||||
}
|
||||
display:inline;
|
||||
margin-right: 5px;
|
||||
border-right: 1px solid #D3D3D3;
|
||||
}
|
||||
|
||||
div.action_blocks {
|
||||
margin-bottom: 0.5em;
|
||||
text-align: right;
|
||||
margin-top: 0.5em;
|
||||
}
|
||||
margin-bottom: 0.5em;
|
||||
text-align: right;
|
||||
margin-top: 0.5em;
|
||||
}
|
||||
|
||||
input, textarea, select {
|
||||
border: 1px #bbbbbb solid;
|
||||
@ -147,51 +147,51 @@ input, textarea, select {
|
||||
|
||||
input, textarea {
|
||||
-webkit-border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
}
|
||||
|
||||
form.create_form{
|
||||
margin:0;
|
||||
padding:0;}
|
||||
margin:0;
|
||||
padding:0;}
|
||||
|
||||
fieldset{
|
||||
margin:0 0;
|
||||
border:none;
|
||||
border-top:1px solid #ccc;
|
||||
padding: 10px 5px;}
|
||||
margin:0 0;
|
||||
border:none;
|
||||
border-top:1px solid #ccc;
|
||||
padding: 10px 5px;}
|
||||
|
||||
fieldset div{
|
||||
margin-bottom:.5em;
|
||||
padding:0;
|
||||
display:block;
|
||||
}
|
||||
margin-bottom:.5em;
|
||||
padding:0;
|
||||
display:block;
|
||||
}
|
||||
|
||||
|
||||
fieldset input,
|
||||
fieldset textarea{
|
||||
width:150px;
|
||||
/*border-top:1px solid #555;
|
||||
border-left:1px solid #555;
|
||||
border-bottom:1px solid #ccc;
|
||||
border-right:1px solid #ccc;*/
|
||||
padding:1px;color:#333;
|
||||
vertical-align: middle;
|
||||
margin: 0 2px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
width:150px;
|
||||
/*border-top:1px solid #555;
|
||||
border-left:1px solid #555;
|
||||
border-bottom:1px solid #ccc;
|
||||
border-right:1px solid #ccc;*/
|
||||
padding:1px;color:#333;
|
||||
vertical-align: middle;
|
||||
margin: 0 2px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
fieldset select{
|
||||
width:154px;
|
||||
/*border-top:1px solid #555;
|
||||
border-left:1px solid #555;
|
||||
border-bottom:1px solid #ccc;
|
||||
border-right:1px solid #ccc;*/
|
||||
padding:1px;
|
||||
color:#333;
|
||||
vertical-align: top;
|
||||
margin: 0 2px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
width:154px;
|
||||
/*border-top:1px solid #555;
|
||||
border-left:1px solid #555;
|
||||
border-bottom:1px solid #ccc;
|
||||
border-right:1px solid #ccc;*/
|
||||
padding:1px;
|
||||
color:#333;
|
||||
vertical-align: top;
|
||||
margin: 0 2px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
/*Chrome hack*/
|
||||
input[type="radio"],input[type="checkbox"] {
|
||||
@ -199,21 +199,21 @@ input[type="radio"],input[type="checkbox"] {
|
||||
}
|
||||
|
||||
legend{
|
||||
margin-top:0;
|
||||
margin-bottom: 5px;
|
||||
padding:0 .5em;
|
||||
color:#036;
|
||||
background:transparent;
|
||||
font-size:1.0em;
|
||||
font-weight:bold;
|
||||
}
|
||||
margin-top:0;
|
||||
margin-bottom: 5px;
|
||||
padding:0 .5em;
|
||||
color:#036;
|
||||
background:transparent;
|
||||
font-size:1.0em;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
label{
|
||||
float: left;
|
||||
width:150px;
|
||||
padding:0 1em;
|
||||
text-align:left;
|
||||
}
|
||||
width:150px;
|
||||
padding:0 1em;
|
||||
text-align:left;
|
||||
}
|
||||
|
||||
.dataTables_wrapper label {
|
||||
float: none;
|
||||
@ -223,21 +223,26 @@ label{
|
||||
}
|
||||
|
||||
div.tip {
|
||||
display: inline-block;
|
||||
padding-left: 5px;
|
||||
vertical-align: middle;
|
||||
float:none;
|
||||
}
|
||||
display: inline-block;
|
||||
padding-left: 5px;
|
||||
vertical-align: middle;
|
||||
float:none;
|
||||
}
|
||||
|
||||
div.tip span.ui-icon{
|
||||
display:inline-block;
|
||||
div.tip span.ui-icon {
|
||||
display:inline-block;
|
||||
}
|
||||
|
||||
.vdc_show_hide span.ui-icon{
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
div.tip span.man_icon {
|
||||
display:none;
|
||||
display:none;
|
||||
}
|
||||
.img_man .man_icon {
|
||||
display:inline-block!important;
|
||||
display:inline-block!important;
|
||||
}
|
||||
|
||||
span.tipspan,div.full_info {
|
||||
@ -255,51 +260,51 @@ span.tipspan,div.full_info {
|
||||
font-size:10px;
|
||||
}
|
||||
.vm_section input {
|
||||
float:none;
|
||||
float:none;
|
||||
}
|
||||
|
||||
.vm_section legend{
|
||||
display:none!important;
|
||||
display:none!important;
|
||||
}
|
||||
.vm_section fieldset {
|
||||
border:none!important;
|
||||
border:none!important;
|
||||
}
|
||||
|
||||
div.show_hide {
|
||||
float:none;
|
||||
clear:both;
|
||||
float:none;
|
||||
clear:both;
|
||||
}
|
||||
|
||||
.vm_param label{
|
||||
float:left;
|
||||
float:left;
|
||||
}
|
||||
|
||||
fieldset div.vm_section {
|
||||
margin-top:-8px;
|
||||
margin-bottom:0px;
|
||||
margin-top:-8px;
|
||||
margin-bottom:0px;
|
||||
}
|
||||
|
||||
|
||||
input:focus,
|
||||
textarea:focus{
|
||||
background:#efefef;
|
||||
color:#000;
|
||||
background:#efefef;
|
||||
color:#000;
|
||||
}
|
||||
|
||||
.form_buttons {
|
||||
margin-top:25px;
|
||||
text-align:right;
|
||||
margin-top:25px;
|
||||
text-align:right;
|
||||
}
|
||||
|
||||
.add_remove_button {
|
||||
font-size:0.8em !important;
|
||||
height:25px !important;
|
||||
margin-bottom:4px;
|
||||
font-size:0.8em !important;
|
||||
height:25px !important;
|
||||
margin-bottom:4px;
|
||||
}
|
||||
|
||||
.add_button {
|
||||
margin-left:148px;
|
||||
width: 58px !important;
|
||||
margin-left:148px;
|
||||
width: 58px !important;
|
||||
}
|
||||
|
||||
.remove_button {
|
||||
@ -317,15 +322,15 @@ tr.odd td, tr.even td{
|
||||
}
|
||||
|
||||
tr.odd:hover{
|
||||
background-color: #88C140 !important;
|
||||
background-color: #88C140 !important;
|
||||
}
|
||||
|
||||
tr.even:hover{
|
||||
background-color: #88C140 !important;
|
||||
background-color: #88C140 !important;
|
||||
}
|
||||
|
||||
.show_hide label{
|
||||
width: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.clear {
|
||||
@ -339,8 +344,8 @@ tr.even:hover{
|
||||
}
|
||||
|
||||
.action_block_info{
|
||||
width: 235px;
|
||||
margin: auto;
|
||||
width: 235px;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.icon_right {
|
||||
@ -348,33 +353,33 @@ tr.even:hover{
|
||||
margin-left: 20px;
|
||||
position: relative;
|
||||
top: 2px;
|
||||
}
|
||||
}
|
||||
.icon_left {
|
||||
float: left;
|
||||
margin-right: 20px;
|
||||
position: relative;
|
||||
top: 0px;
|
||||
/*border:1px solid;*/
|
||||
/*border:1px solid;*/
|
||||
}
|
||||
|
||||
|
||||
|
||||
.info_table{
|
||||
background: none repeat scroll 0 0 #FFFFFF;
|
||||
border-collapse: collapse;
|
||||
margin: 20px;
|
||||
text-align: left;
|
||||
display: inline-block;
|
||||
width:45%;
|
||||
vertical-align:top;
|
||||
}
|
||||
background: none repeat scroll 0 0 #FFFFFF;
|
||||
border-collapse: collapse;
|
||||
margin: 20px;
|
||||
text-align: left;
|
||||
display: inline-block;
|
||||
width:45%;
|
||||
vertical-align:top;
|
||||
}
|
||||
|
||||
.info_table > thead th,h3 {
|
||||
border-bottom: 2px solid #353735;
|
||||
color: #353735;
|
||||
font-size: 14px;
|
||||
font-weight: normal;
|
||||
padding: 10px 8px;
|
||||
border-bottom: 2px solid #353735;
|
||||
color: #353735;
|
||||
font-size: 14px;
|
||||
font-weight: normal;
|
||||
padding: 10px 8px;
|
||||
}
|
||||
|
||||
|
||||
@ -385,13 +390,13 @@ tr.even:hover{
|
||||
padding-bottom: 6px;
|
||||
padding-left: 8px;
|
||||
padding-right: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.info_table td.key_td{
|
||||
width: 55%;
|
||||
text-align:left;
|
||||
font-weight:bold;
|
||||
width: 55%;
|
||||
text-align:left;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
.info_table td.graph_td{
|
||||
@ -401,8 +406,8 @@ tr.even:hover{
|
||||
}
|
||||
|
||||
.info_table td.value_td{
|
||||
text-align:left;
|
||||
width: 45%;
|
||||
text-align:left;
|
||||
width: 45%;
|
||||
}
|
||||
|
||||
#dialog > div > div {
|
||||
@ -411,9 +416,9 @@ tr.even:hover{
|
||||
}
|
||||
|
||||
.loading_img {
|
||||
vertical-align:middle;
|
||||
display:inline;
|
||||
overflow:hide;
|
||||
vertical-align:middle;
|
||||
display:inline;
|
||||
overflow:hide;
|
||||
|
||||
}
|
||||
|
||||
@ -422,32 +427,32 @@ tr.even:hover{
|
||||
height: 25px;
|
||||
margin: 3px 2px;
|
||||
vertical-align: middle;
|
||||
/*width: 89px;*/
|
||||
/*width: 89px;*/
|
||||
}
|
||||
.top_button button {
|
||||
font-size: 0.9em;
|
||||
height: 25px;
|
||||
vertical-align: middle;
|
||||
font-size: 0.9em;
|
||||
height: 25px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.image_button {
|
||||
font-size: 0.8em;
|
||||
margin: 3px 2px;
|
||||
vertical-align: middle;
|
||||
border:0;
|
||||
font-size: 0.8em;
|
||||
margin: 3px 2px;
|
||||
vertical-align: middle;
|
||||
border:0;
|
||||
}
|
||||
|
||||
/*
|
||||
.multi_action_slct{
|
||||
font-size: 0.7em;
|
||||
vertical-align:middle;
|
||||
margin:3px 0;
|
||||
height: 25px;
|
||||
}*/
|
||||
.multi_action_slct{
|
||||
font-size: 0.7em;
|
||||
vertical-align:middle;
|
||||
margin:3px 0;
|
||||
height: 25px;
|
||||
}*/
|
||||
|
||||
.ui-icon-refresh{
|
||||
position:relative!important;
|
||||
top:14px!important;
|
||||
position:relative!important;
|
||||
top:14px!important;
|
||||
}
|
||||
|
||||
#vm_log {
|
||||
@ -509,21 +514,21 @@ tr.even:hover{
|
||||
|
||||
ul.action_list{
|
||||
|
||||
/*background: #EDEDED;*/
|
||||
border: 1px solid #525252;
|
||||
background-image: -webkit-gradient(
|
||||
linear,
|
||||
left bottom,
|
||||
left top,
|
||||
color-stop(0.25, #E9E9E9),
|
||||
color-stop(0.63, #F5F5F5)
|
||||
);
|
||||
background-image: -moz-linear-gradient(
|
||||
center bottom,
|
||||
#E9E9E9 25%,
|
||||
#F5F5F5 63%
|
||||
);
|
||||
position:absolute;
|
||||
/*background: #EDEDED;*/
|
||||
border: 1px solid #525252;
|
||||
background-image: -webkit-gradient(
|
||||
linear,
|
||||
left bottom,
|
||||
left top,
|
||||
color-stop(0.25, #E9E9E9),
|
||||
color-stop(0.63, #F5F5F5)
|
||||
);
|
||||
background-image: -moz-linear-gradient(
|
||||
center bottom,
|
||||
#E9E9E9 25%,
|
||||
#F5F5F5 63%
|
||||
);
|
||||
position:absolute;
|
||||
z-index:1;
|
||||
list-style-type:none;
|
||||
text-align:left;
|
||||
@ -550,20 +555,21 @@ ul.action_list li a:hover{
|
||||
}
|
||||
|
||||
.progress_bar{
|
||||
height:10px;
|
||||
background: #8F9392;
|
||||
height:10px;
|
||||
background: #8F9392;
|
||||
}
|
||||
|
||||
|
||||
.dd_lists{
|
||||
width:154px;
|
||||
width:250px;
|
||||
display:inline-block;
|
||||
height:200px;
|
||||
margin-left:2px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
ul.dd_list{
|
||||
height:200px;
|
||||
width:67px;
|
||||
width:115px;
|
||||
margin:0;
|
||||
border: 1px #bbbbbb solid;
|
||||
list-style-type:none;
|
||||
|
@ -30,10 +30,26 @@ function updateHostsList(req,list,tag,zone_id,zone_name){
|
||||
function updateVMsList(req,list,tag,zone_id,zone_name){
|
||||
var vmsDataTable = $(tag).dataTable();
|
||||
var vms_array = [];
|
||||
|
||||
var ip_str = 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;
|
||||
};
|
||||
|
||||
$.each(list,function(){
|
||||
var vm = this.VM;
|
||||
var state = oZones.Helper.resource_state("vm",vm.STATE);
|
||||
var hostname = "--";
|
||||
var ip = ip_str(vm);
|
||||
|
||||
if (state == "ACTIVE" || state == "SUSPENDED"){
|
||||
if (vm.HISTORY_RECORDS.HISTORY.constructor == Array){
|
||||
@ -59,6 +75,7 @@ function updateVMsList(req,list,tag,zone_id,zone_name){
|
||||
vm.CPU,
|
||||
humanize_size(vm.MEMORY),
|
||||
hostname,
|
||||
ip,
|
||||
pretty_time(vm.STIME)
|
||||
]);
|
||||
} else {
|
||||
@ -71,6 +88,7 @@ function updateVMsList(req,list,tag,zone_id,zone_name){
|
||||
vm.CPU,
|
||||
humanize_size(vm.MEMORY),
|
||||
hostname,
|
||||
ip,
|
||||
pretty_time(vm.STIME)
|
||||
]);
|
||||
};
|
||||
@ -101,16 +119,18 @@ function updateVNsList(req,list,tag,zone_id,zone_name){
|
||||
network.UNAME,
|
||||
network.GNAME,
|
||||
network.NAME,
|
||||
network.CLUSTER.length ? network.CLUSTER : "-",
|
||||
parseInt(network.TYPE) ? "FIXED" : "RANGED",
|
||||
network.BRIDGE,
|
||||
total_leases
|
||||
]);
|
||||
} else {
|
||||
vn_array.push([
|
||||
vn_array.push([
|
||||
network.ID,
|
||||
network.UNAME,
|
||||
network.GNAME,
|
||||
network.NAME,
|
||||
network.CLUSTER.length ? network.CLUSTER : "-",
|
||||
parseInt(network.TYPE) ? "FIXED" : "RANGED",
|
||||
network.BRIDGE,
|
||||
total_leases
|
||||
@ -276,6 +296,7 @@ function hostElementArray(host,zone_id,zone_name){
|
||||
zone_name,
|
||||
host.ID,
|
||||
host.NAME,
|
||||
host.CLUSTER.length ? host.CLUSTER : "-",
|
||||
host.HOST_SHARE.RUNNING_VMS, //rvm
|
||||
pb_cpu,
|
||||
pb_mem,
|
||||
@ -285,8 +306,68 @@ function hostElementArray(host,zone_id,zone_name){
|
||||
return [
|
||||
host.ID,
|
||||
host.NAME,
|
||||
host.CLUSTER.length ? host.CLUSTER : "-",
|
||||
host.HOST_SHARE.RUNNING_VMS, //rvm
|
||||
pb_cpu,
|
||||
pb_mem,
|
||||
oZones.Helper.resource_state("host_simple",host.STATE) ];
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
function updateClustersList(req,list,tag, zone_id,zone_name){
|
||||
var dataTable = $(tag).dataTable();
|
||||
var array = [];
|
||||
|
||||
$.each(list,function(){
|
||||
var cluster = this.CLUSTER;
|
||||
|
||||
if (zone_id){
|
||||
array.push([
|
||||
zone_id,
|
||||
zone_name,
|
||||
cluster.ID,
|
||||
cluster.NAME
|
||||
]);
|
||||
} else {
|
||||
array.push([
|
||||
cluster.ID,
|
||||
cluster.NAME
|
||||
]);
|
||||
};
|
||||
|
||||
});
|
||||
dataTable.fnAddData(array);
|
||||
dataTable.fnDraw(false);
|
||||
};
|
||||
|
||||
function updateDatastoresList(req,list,tag, zone_id,zone_name){
|
||||
var dataTable = $(tag).dataTable();
|
||||
var array = [];
|
||||
|
||||
$.each(list,function(){
|
||||
var ds = this.DATASTORE;
|
||||
|
||||
if (zone_id){
|
||||
array.push([
|
||||
zone_id,
|
||||
zone_name,
|
||||
ds.ID,
|
||||
ds.UNAME,
|
||||
ds.GNAME,
|
||||
ds.NAME,
|
||||
ds.CLUSTER.length ? ds.CLUSTER : "-",
|
||||
]);
|
||||
} else {
|
||||
array.push([
|
||||
ds.ID,
|
||||
ds.UNAME,
|
||||
ds.GNAME,
|
||||
ds.NAME,
|
||||
ds.CLUSTER.length ? ds.CLUSTER : "-",
|
||||
]);
|
||||
};
|
||||
|
||||
});
|
||||
dataTable.fnAddData(array);
|
||||
dataTable.fnDraw(false);
|
||||
};
|
||||
|
@ -431,10 +431,15 @@ var oZones = {
|
||||
"vnet": function(params){
|
||||
oZones.Zone.subresource(params,"vnet");
|
||||
},
|
||||
|
||||
"group": function(params){
|
||||
oZones.Zone.subresource(params,"group");
|
||||
}
|
||||
},
|
||||
"cluster": function(params){
|
||||
oZones.Zone.subresource(params,"cluster");
|
||||
},
|
||||
"datastore": function(params){
|
||||
oZones.Zone.subresource(params,"datastore");
|
||||
},
|
||||
},
|
||||
|
||||
"VDC": {
|
||||
@ -497,5 +502,19 @@ var oZones = {
|
||||
"list": function(params){
|
||||
oZones.Action.list(params,oZones.ZoneImages.resource,"vmtemplate");
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"ZoneClusters": {
|
||||
"resource": "ZONE",
|
||||
"list": function(params){
|
||||
oZones.Action.list(params,oZones.ZoneClusters.resource,"cluster");
|
||||
}
|
||||
},
|
||||
|
||||
"ZoneDatastores": {
|
||||
"resource": "ZONE",
|
||||
"list": function(params){
|
||||
oZones.Action.list(params,oZones.ZoneDatastores.resource,"datastore");
|
||||
}
|
||||
},
|
||||
};
|
||||
|
@ -25,6 +25,7 @@ var aggregated_hosts_tab_content =
|
||||
<th>Zone Name</th>\
|
||||
<th>ID</th>\
|
||||
<th>Name</th>\
|
||||
<th>Cluster</th>\
|
||||
<th>Running VMs</th>\
|
||||
<th>CPU Use</th>\
|
||||
<th>Memory use</th>\
|
||||
@ -68,6 +69,7 @@ var aggregated_vns_tab_content =
|
||||
<th>Owner</th>\
|
||||
<th>Group</th>\
|
||||
<th>Name</th>\
|
||||
<th>Cluster</th>\
|
||||
<th>Type</th>\
|
||||
<th>Bridge</th>\
|
||||
<th>Total Leases</th>\
|
||||
@ -113,7 +115,6 @@ var aggregated_users_tab_content =
|
||||
<tbody>\
|
||||
</tbody>\
|
||||
</table>';
|
||||
|
||||
var aggregated_templates_tab_content =
|
||||
'<div class="action_blocks">\
|
||||
</div>\
|
||||
@ -133,12 +134,49 @@ var aggregated_templates_tab_content =
|
||||
</tbody>\
|
||||
</table>';
|
||||
|
||||
var aggregated_clusters_tab_content =
|
||||
'<div class="action_blocks">\
|
||||
</div>\
|
||||
<table id="datatable_agg_clusters" class="display">\
|
||||
<thead>\
|
||||
<tr>\
|
||||
<th>Zone ID</th>\
|
||||
<th>Zone Name</th>\
|
||||
<th>ID</th>\
|
||||
<th>Name</th>\
|
||||
</tr>\
|
||||
</thead>\
|
||||
<tbody>\
|
||||
</tbody>\
|
||||
</table>';
|
||||
|
||||
var aggregated_datastores_tab_content =
|
||||
'<div class="action_blocks">\
|
||||
</div>\
|
||||
<table id="datatable_agg_datastores" class="display">\
|
||||
<thead>\
|
||||
<tr>\
|
||||
<th>Zone ID</th>\
|
||||
<th>Zone Name</th>\
|
||||
<th>ID</th>\
|
||||
<th>Owner</th>\
|
||||
<th>Group</th>\
|
||||
<th>Name</th>\
|
||||
<th>Cluster</th>\
|
||||
</tr>\
|
||||
</thead>\
|
||||
<tbody>\
|
||||
</tbody>\
|
||||
</table>';
|
||||
|
||||
var dataTable_agg_hosts;
|
||||
var dataTable_agg_vms;
|
||||
var dataTable_agg_vns;
|
||||
var dataTable_agg_images;
|
||||
var dataTable_agg_users;
|
||||
var dataTable_agg_templates;
|
||||
var dataTable_agg_cluters;
|
||||
var dataTable_agg_datastores;
|
||||
|
||||
var agg_actions = {
|
||||
"ZoneHosts.list" : {
|
||||
@ -177,6 +215,18 @@ var agg_actions = {
|
||||
callback: templatesListCB,
|
||||
error: onError
|
||||
},
|
||||
"ZoneClusters.list" : {
|
||||
type: "single",
|
||||
call: oZones.ZoneClusters.list,
|
||||
callback: clustersListCB,
|
||||
error: onError
|
||||
},
|
||||
"ZoneDatastores.list" : {
|
||||
type: "single",
|
||||
call: oZones.ZoneDatastores.list,
|
||||
callback: datastoresListCB,
|
||||
error: onError
|
||||
},
|
||||
"ZoneHosts.refresh" : {
|
||||
type: "custom",
|
||||
call: function() {
|
||||
@ -295,7 +345,47 @@ var agg_actions = {
|
||||
success: templatesListCB,
|
||||
error: onError})
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"ZoneClusters.refresh" : {
|
||||
type: "custom",
|
||||
call: function() {
|
||||
waitingNodes(dataTable_agg_clusters);
|
||||
Sunstone.runAction("ZoneClusters.list");
|
||||
},
|
||||
error: onError,
|
||||
notify: false
|
||||
},
|
||||
|
||||
"ZoneClusters.autorefresh" : {
|
||||
type: "custom",
|
||||
call: function() {
|
||||
oZones.ZoneClusters.list({
|
||||
timeout:true,
|
||||
success: clustersListCB,
|
||||
error: onError})
|
||||
}
|
||||
},
|
||||
|
||||
"ZoneDatastores.refresh" : {
|
||||
type: "custom",
|
||||
call: function() {
|
||||
waitingNodes(dataTable_agg_datastores);
|
||||
Sunstone.runAction("ZoneDatastores.list");
|
||||
},
|
||||
error: onError,
|
||||
notify: false
|
||||
},
|
||||
|
||||
"ZoneDatastores.autorefresh" : {
|
||||
type: "custom",
|
||||
call: function() {
|
||||
oZones.ZoneDatastores.list({
|
||||
timeout:true,
|
||||
success: datastoresListCB,
|
||||
error: onError})
|
||||
}
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
@ -347,6 +437,22 @@ var templates_buttons = {
|
||||
}
|
||||
};
|
||||
|
||||
var clusters_buttons = {
|
||||
"ZoneClusters.refresh" : {
|
||||
type: "image",
|
||||
text: "Refresh list",
|
||||
img: "images/Refresh-icon.png"
|
||||
}
|
||||
};
|
||||
|
||||
var datastores_buttons = {
|
||||
"ZoneDatastores.refresh" : {
|
||||
type: "image",
|
||||
text: "Refresh list",
|
||||
img: "images/Refresh-icon.png"
|
||||
}
|
||||
};
|
||||
|
||||
var hosts_tab = {
|
||||
title: "Hosts",
|
||||
content: aggregated_hosts_tab_content,
|
||||
@ -396,13 +502,32 @@ var templates_tab = {
|
||||
parentTab: "dashboard_tab"
|
||||
};
|
||||
|
||||
var clusters_tab = {
|
||||
title: "Clusters",
|
||||
content: aggregated_clusters_tab_content,
|
||||
buttons: clusters_buttons,
|
||||
tabClass: "subTab",
|
||||
parentTab: "dashboard_tab"
|
||||
};
|
||||
|
||||
var datastores_tab = {
|
||||
title: "Datastores",
|
||||
content: aggregated_datastores_tab_content,
|
||||
buttons: datastores_buttons,
|
||||
tabClass: "subTab",
|
||||
parentTab: "dashboard_tab"
|
||||
};
|
||||
|
||||
Sunstone.addActions(agg_actions);
|
||||
Sunstone.addMainTab("agg_hosts_tab",hosts_tab);
|
||||
Sunstone.addMainTab("agg_vms_tab",vms_tab);
|
||||
Sunstone.addMainTab("agg_vns_tab",vns_tab);
|
||||
Sunstone.addMainTab("agg_images_tab",images_tab);
|
||||
Sunstone.addMainTab("agg_users_tab",users_tab);
|
||||
Sunstone.addMainTab("agg_vms_tab",vms_tab);
|
||||
Sunstone.addMainTab("agg_templates_tab",templates_tab);
|
||||
Sunstone.addMainTab("agg_images_tab",images_tab);
|
||||
Sunstone.addMainTab("agg_clusters_tab",clusters_tab);
|
||||
Sunstone.addMainTab("agg_hosts_tab",hosts_tab);
|
||||
Sunstone.addMainTab("agg_datastores_tab",datastores_tab);
|
||||
Sunstone.addMainTab("agg_vns_tab",vns_tab);
|
||||
|
||||
|
||||
|
||||
function hostsListCB(req,list){
|
||||
@ -499,7 +624,39 @@ function templatesListCB(req,list){
|
||||
});
|
||||
|
||||
updateZonesDashboard("templates",total_templates);
|
||||
}
|
||||
};
|
||||
|
||||
function clustersListCB(req,list){
|
||||
dataTable_agg_clusters.fnClearTable();
|
||||
var total = [];
|
||||
$.each(list,function(){
|
||||
if (this.ZONE.error){
|
||||
notifyError(this.ZONE.error.message);
|
||||
return;
|
||||
};
|
||||
var json = oZones.Helper.pool("CLUSTER",this.ZONE);
|
||||
total = total.concat(json);
|
||||
updateClustersList(req,json,'#datatable_agg_clusters',this.ZONE.ID,this.ZONE.NAME);
|
||||
});
|
||||
|
||||
updateZonesDashboard("clusters",total);
|
||||
};
|
||||
|
||||
function datastoresListCB(req,list){
|
||||
dataTable_agg_datastores.fnClearTable();
|
||||
var total = [];
|
||||
$.each(list,function(){
|
||||
if (this.ZONE.error){
|
||||
notifyError(this.ZONE.error.message);
|
||||
return;
|
||||
};
|
||||
var json = oZones.Helper.pool("DATASTORE",this.ZONE);
|
||||
total = total.concat(json);
|
||||
updateDatastoresList(req,json,'#datatable_agg_datastores',this.ZONE.ID,this.ZONE.NAME);
|
||||
});
|
||||
|
||||
updateZonesDashboard("datastores",total);
|
||||
};
|
||||
|
||||
function setAutorefreshes(){
|
||||
setInterval(function(){
|
||||
@ -543,6 +700,20 @@ function setAutorefreshes(){
|
||||
Sunstone.runAction("ZoneTemplates.autorefresh");
|
||||
};
|
||||
},INTERVAL+someTime());
|
||||
|
||||
setInterval(function(){
|
||||
var filter = $('#datatable_agg_clusters_filter input').attr("value");
|
||||
if (!filter.length){
|
||||
Sunstone.runAction("ZoneClusters.autorefresh");
|
||||
};
|
||||
},INTERVAL+someTime());
|
||||
|
||||
setInterval(function(){
|
||||
var filter = $('#datatable_agg_datastores_filter input').attr("value");
|
||||
if (!filter.length){
|
||||
Sunstone.runAction("ZoneDatastores.autorefresh");
|
||||
};
|
||||
},INTERVAL+someTime());
|
||||
}
|
||||
|
||||
$(document).ready(function(){
|
||||
@ -556,10 +727,10 @@ $(document).ready(function(){
|
||||
"bAutoWidth":false,
|
||||
"sPaginationType": "full_numbers",
|
||||
"aoColumnDefs": [
|
||||
{ "sWidth": "60px", "aTargets": [4,7] },
|
||||
{ "sWidth": "60px", "aTargets": [5,8] },
|
||||
{ "sWidth": "35px", "aTargets": [0,2] },
|
||||
{ "sWidth": "160px", "aTargets": [5,6] },
|
||||
{ "sWidth": "100px", "aTargets": [1] }
|
||||
{ "sWidth": "160px", "aTargets": [6,7] },
|
||||
{ "sWidth": "100px", "aTargets": [1,4] }
|
||||
]
|
||||
});
|
||||
|
||||
@ -581,9 +752,9 @@ $(document).ready(function(){
|
||||
"bAutoWidth":false,
|
||||
"sPaginationType": "full_numbers",
|
||||
"aoColumnDefs": [
|
||||
{ "sWidth": "60px", "aTargets": [6,7,8] },
|
||||
{ "sWidth": "60px", "aTargets": [7,8,9] },
|
||||
{ "sWidth": "35px", "aTargets": [0,2] },
|
||||
{ "sWidth": "100px", "aTargets": [1,3,4] }
|
||||
{ "sWidth": "100px", "aTargets": [1,3,4,6] }
|
||||
]
|
||||
});
|
||||
|
||||
@ -621,12 +792,36 @@ $(document).ready(function(){
|
||||
]
|
||||
});
|
||||
|
||||
dataTable_agg_clusters = $('#datatable_agg_clusters').dataTable({
|
||||
"bJQueryUI": true,
|
||||
"bSortClasses": false,
|
||||
"sPaginationType": "full_numbers",
|
||||
"bAutoWidth":false,
|
||||
"aoColumnDefs": [
|
||||
{ "sWidth": "35px", "aTargets": [0,2] },
|
||||
{ "sWidth": "100px", "aTargets": [1] }
|
||||
]
|
||||
});
|
||||
|
||||
dataTable_agg_datastores = $('#datatable_agg_datastores').dataTable({
|
||||
"bJQueryUI": true,
|
||||
"bSortClasses": false,
|
||||
"sPaginationType": "full_numbers",
|
||||
"bAutoWidth":false,
|
||||
"aoColumnDefs": [
|
||||
{ "sWidth": "35px", "aTargets": [0,2] },
|
||||
{ "sWidth": "100px", "aTargets": [1,3,4,6] }
|
||||
]
|
||||
});
|
||||
|
||||
Sunstone.runAction("ZoneHosts.list");
|
||||
Sunstone.runAction("ZoneVMs.list");
|
||||
Sunstone.runAction("ZoneVNs.list");
|
||||
Sunstone.runAction("ZoneImages.list");
|
||||
Sunstone.runAction("ZoneUsers.list");
|
||||
Sunstone.runAction("ZoneTemplates.list");
|
||||
Sunstone.runAction("ZoneClusters.list");
|
||||
Sunstone.runAction("ZoneDatastores.list");
|
||||
|
||||
setAutorefreshes();
|
||||
});
|
||||
|
@ -55,7 +55,38 @@ var dashboard_tab_content =
|
||||
<tr>\
|
||||
<td>\
|
||||
<div class="panel">\
|
||||
<h3><a href="#aggregated_hosts_tab">Hosts</a>\
|
||||
<h3><a href="#agg_clusters_tab">Clusters</a>\
|
||||
</h3>\
|
||||
<div class="panel_info">\
|
||||
<table class="info_table">\
|
||||
<tr>\
|
||||
<td class="key_td">Total</td>\
|
||||
<td class="value_td"><span id="total_clusters"></span></td>\
|
||||
</tr>\
|
||||
</table>\
|
||||
</div>\
|
||||
</div>\
|
||||
</td>\
|
||||
<td>\
|
||||
<div class="panel">\
|
||||
<h3><a href="#agg_datastores_tab">Datastores</a>\
|
||||
</h3>\
|
||||
<div class="panel_info">\
|
||||
<table class="info_table">\
|
||||
<tr>\
|
||||
<td class="key_td">Total</td>\
|
||||
<td class="value_td"><span id="total_datastores"></span></td>\
|
||||
</tr>\
|
||||
</table>\
|
||||
</div>\
|
||||
</div>\
|
||||
</div>\
|
||||
</td>\
|
||||
</tr>\
|
||||
<tr>\
|
||||
<td>\
|
||||
<div class="panel">\
|
||||
<h3><a href="#agg_hosts_tab">Hosts</a>\
|
||||
</h3>\
|
||||
<div class="panel_info">\
|
||||
<table class="info_table">\
|
||||
@ -130,7 +161,7 @@ var dashboard_tab_content =
|
||||
<td>\
|
||||
<div class="panel">\
|
||||
<h3>\
|
||||
<a href="#images_tab">Images</a>\
|
||||
<a href="#agg_images_tab">Images</a>\
|
||||
</h3>\
|
||||
<div class="panel_info">\
|
||||
<table class="info_table">\
|
||||
@ -144,7 +175,7 @@ var dashboard_tab_content =
|
||||
</td>\
|
||||
<td class="oneadmin">\
|
||||
<div class="panel">\
|
||||
<h3><a href="#users_tab">Users</a>\
|
||||
<h3><a href="#agg_users_tab">Users</a>\
|
||||
</h3>\
|
||||
<div class="panel_info">\
|
||||
<table class="info_table">\
|
||||
@ -238,5 +269,13 @@ function updateZonesDashboard(what,json_info){
|
||||
var total_images=json_info.length;
|
||||
$('#total_images',db).html(total_images);
|
||||
break;
|
||||
}
|
||||
}
|
||||
case "clusters":
|
||||
var total_clusters=json_info.length;
|
||||
$('#total_clusters',db).html(total_clusters);
|
||||
break;
|
||||
case "datastores":
|
||||
var total_datastores=json_info.length;
|
||||
$('#total_datastores',db).html(total_datastores);
|
||||
break;
|
||||
};
|
||||
};
|
||||
|
@ -25,7 +25,10 @@ var vdcs_tab_content =
|
||||
<th>ID</th>\
|
||||
<th>Name</th>\
|
||||
<th>Zone ID</th>\
|
||||
<th>Cluster ID</th>\
|
||||
<th>Hosts</th>\
|
||||
<th>Virtual Networks</th>\
|
||||
<th>Datastores</th>\
|
||||
</tr>\
|
||||
</thead>\
|
||||
<tbody id="tbodyvdcs">\
|
||||
@ -47,17 +50,34 @@ var create_vdc_tmpl =
|
||||
<select id="zoneid" name="zone">\
|
||||
</select><br />\
|
||||
<div class="clear"></div>\
|
||||
<label for="vdc_force_hosts">VDC host sharing:</label>\
|
||||
<input type="checkbox" name="vdc_force_hosts" id="vdc_force_hosts" />\
|
||||
<div class="tip">Allows hosts belonging to other VDCs to be re-added to this one. They will appear greyed-out in the lists.</div>\
|
||||
<label for="clusterid">Cluster:</label>\
|
||||
<select id="clusterid">\
|
||||
</select><br />\
|
||||
<label for="vdc_force_hosts">VDC resource sharing:</label>\
|
||||
<input type="checkbox" name="vdc_force" id="vdc_force" />\
|
||||
<div class="tip">Allows hosts, Vnets, datastores belonging to other VDCs to be re-added to this one. They will appear greyed-out in the lists.</div>\
|
||||
<div class="clear"></div>\
|
||||
<label>Add resources:</label>\
|
||||
<label style="margin-left:265px;font-size:0.8em;color:#bbbbbb">Drag & Drop</label>\
|
||||
<label style="margin-left:243px;font-size:0.8em;color:#bbbbbb">Available / Selected</label><br />\
|
||||
<div class="clear"></div>\
|
||||
<label>Hosts:</label>\
|
||||
<div id="vdc_hosts_lists" class="dd_lists" style="width:250px">\
|
||||
<ul id="vdc_available_hosts_list" class="dd_list dd_left" style="width:115px"></ul>\
|
||||
<ul id="vdc_selected_hosts_list" class="dd_list dd_right" style="width:115px"></ul>\
|
||||
<label><a href="#" class="vdc_show_hide">Hosts<span class="inline_icon ui-icon ui-icon-triangle-1-s" /></a></label>\
|
||||
<div id="vdc_hosts_lists" class="dd_lists">\
|
||||
<ul id="vdc_available_hosts_list" class="dd_list dd_left"></ul>\
|
||||
<ul id="vdc_selected_hosts_list" class="dd_list dd_right"></ul>\
|
||||
</div>\
|
||||
<div class="clear"></div>\
|
||||
<label><a href="#" class="vdc_show_hide">Virtual Networks<span class="inline_icon ui-icon ui-icon-triangle-1-s" /></a></label>\
|
||||
<div id="vdc_vnets_lists" class="dd_lists">\
|
||||
<ul id="vdc_available_vnets_list" class="dd_list dd_left"></ul>\
|
||||
<ul id="vdc_selected_vnets_list" class="dd_list dd_right"></ul>\
|
||||
</div>\
|
||||
<div class="clear"></div>\
|
||||
<label><a href="#" class="vdc_show_hide">Datastores<span class="inline_icon ui-icon ui-icon-triangle-1-s" /></a></label>\
|
||||
<div id="vdc_datastores_lists" class="dd_lists">\
|
||||
<ul id="vdc_available_datastores_list" class="dd_list dd_left"></ul>\
|
||||
<ul id="vdc_selected_datastores_list" class="dd_list dd_right"></ul>\
|
||||
</div>\
|
||||
</div>\
|
||||
</fieldset>\
|
||||
<fieldset>\
|
||||
@ -72,20 +92,33 @@ var update_vdc_tmpl =
|
||||
'<form id="update_vdc_form" action="">\
|
||||
<fieldset>\
|
||||
<div>\
|
||||
<label for="vdc_update_id">Update hosts in:</label>\
|
||||
<label for="vdc_update_id">Update resources in:</label>\
|
||||
<select name="vdc_update_id" id="vdc_update_id">\
|
||||
</select>\
|
||||
<div class="clear"></div>\
|
||||
<label for="vdc_update_force_hosts">VDC host sharing:</label>\
|
||||
<input type="checkbox" name="vdc_update_force_hosts" id="vdc_update_force_hosts" />\
|
||||
<div class="tip">Allows hosts belonging to other VDCs to be re-added to this one. They will appear greyed-out in the list.</div>\
|
||||
<label for="vdc_update_force">VDC resource sharing:</label>\
|
||||
<input type="checkbox" name="vdc_update_force" id="vdc_update_force" />\
|
||||
<div class="tip">Allows hosts, Vnets belonging to other VDCs to be re-added to this one. They will appear greyed-out in the list.</div>\
|
||||
<div class="clear"></div>\
|
||||
<label style="margin-left:205px;font-size:0.8em;color:#bbbbbb">Drag & Drop</label>\
|
||||
<label style="margin-left:195px;font-size:0.8em;color:#bbbbbb">Available / Current</label>\
|
||||
<label>Hosts:</label>\
|
||||
<label style="margin-left:265px;font-size:0.8em;color:#bbbbbb">Drag & Drop</label>\
|
||||
<label style="margin-left:243px;font-size:0.8em;color:#bbbbbb">Available / Current</label>\
|
||||
<label><a href="#" class="vdc_show_hide">Hosts<span class="inline_icon ui-icon ui-icon-triangle-1-s" /></a></label>\
|
||||
<div id="vdc_update_hosts_lists" class="dd_lists">\
|
||||
<ul id="vdc_update_available_hosts_list" class="dd_list dd_left"></ul>\
|
||||
<ul id="vdc_update_selected_hosts_list" class="dd_list dd_right"></ul>\
|
||||
</div>\
|
||||
<div class="clear"></div>\
|
||||
<label><a href="#" class="vdc_show_hide">Virtual Networks<span class="inline_icon ui-icon ui-icon-triangle-1-s" /></a></label>\
|
||||
<div id="vdc_update_vnets_lists" class="dd_lists">\
|
||||
<ul id="vdc_update_available_vnets_list" class="dd_list dd_left"></ul>\
|
||||
<ul id="vdc_update_selected_vnets_list" class="dd_list dd_right"></ul>\
|
||||
</div>\
|
||||
<div class="clear"></div>\
|
||||
<label><a href="#" class="vdc_show_hide">Datastores<span class="inline_icon ui-icon ui-icon-triangle-1-s" /></a></label>\
|
||||
<div id="vdc_update_datastores_lists" class="dd_lists">\
|
||||
<ul id="vdc_update_available_datastores_list" class="dd_list dd_left"></ul>\
|
||||
<ul id="vdc_update_selected_datastores_list" class="dd_list dd_right"></ul>\
|
||||
</div>\
|
||||
</div>\
|
||||
</fieldset>\
|
||||
<fieldset>\
|
||||
@ -178,7 +211,46 @@ var vdc_actions = {
|
||||
call: oZones.Zone.host,
|
||||
callback: fillUpdateHostList,
|
||||
error: onError
|
||||
}
|
||||
},
|
||||
"VDC.zone_vnets" : {
|
||||
type: "single",
|
||||
call: oZones.Zone.vnet,
|
||||
callback: fillVNetList,
|
||||
error: onError
|
||||
},
|
||||
"VDC.update_zone_vnets" : {
|
||||
type: "single",
|
||||
call: oZones.Zone.vnet,
|
||||
callback: fillUpdateVNetList,
|
||||
error: onError
|
||||
},
|
||||
"VDC.zone_datastores" : {
|
||||
type: "single",
|
||||
call: oZones.Zone.datastore,
|
||||
callback: fillDatastoreList,
|
||||
error: onError
|
||||
},
|
||||
"VDC.update_zone_datastores" : {
|
||||
type: "single",
|
||||
call: oZones.Zone.datastore,
|
||||
callback: fillUpdateDatastoreList,
|
||||
error: onError
|
||||
},
|
||||
"VDC.zone_clusters" : {
|
||||
type: "single",
|
||||
call: oZones.Zone.cluster,
|
||||
callback: function(req, list_json){
|
||||
var options='<option value="">Please select</option>';
|
||||
options += '<option value="-">None</option>';
|
||||
$.each(list_json,function(){
|
||||
options += '<option value="'+this.CLUSTER.ID+'">'+this.CLUSTER.NAME+'</option>';
|
||||
});
|
||||
if (options)
|
||||
$('div#create_vdc_dialog select#clusterid').html(options);
|
||||
},
|
||||
error: onError
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
var vdc_buttons = {
|
||||
@ -194,13 +266,13 @@ var vdc_buttons = {
|
||||
},
|
||||
"VDC.update_dialog" : {
|
||||
type: "action",
|
||||
text: "Add/Remove hosts",
|
||||
text: "Update VDC resources",
|
||||
},
|
||||
"VDC.delete" : {
|
||||
type: "action",
|
||||
text: "Delete",
|
||||
type : "confirm",
|
||||
tip: "Careful! This will delete the selected VDCs and associated resources"
|
||||
tip: "Careful! This will delete the selected VDCs"
|
||||
}
|
||||
};
|
||||
|
||||
@ -229,7 +301,10 @@ function vdcElementArray(vdc_json){
|
||||
vdc.ID,
|
||||
vdc.NAME,
|
||||
vdc.ZONES_ID,
|
||||
vdc.HOSTS ? vdc.HOSTS : "none"
|
||||
vdc.CLUSTER_ID,
|
||||
vdc.RESOURCES.HOSTS.length ? vdc.RESOURCES.HOSTS.join() : "none",
|
||||
vdc.RESOURCES.NETWORKS.length ? vdc.RESOURCES.NETWORKS.join() : "none",
|
||||
vdc.RESOURCES.DATASTORES.length ? vdc.RESOURCES.DATASTORES.join() : "none",
|
||||
];
|
||||
}
|
||||
|
||||
@ -312,9 +387,21 @@ function updateVDCInfo(req,vdc_json){
|
||||
<td class="key_td">Zone ID</td>\
|
||||
<td class="value_td">'+vdc.ZONES_ID+'</td>\
|
||||
</tr>\
|
||||
<tr>\
|
||||
<td class="key_td">Cluster ID</td>\
|
||||
<td class="value_td">'+vdc.CLUSTER_ID+'</td>\
|
||||
</tr>\
|
||||
<tr>\
|
||||
<td class="key_td">Hosts</td>\
|
||||
<td class="value_td">'+(vdc.HOSTS? vdc.HOSTS : "none")+'</td>\
|
||||
<td class="value_td">'+(vdc.RESOURCES.HOSTS.length? vdc.RESOURCES.HOSTS.join() : "none")+'</td>\
|
||||
</tr>\
|
||||
<tr>\
|
||||
<td class="key_td">Virtual Networks</td>\
|
||||
<td class="value_td">'+(vdc.RESOURCES.NETWORKS.length? vdc.RESOURCES.NETWORKS.join() : "none")+'</td>\
|
||||
</tr>\
|
||||
<tr>\
|
||||
<td class="key_td">Datastores</td>\
|
||||
<td class="value_td">'+(vdc.RESOURCES.DATASTORES.length? vdc.RESOURCES.DATASTORES.join() : "none")+'</td>\
|
||||
</tr>\
|
||||
<tr>\
|
||||
<td class="key_td">Admin name</td>\
|
||||
@ -326,7 +413,7 @@ function updateVDCInfo(req,vdc_json){
|
||||
</tr>\
|
||||
<tr>\
|
||||
<td class="key_td">ACLs</td>\
|
||||
<td class="value_td">'+vdc.ACLS+'</td>\
|
||||
<td class="value_td">'+(vdc.RESOURCES.ACLS.length ? vdc.RESOURCES.ACLS.join() : "none") +'</td>\
|
||||
</tr>\
|
||||
<tr>\
|
||||
<td class="key_td">Sunstone public link</td>\
|
||||
@ -350,89 +437,140 @@ function updateVDCInfo(req,vdc_json){
|
||||
setTimeout(function(){
|
||||
$('#vdc_info_panel input#one_xmlrpc').select();
|
||||
}, 700);
|
||||
}
|
||||
};
|
||||
|
||||
function fillHostList(req, host_list_json){
|
||||
function inCluster(resCluster, selCluster){
|
||||
if (selCluster == "-")//cluster none
|
||||
return resCluster == "-1";
|
||||
else return resCluster == selCluster;
|
||||
};
|
||||
|
||||
function fillList(res, req, list_json){
|
||||
var list = "";
|
||||
var force = $('div#create_vdc_dialog #vdc_force_hosts:checked').length ?
|
||||
true : false;
|
||||
var dialog = $('div#create_vdc_dialog');
|
||||
var force = $('#vdc_force',dialog).is(':checked');
|
||||
var cluster = $('select#clusterid',dialog).val();
|
||||
var zone_id = req.request.data[0];
|
||||
var free;
|
||||
|
||||
$.each(host_list_json,function(){
|
||||
free = isHostFree(this.HOST.ID,zone_id);
|
||||
$.each(list_json,function(){
|
||||
var id = this[res.toUpperCase()].ID;
|
||||
var name = this[res.toUpperCase()].NAME;
|
||||
if (!inCluster(this[res.toUpperCase()].CLUSTER_ID,cluster))
|
||||
return true; //continue
|
||||
free = isResourceFree(res,id,zone_id);
|
||||
|
||||
if (force || free){
|
||||
list+='<li host_id="'+this.HOST.ID+'">'+(free? this.HOST.NAME : '<span style="color:Grey;">'+this.HOST.NAME+'</span>')+'</li>';
|
||||
}
|
||||
list+='<li '+res+'_id="'+id+'">'+(free ? name : '<span style="color:Grey;">'+name+'</span>')+'</li>';
|
||||
};
|
||||
});
|
||||
$('div#create_vdc_dialog #vdc_available_hosts_list').html(list);
|
||||
}
|
||||
$('#vdc_available_'+res+'s_list',dialog).html(list);
|
||||
};
|
||||
|
||||
function fillHostList(req, list_json){
|
||||
fillList("host",req,list_json);
|
||||
};
|
||||
|
||||
function fillVNetList(req, list_json){
|
||||
fillList("vnet",req,list_json);
|
||||
};
|
||||
|
||||
function fillDatastoreList(req, list_json){
|
||||
fillList("datastore",req,list_json);
|
||||
};
|
||||
|
||||
//returns if resource with id is from a certain VDC
|
||||
function isResourceMine(resource,id,vdc_id){
|
||||
var column;
|
||||
switch (resource){
|
||||
case "host": column = 5; break;
|
||||
case "vnet" : column = 6; break;
|
||||
case "datastore" : column = 7; break;
|
||||
default: return false;
|
||||
};
|
||||
|
||||
//return the array of hosts
|
||||
function isHostMine(host_id,vdc_id){
|
||||
//locate myself
|
||||
var vdcs = dataTable_vdcs.fnGetData();
|
||||
var my_hosts=null;
|
||||
var my_resources=[];
|
||||
for (var i=0; i < vdcs.length; i++){
|
||||
if (vdcs[i][1]==vdc_id){
|
||||
my_hosts = vdcs[i][4].split(',');
|
||||
if (vdcs[i][column] != "none")
|
||||
my_resources = vdcs[i][column].split(',');
|
||||
break;
|
||||
}
|
||||
};
|
||||
};
|
||||
if (!my_hosts) return false;
|
||||
return $.inArray(host_id,my_hosts) >= 0;
|
||||
}
|
||||
return $.inArray(id,my_resources) >= 0;
|
||||
};
|
||||
|
||||
function fillUpdateHostList(req, host_list_json){
|
||||
function fillUpdateList(res, req, list_json){
|
||||
var list = "";
|
||||
var list_mine = "";
|
||||
var vdc_id = $('#vdc_update_id',$update_vdc_dialog).val();
|
||||
var force = $('#vdc_update_force_hosts:checked',$update_vdc_dialog).length ?
|
||||
true : false;
|
||||
var force = $('#vdc_update_force',$update_vdc_dialog).is(':checked');
|
||||
var cluster = dataTable_vdcs.fnGetData($('#vdc_'+vdc_id, dataTable_vdcs.fnGetNodes()).parents('tr')[0])[4];
|
||||
|
||||
var zone_id = req.request.data[0];
|
||||
var free,li;
|
||||
|
||||
$.each(host_list_json,function(){
|
||||
$.each(list_json,function(){
|
||||
//if mine, put in mine_list
|
||||
if (isHostMine(this.HOST.ID,vdc_id)){
|
||||
list_mine+='<li host_id="'+this.HOST.ID+'">'+this.HOST.NAME+'</li>';
|
||||
var id = this[res.toUpperCase()].ID;
|
||||
var name = this[res.toUpperCase()].NAME;
|
||||
if (!inCluster(this[res.toUpperCase()].CLUSTER_ID,cluster))
|
||||
return true; //continue
|
||||
}
|
||||
|
||||
if (isResourceMine(res,id,vdc_id)){
|
||||
list_mine+='<li '+res+'_id="'+id+'">'+name+'</li>';
|
||||
return true; //continue
|
||||
};
|
||||
//otherwise, check if its free etc...
|
||||
free = isHostFree(this.HOST.ID,zone_id);
|
||||
free = isResourceFree(res,id,zone_id);
|
||||
|
||||
if (force || free){
|
||||
list+='<li host_id="'+this.HOST.ID+'">'+(free? this.HOST.NAME : '<span style="color:Grey;">'+this.HOST.NAME+'</span>')+'</li>';
|
||||
list+='<li '+res+'_id="'+id+'">'+(free? name : '<span style="color:Grey;">'+name+'</span>')+'</li>';
|
||||
}
|
||||
});
|
||||
|
||||
$('#vdc_update_available_'+res+'s_list', $update_vdc_dialog).html(list);
|
||||
$('#vdc_update_selected_'+res+'s_list', $update_vdc_dialog).html(list_mine);
|
||||
};
|
||||
|
||||
function fillUpdateHostList(req, list_json){
|
||||
fillUpdateList("host", req, list_json);
|
||||
};
|
||||
function fillUpdateVNetList(req, list_json){
|
||||
fillUpdateList("vnet", req, list_json);
|
||||
};
|
||||
function fillUpdateDatastoreList(req, list_json){
|
||||
fillUpdateList("datastore", req, list_json);
|
||||
};
|
||||
|
||||
$('#vdc_update_available_hosts_list',$update_vdc_dialog).html(list);
|
||||
$('#vdc_update_selected_hosts_list',$update_vdc_dialog).html(list_mine);
|
||||
|
||||
}
|
||||
|
||||
function isHostFree(id,zone_id){//strings
|
||||
function isResourceFree(res, id, zone_id){//id, zone_id strings
|
||||
var column;
|
||||
switch (res){
|
||||
case "host": column = 5; break;
|
||||
case "vnet": column = 6; break;
|
||||
case "datastore": column = 7; break;
|
||||
};
|
||||
var data = dataTable_vdcs.fnGetData();
|
||||
var result = true;
|
||||
var hosts;
|
||||
var resources;
|
||||
for (var i=0; i<data.length; i++){
|
||||
//this vdc is not in the interesting zone:
|
||||
if (data[i][3] != zone_id) continue;
|
||||
|
||||
//note it is an array of strings
|
||||
hosts = data[i][4].split(',');
|
||||
resources = [];
|
||||
if (data[i][column] != "none")
|
||||
resources = data[i][column].split(',');
|
||||
|
||||
if ($.inArray(id,hosts) >= 0){
|
||||
if ($.inArray(id,resources) >= 0){
|
||||
result = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
function setupCreateVDCDialog(){
|
||||
$('div#dialogs').append('<div title="Create VDC" id="create_vdc_dialog"></div>');
|
||||
@ -448,6 +586,12 @@ function setupCreateVDCDialog(){
|
||||
width: 500
|
||||
});
|
||||
|
||||
$('div#vdc_hosts_lists,div#vdc_vnets_lists,div#vdc_datastores_lists',dialog).hide();
|
||||
$('.vdc_show_hide',dialog).click(function(){
|
||||
$('span',this).toggleClass('ui-icon-triangle-1-s ui-icon-triangle-1-n');
|
||||
$(this).parent().next().toggle();
|
||||
});
|
||||
|
||||
$('button',dialog).button();
|
||||
$('#vdc_available_hosts_list',dialog).sortable({
|
||||
connectWith : '#vdc_selected_hosts_list',
|
||||
@ -457,58 +601,118 @@ function setupCreateVDCDialog(){
|
||||
connectWith : '#vdc_available_hosts_list',
|
||||
containment: dialog
|
||||
});
|
||||
$('#vdc_available_vnets_list',dialog).sortable({
|
||||
connectWith : '#vdc_selected_vnets_list',
|
||||
containment: dialog
|
||||
});
|
||||
$('#vdc_selected_vnets_list',dialog).sortable({
|
||||
connectWith : '#vdc_available_vnets_list',
|
||||
containment: dialog
|
||||
});
|
||||
$('#vdc_available_datastores_list',dialog).sortable({
|
||||
connectWith : '#vdc_selected_datastores_list',
|
||||
containment: dialog
|
||||
});
|
||||
$('#vdc_selected_datastores_list',dialog).sortable({
|
||||
connectWith : '#vdc_available_datastores_list',
|
||||
containment: dialog
|
||||
});
|
||||
|
||||
$('input#vdc_force_hosts',dialog).change(function(){
|
||||
select = $('select#zoneid',$('#create_vdc_dialog'));
|
||||
$('input#vdc_force',dialog).change(function(){
|
||||
select = $('div#create_vdc_dialog select#clusterid');
|
||||
if (select.val().length){
|
||||
select.trigger("change");
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
//load zone hosts
|
||||
$('select#zoneid').change(function(){
|
||||
$('select#zoneid',dialog).change(function(){
|
||||
var id=$(this).val();
|
||||
if (!id) {
|
||||
$('select#clusterid').html('<option value="">Select zone</option>');
|
||||
$('select#clusterid').trigger('change');
|
||||
return true;
|
||||
};
|
||||
$('select#clusterid').html('<option value="">Loading...</option>');
|
||||
$('select#clusterid').trigger('change');
|
||||
Sunstone.runAction("VDC.zone_clusters",id);
|
||||
});
|
||||
|
||||
$('select#clusterid',dialog).change(function(){
|
||||
var context = $('div#create_vdc_dialog');
|
||||
var id=$('select#zoneid',context).val();
|
||||
var clusterid=$(this).val();
|
||||
var av_hosts=
|
||||
$('div#create_vdc_dialog #vdc_available_hosts_list');
|
||||
$('#vdc_available_hosts_list', context);
|
||||
var sel_hosts=
|
||||
$('div#create_vdc_dialog #vdc_selected_hosts_list');
|
||||
if (!id.length){
|
||||
$('#vdc_selected_hosts_list', context);
|
||||
var av_vnets=
|
||||
$('#vdc_available_vnets_list', context);
|
||||
var sel_vnets=
|
||||
$('#vdc_selected_vnets_list', context);
|
||||
var av_datastores=
|
||||
$('#vdc_available_datastores_list', context);
|
||||
var sel_datastores=
|
||||
$('#vdc_selected_datastores_list', context);
|
||||
|
||||
if (!clusterid){
|
||||
av_hosts.empty();
|
||||
sel_hosts.empty();
|
||||
av_vnets.empty();
|
||||
sel_vnets.empty();
|
||||
av_datastores.empty();
|
||||
sel_datastores.empty();
|
||||
return true;
|
||||
}
|
||||
av_hosts.html('<li>'+spinner+'</li>');
|
||||
av_vnets.html('<li>'+spinner+'</li>');
|
||||
av_datastores.html('<li>'+spinner+'</li>');
|
||||
sel_hosts.empty();
|
||||
sel_vnets.empty();
|
||||
sel_datastores.empty();
|
||||
Sunstone.runAction("VDC.zone_hosts",id);
|
||||
Sunstone.runAction("VDC.zone_vnets",id);
|
||||
Sunstone.runAction("VDC.zone_datastores",id);
|
||||
});
|
||||
|
||||
$('#create_vdc_form', dialog).submit(function(){
|
||||
var name = $('#name',$(this)).val();
|
||||
var vdcadminname = $('#vdcadminname',$(this)).val();
|
||||
var vdcadminpass = $('#vdcadminpass',$(this)).val();
|
||||
var zoneid = $('select#zoneid',$(this)).val();
|
||||
var force = $('#vdc_force_hosts:checked',$(this)).length ? "yes" : "please no";
|
||||
if (!name.length || !vdcadminname.length
|
||||
|| !vdcadminpass.length || !zoneid.length){
|
||||
notifyError("Name, administrator credentials or zone are missing");
|
||||
var name = $('#name',this).val();
|
||||
var vdcadminname = $('#vdcadminname',this).val();
|
||||
var vdcadminpass = $('#vdcadminpass',this).val();
|
||||
var zoneid = $('select#zoneid',this).val();
|
||||
var clusterid = $('select#clusterid',this).val();
|
||||
var force = $('#vdc_force',this).is(':checked') ? "yes" : "please no";
|
||||
if (!name || !vdcadminname
|
||||
|| !vdcadminpass || !zoneid || !clusterid){
|
||||
notifyError("Name, administrator, credentials, zone and cluster are mandatory parameters");
|
||||
return false;
|
||||
}
|
||||
var hosts="";
|
||||
var hosts=[];
|
||||
$('#vdc_selected_hosts_list li',$(this)).each(function(){
|
||||
hosts+=$(this).attr("host_id")+',';
|
||||
hosts.push($(this).attr("host_id"));
|
||||
});
|
||||
var vnets=[];
|
||||
$('#vdc_selected_vnets_list li',$(this)).each(function(){
|
||||
vnets.push($(this).attr("vnet_id"));
|
||||
});
|
||||
var datastores=[];
|
||||
$('#vdc_selected_datastores_list li',$(this)).each(function(){
|
||||
datastores.push($(this).attr("datastore_id"));
|
||||
});
|
||||
if (hosts.length){
|
||||
hosts= hosts.slice(0,-1);
|
||||
};
|
||||
|
||||
var vdc_json = {
|
||||
"VDC" : {
|
||||
"NAME" : name,
|
||||
"ZONEID" : zoneid,
|
||||
"ZONE_ID" : zoneid,
|
||||
"VDCADMINNAME" : vdcadminname,
|
||||
"VDCADMINPASS" : vdcadminpass,
|
||||
"FORCE" : force,
|
||||
"HOSTS" : hosts
|
||||
"CLUSTER_ID" : clusterid,
|
||||
"RESOURCES" : {
|
||||
"HOSTS" : hosts,
|
||||
"DATASTORES" : datastores,
|
||||
"NETWORKS" : vnets,
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
@ -516,7 +720,7 @@ function setupCreateVDCDialog(){
|
||||
dialog.dialog('close');
|
||||
return false;
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
function openCreateVDCDialog(){
|
||||
var dialog = $('div#create_vdc_dialog')
|
||||
@ -526,8 +730,6 @@ function openCreateVDCDialog(){
|
||||
};
|
||||
$('select#zoneid',dialog).html(zones_select);
|
||||
$('select#zoneid',dialog).trigger("change");
|
||||
$('#vdc_available_hosts_list',dialog).empty();
|
||||
$('#vdc_selected_hosts_list',dialog).empty();
|
||||
dialog.dialog('open');
|
||||
}
|
||||
|
||||
@ -539,7 +741,13 @@ function setupUpdateVDCDialog(){
|
||||
dialog.dialog({
|
||||
autoOpen: false,
|
||||
modal: true,
|
||||
width: 420
|
||||
width: 500
|
||||
});
|
||||
|
||||
$('div#vdc_update_hosts_lists,div#vdc_update_vnets_lists,div#vdc_update_datastores_lists',dialog).hide();
|
||||
$('.vdc_show_hide',dialog).click(function(){
|
||||
$('span',this).toggleClass('ui-icon-triangle-1-s ui-icon-triangle-1-n');
|
||||
$(this).parent().next().toggle();
|
||||
});
|
||||
|
||||
$('button',dialog).button();
|
||||
@ -551,8 +759,24 @@ function setupUpdateVDCDialog(){
|
||||
connectWith : '#vdc_update_available_hosts_list',
|
||||
containment: dialog
|
||||
});
|
||||
$('#vdc_update_available_vnets_list',dialog).sortable({
|
||||
connectWith : '#vdc_update_selected_vnets_list',
|
||||
containment: dialog
|
||||
});
|
||||
$('#vdc_update_selected_vnets_list',dialog).sortable({
|
||||
connectWith : '#vdc_update_available_vnets_list',
|
||||
containment: dialog
|
||||
});
|
||||
$('#vdc_update_available_datastores_list',dialog).sortable({
|
||||
connectWith : '#vdc_update_selected_datastores_list',
|
||||
containment: dialog
|
||||
});
|
||||
$('#vdc_update_selected_datastores_list',dialog).sortable({
|
||||
connectWith : '#vdc_update_available_datastores_list',
|
||||
containment: dialog
|
||||
});
|
||||
|
||||
$('#vdc_update_force_hosts',dialog).change(function(){
|
||||
$('#vdc_update_force',dialog).change(function(){
|
||||
select = $('select#vdc_update_id',$update_vdc_dialog);
|
||||
if (select.val().length){
|
||||
select.trigger("change");
|
||||
@ -566,10 +790,22 @@ function setupUpdateVDCDialog(){
|
||||
$('#vdc_update_available_hosts_list',$update_vdc_dialog);
|
||||
var sel_hosts=
|
||||
$('#vdc_update_selected_hosts_list',$update_vdc_dialog);
|
||||
var av_vnets=
|
||||
$('#vdc_update_available_vnets_list',$update_vdc_dialog);
|
||||
var sel_vnets=
|
||||
$('#vdc_update_selected_vnets_list',$update_vdc_dialog);
|
||||
var av_datastores=
|
||||
$('#vdc_update_available_datastores_list',$update_vdc_dialog);
|
||||
var sel_datastores=
|
||||
$('#vdc_update_selected_datastores_list',$update_vdc_dialog);
|
||||
|
||||
if (!id || !id.length) {
|
||||
if (!id) {
|
||||
av_hosts.empty();
|
||||
sel_hosts.empty();
|
||||
av_vnets.empty();
|
||||
sel_vnets.empty();
|
||||
av_datastores.empty();
|
||||
sel_datastores.empty();
|
||||
return true;
|
||||
};
|
||||
//A VDC has been selected
|
||||
@ -577,32 +813,44 @@ function setupUpdateVDCDialog(){
|
||||
//move current hosts to current
|
||||
av_hosts.html('<li>'+spinner+'</li>');
|
||||
sel_hosts.empty();
|
||||
av_vnets.html('<li>'+spinner+'</li>');
|
||||
sel_vnets.empty();
|
||||
av_datastores.html('<li>'+spinner+'</li>');
|
||||
sel_datastores.empty();
|
||||
Sunstone.runAction("VDC.update_zone_hosts",zone_id);
|
||||
Sunstone.runAction("VDC.update_zone_vnets",zone_id);
|
||||
Sunstone.runAction("VDC.update_zone_datastores",zone_id);
|
||||
});
|
||||
|
||||
$('#update_vdc_form').submit(function(){
|
||||
var force = $('#vdc_update_force_hosts',this).length ? "yes" : "nein";
|
||||
var force = $('#vdc_update_force',this).length ? "yes" : "nein";
|
||||
var id = $('#vdc_update_id',this).val();
|
||||
|
||||
var hosts="";
|
||||
var hosts=[];
|
||||
$('#vdc_update_selected_hosts_list li',this).each(function(){
|
||||
hosts+=$(this).attr("host_id")+',';
|
||||
hosts.push($(this).attr("host_id"));
|
||||
});
|
||||
var vnets=[];
|
||||
$('#vdc_update_selected_vnets_list li',this).each(function(){
|
||||
vnets.push($(this).attr("vnet_id"));
|
||||
});
|
||||
var datastores=[];
|
||||
$('#vdc_update_selected_datastores_list li',this).each(function(){
|
||||
datastores.push($(this).attr("datastore_id"));
|
||||
});
|
||||
if (hosts.length){
|
||||
hosts= hosts.slice(0,-1);
|
||||
};
|
||||
|
||||
var vdc_json = {
|
||||
"VDC" : {
|
||||
"ID": id,
|
||||
"FORCE": force,
|
||||
"HOSTS": ""
|
||||
}
|
||||
"RESOURCES": {
|
||||
"HOSTS": hosts,
|
||||
"NETWORKS": vnets,
|
||||
"DATASTORES": datastores,
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
if (hosts.length){
|
||||
vdc_json["VDC"]["HOSTS"]=hosts;
|
||||
};
|
||||
Sunstone.runAction("VDC.update",id,vdc_json);
|
||||
dialog.dialog('close');
|
||||
return false;
|
||||
@ -630,6 +878,10 @@ function openUpdateVDCDialog(){
|
||||
|
||||
$('#vdc_update_available_hosts_list',dialog).empty();
|
||||
$('#vdc_update_selected_hosts_list',dialog).empty();
|
||||
$('#vdc_update_available_vnets_list',dialog).empty();
|
||||
$('#vdc_update_selected_vnets_list',dialog).empty();
|
||||
$('#vdc_update_available_datastores_list',dialog).empty();
|
||||
$('#vdc_update_selected_datastores_list',dialog).empty();
|
||||
|
||||
$('select#vdc_update_id',dialog).html(options);
|
||||
if (selected_elems.length == 1){
|
||||
@ -663,13 +915,13 @@ $(document).ready(function(){
|
||||
"aoColumnDefs": [
|
||||
{ "bSortable": false, "aTargets": ["check"] },
|
||||
{ "sWidth": "60px", "aTargets": [0] },
|
||||
{ "sWidth": "150px", "aTargets": [4] },
|
||||
{ "sWidth": "35px", "aTargets": [1,3] }
|
||||
{ "sWidth": "150px", "aTargets": [5,6,7] },
|
||||
{ "sWidth": "35px", "aTargets": [1,3,4] }
|
||||
]
|
||||
});
|
||||
|
||||
dataTable_vdcs.fnClearTable();
|
||||
addElement([spinner,'','','',''],dataTable_vdcs);
|
||||
addElement([spinner,'','','','','','',''],dataTable_vdcs);
|
||||
Sunstone.runAction("VDC.list");
|
||||
|
||||
setupCreateVDCDialog();
|
||||
|
@ -178,7 +178,23 @@ var zone_actions = {
|
||||
updateUsersList(req,user_json,'#datatable_zone_users');
|
||||
},
|
||||
error: onError
|
||||
}
|
||||
},
|
||||
"Zone.cluster" : {
|
||||
type: "single",
|
||||
call: oZones.Zone.cluster,
|
||||
callback: function(req,json){
|
||||
updateClustersList(req,json,'#datatable_zone_clusters');
|
||||
},
|
||||
error: onError
|
||||
},
|
||||
"Zone.datastore" : {
|
||||
type: "single",
|
||||
call: oZones.Zone.datastore,
|
||||
callback: function(req,json){
|
||||
updateDatastoresList(req,json,'#datatable_zone_datastores');
|
||||
},
|
||||
error: onError
|
||||
},
|
||||
}
|
||||
|
||||
var zone_buttons = {
|
||||
@ -210,26 +226,38 @@ var zone_info_panel = {
|
||||
title : "Zone Information",
|
||||
content : ""
|
||||
},
|
||||
"zone_hosts_tab" : {
|
||||
title : "Hosts",
|
||||
content : ""
|
||||
},
|
||||
"zone_templates_tab" : {
|
||||
title : "Templates",
|
||||
"zone_users_tab" : {
|
||||
title : "Users",
|
||||
content : ""
|
||||
},
|
||||
"zone_vms_tab" : {
|
||||
title : "Virtual Machines",
|
||||
content : ""
|
||||
},
|
||||
"zone_vnets_tab" : {
|
||||
title : "Virtual Networks",
|
||||
"zone_templates_tab" : {
|
||||
title : "Templates",
|
||||
content : ""
|
||||
},
|
||||
"zone_images_tab" : {
|
||||
title : "Images",
|
||||
content : ""
|
||||
}
|
||||
},
|
||||
"zone_clusters_tab" : {
|
||||
title : "Clusters",
|
||||
content : ""
|
||||
},
|
||||
"zone_hosts_tab" : {
|
||||
title : "Hosts",
|
||||
content : ""
|
||||
},
|
||||
"zone_datastores_tab" : {
|
||||
title : "Datastores",
|
||||
content : ""
|
||||
},
|
||||
"zone_vnets_tab" : {
|
||||
title : "Virtual Networks",
|
||||
content : ""
|
||||
},
|
||||
};
|
||||
|
||||
Sunstone.addActions(zone_actions);
|
||||
@ -339,6 +367,7 @@ function updateZoneInfo(req,zone_json){
|
||||
<tr>\
|
||||
<th>ID</th>\
|
||||
<th>Name</th>\
|
||||
<th>Cluster</th>\
|
||||
<th>Running VMs</th>\
|
||||
<th>CPU Use</th>\
|
||||
<th>Memory use</th>\
|
||||
@ -384,6 +413,7 @@ function updateZoneInfo(req,zone_json){
|
||||
<th>CPU</th>\
|
||||
<th>Memory</th>\
|
||||
<th>Hostname</th>\
|
||||
<th>IPs</th>\
|
||||
<th>Start Time</th>\
|
||||
</tr>\
|
||||
</thead>\
|
||||
@ -403,6 +433,7 @@ function updateZoneInfo(req,zone_json){
|
||||
<th>Owner</th>\
|
||||
<th>Group</th>\
|
||||
<th>Name</th>\
|
||||
<th>Cluster</th>\
|
||||
<th>Type</th>\
|
||||
<th>Bridge</th>\
|
||||
<th>Total Leases</th>\
|
||||
@ -453,6 +484,43 @@ function updateZoneInfo(req,zone_json){
|
||||
</div>'
|
||||
};
|
||||
|
||||
var clusters_tab = {
|
||||
title: "Clusters",
|
||||
content:
|
||||
'<div style="padding: 10px 10px;">\
|
||||
<table id="datatable_zone_clusters" class="display">\
|
||||
<thead>\
|
||||
<tr>\
|
||||
<th>ID</th>\
|
||||
<th>Name</th>\
|
||||
</tr>\
|
||||
</thead>\
|
||||
<tbody>\
|
||||
</tbody>\
|
||||
</table>\
|
||||
</div>'
|
||||
};
|
||||
|
||||
var datastores_tab = {
|
||||
title: "Datastores",
|
||||
content:
|
||||
'<div style="padding: 10px 10px;">\
|
||||
<table id="datatable_zone_datastores" class="display">\
|
||||
<thead>\
|
||||
<tr>\
|
||||
<th>ID</th>\
|
||||
<th>Owner</th>\
|
||||
<th>Group</th>\
|
||||
<th>Name</th>\
|
||||
<th>Cluster</th>\
|
||||
</tr>\
|
||||
</thead>\
|
||||
<tbody>\
|
||||
</tbody>\
|
||||
</table>\
|
||||
</div>'
|
||||
};
|
||||
|
||||
Sunstone.updateInfoPanelTab("zone_info_panel","zone_info_tab",info_tab);
|
||||
Sunstone.updateInfoPanelTab("zone_info_panel","zone_hosts_tab",hosts_tab);
|
||||
Sunstone.updateInfoPanelTab("zone_info_panel","zone_templates_tab",templates_tab);
|
||||
@ -460,6 +528,8 @@ function updateZoneInfo(req,zone_json){
|
||||
Sunstone.updateInfoPanelTab("zone_info_panel","zone_vnets_tab",vnets_tab);
|
||||
Sunstone.updateInfoPanelTab("zone_info_panel","zone_images_tab",images_tab);
|
||||
Sunstone.updateInfoPanelTab("zone_info_panel","zone_users_tab",users_tab);
|
||||
Sunstone.updateInfoPanelTab("zone_info_panel","zone_clusters_tab",clusters_tab);
|
||||
Sunstone.updateInfoPanelTab("zone_info_panel","zone_datastores_tab",datastores_tab);
|
||||
|
||||
//Pop up the info we have now.
|
||||
Sunstone.popUpInfoPanel("zone_info_panel");
|
||||
@ -472,9 +542,10 @@ function updateZoneInfo(req,zone_json){
|
||||
"bAutoWidth":false,
|
||||
"sPaginationType": "full_numbers",
|
||||
"aoColumnDefs": [
|
||||
{ "sWidth": "60px", "aTargets": [2,5] },
|
||||
{ "sWidth": "60px", "aTargets": [3,6] },
|
||||
{ "sWidth": "100px", "aTargets": [2] },
|
||||
{ "sWidth": "35px", "aTargets": [0] },
|
||||
{ "sWidth": "200px", "aTargets": [3,4] }
|
||||
{ "sWidth": "200px", "aTargets": [4,5] }
|
||||
]
|
||||
});
|
||||
|
||||
@ -497,9 +568,9 @@ function updateZoneInfo(req,zone_json){
|
||||
"bAutoWidth":false,
|
||||
"sPaginationType": "full_numbers",
|
||||
"aoColumnDefs": [
|
||||
{ "sWidth": "60px", "aTargets": [4,5,6] },
|
||||
{ "sWidth": "60px", "aTargets": [5,6,7] },
|
||||
{ "sWidth": "35px", "aTargets": [0] },
|
||||
{ "sWidth": "100px", "aTargets": [1,2] }
|
||||
{ "sWidth": "100px", "aTargets": [1,2,4] }
|
||||
]
|
||||
});
|
||||
|
||||
@ -536,6 +607,26 @@ function updateZoneInfo(req,zone_json){
|
||||
]
|
||||
});
|
||||
|
||||
$('#datatable_zone_clusters').dataTable({
|
||||
"bJQueryUI": true,
|
||||
"bSortClasses": false,
|
||||
"bAutoWidth":false,
|
||||
"sPaginationType": "full_numbers",
|
||||
"aoColumnDefs": [
|
||||
{ "sWidth": "35px", "aTargets": [0] },
|
||||
]
|
||||
});
|
||||
|
||||
$('#datatable_zone_datastores').dataTable({
|
||||
"bJQueryUI": true,
|
||||
"bSortClasses": false,
|
||||
"bAutoWidth":false,
|
||||
"sPaginationType": "full_numbers",
|
||||
"aoColumnDefs": [
|
||||
{ "sWidth": "35px", "aTargets": [0] },
|
||||
{ "sWidth": "100px", "aTargets": [1,2,4] }
|
||||
]
|
||||
});
|
||||
|
||||
/*End init dataTables*/
|
||||
|
||||
@ -546,6 +637,8 @@ function updateZoneInfo(req,zone_json){
|
||||
Sunstone.runAction("Zone.vnet",zone.ID);
|
||||
Sunstone.runAction("Zone.image",zone.ID);
|
||||
Sunstone.runAction("Zone.user",zone.ID);
|
||||
Sunstone.runAction("Zone.cluster",zone.ID);
|
||||
Sunstone.runAction("Zone.datastore",zone.ID);
|
||||
}
|
||||
|
||||
|
||||
|
@ -29,9 +29,26 @@ $: << File.dirname(__FILE__)
|
||||
|
||||
require 'vmware_driver'
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Wait the VM to shutdown TIMEOUT (xPOLL_INTERVAL) seconds.
|
||||
# Set to ~10min
|
||||
#------------------------------------------------------------------------------
|
||||
POLL_INTERVAL=2
|
||||
TIMEOUT=300
|
||||
|
||||
deploy_id = ARGV[0]
|
||||
host = ARGV[1]
|
||||
|
||||
vmware_drv = VMwareDriver.new(host)
|
||||
|
||||
vmware_drv.shutdown(deploy_id)
|
||||
|
||||
count=0
|
||||
while (vmware_drv.poll(deploy_id).match(/STATE=(.*)/)[1] != "d") do
|
||||
sleep POLL_INTERVAL
|
||||
if count > TIMEOUT then
|
||||
OpenNebula.log_debug("Timeout reached and VM #{deploy_id} is still alive.")
|
||||
exit -1
|
||||
end
|
||||
count+=POLL_INTERVAL
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user