1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-21 14:50:08 +03:00

Merge branch 'master' into feature-789

Conflicts:
	src/ozones/Server/models/OzonesServer.rb
This commit is contained in:
Ruben S. Montero 2011-09-27 10:05:36 +02:00
commit ee4ba96dd4
4 changed files with 309 additions and 9 deletions

View File

@ -34,7 +34,7 @@ mv $ONE_SHARE/$dir $ONE_SHARE/noVNC
mkdir -p $ONE_PUBLIC_SUNSTONE/vendor/noVNC
mv $ONE_SHARE/noVNC/include/ $ONE_PUBLIC_SUNSTONE/vendor/noVNC/
sed -i "s%^\(NOVNC_PATH=\).*$%\1$ONE_SHARE/noVNC%" $SUNSTONE_CONF
sed -i.bck "s%^\(:novnc_path: \).*$%\1$ONE_SHARE/noVNC%" $SUNSTONE_CONF
#Update file permissions
chmod +x $ONE_SHARE/noVNC/utils/launch.sh

View File

@ -224,7 +224,6 @@ class OzonesServer
end
def delete_zone(id, pr)
zone = OZones::Zones.get(id)
if zone

View File

@ -201,6 +201,28 @@ var oZones = {
});
},
"update": function(params,resource){
var callback = params.success;
var callback_error = params.error;
var id = params.data.id;
var data = params.data.extra_param;
var request = oZones.Helper.request(resource,"update", data);
$.ajax({
url: resource.toLowerCase()+'/'+id,
type: "PUT",
dataType: "json",
data: JSON.stringify(data),
success: function(response){
return callback ? callback(request, response) : null;
},
error: function(response){
return callback_error ?
callback_error(request, oZones.Error(response)) : null;
}
});
},
"delete": function(params,resource){
var callback = params.success;
var callback_error = params.error;
@ -385,7 +407,7 @@ var oZones = {
callback(request, oZones.Helper.pool(subresource.toUpperCase(),response)) : null;
},
error: function(response){
return callback_error ? calback_error(request,oZones.Error(response)) : null;
return callback_error ? callback_error(request,oZones.Error(response)) : null;
}
});
@ -421,6 +443,9 @@ var oZones = {
"create": function(params){
oZones.Action.create(params,oZones.VDC.resource);
},
"update": function(params){
oZones.Action.update(params,oZones.VDC.resource);
},
"delete": function(params){
oZones.Action.delete(params,oZones.VDC.resource);
},

View File

@ -25,6 +25,7 @@ var vdcs_tab_content =
<th>ID</th>\
<th>Name</th>\
<th>Zone ID</th>\
<th>Hosts</th>\
</tr>\
</thead>\
<tbody id="tbodyvdcs">\
@ -44,7 +45,12 @@ var create_vdc_tmpl =
<input type="password" name="vdcadminpass" id="vdcadminpass" />\
<label for="zone">Zone:</label>\
<select id="zoneid" name="zone">\
</select>\
</select><br />\
<div class="clear"></div>\
<label for="vdc_force_hosts">Host multiplacement:</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 marked with * 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 / Selected</label>\
<label>Hosts:</label>\
@ -61,7 +67,36 @@ var create_vdc_tmpl =
</fieldset>\
</form>';
var update_vdc_tmpl =
'<form id="update_vdc_form" action="">\
<fieldset>\
<div>\
<label for="vdc_update_id">Update hosts in:</label>\
<select name="vdc_update_id" id="vdc_update_id">\
</select>\
<div class="clear"></div>\
<label for="vdc_update_force_hosts">Host multiplacement:</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 marked with * 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>\
<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>\
</fieldset>\
<fieldset>\
<div class="form_buttons">\
<button class="button" id="update_vdc_submit" value="VDC.update">Update</button>\
<button class="button" type="reset" value="reset">Reset</button>\
</div>\
</fieldset>\
</form>';
var dataTable_vdcs;
var $update_vdc_dialog;
function vdcSelectedNodes() {
return getSelectedNodes(dataTable_vdcs);
@ -81,6 +116,19 @@ var vdc_actions = {
call: openCreateVDCDialog
},
"VDC.update" : {
type: "single",
call: oZones.VDC.update,
callback: updateVDCElement,
error: onError,
notify: true
},
"VDC.update_dialog" : {
type: "custom",
call: openUpdateVDCDialog
},
"VDC.list" : {
type: "list",
call: oZones.VDC.list,
@ -123,6 +171,12 @@ var vdc_actions = {
call: oZones.Zone.host,
callback: fillHostList,
error: onError
},
"VDC.update_zone_hosts" : {
type: "single",
call: oZones.Zone.host,
callback: fillUpdateHostList,
error: onError
}
};
@ -137,6 +191,10 @@ var vdc_buttons = {
text: "+ New",
alwaysActive:true
},
"VDC.update_dialog" : {
type: "action",
text: "Add/Remove hosts",
},
"VDC.delete" : {
type: "action",
text: "Delete",
@ -169,7 +227,8 @@ function vdcElementArray(vdc_json){
'<input type="checkbox" id="vdc_'+vdc.id+'" name="selected_items" value="'+vdc.id+'"/>',
vdc.id,
vdc.name,
vdc.zones_id
vdc.zones_id,
vdc.hosts ? vdc.hosts : "none"
];
}
@ -193,6 +252,12 @@ function addVDCElement(req,vdc_json){
addElement(element,dataTable_vdcs);
}
function updateVDCElement(request, vdc_json){
var id = vdc_json.VDC.id;
var element = vdcElementArray(vdc_json);
updateSingleElement(element,dataTable_vdcs,'#vdc_'+id);
}
function updateVDCsView(req,vdc_list){
var vdc_list_array = [];
@ -230,6 +295,18 @@ function updateVDCInfo(req,vdc_json){
<td class="key_td">Hosts</td>\
<td class="value_td">'+(vdc.hosts? vdc.hosts : "none")+'</td>\
</tr>\
<tr>\
<td class="key_td">Admin name</td>\
<td class="value_td">'+vdc.vdcadminname+'</td>\
</tr>\
<tr>\
<td class="key_td">Group ID</td>\
<td class="value_td">'+vdc.group_id+'</td>\
</tr>\
<tr>\
<td class="key_td">ACLs</td>\
<td class="value_td">'+vdc.acls+'</td>\
</tr>\
</tbody>\
</table>'
};
@ -239,13 +316,87 @@ function updateVDCInfo(req,vdc_json){
}
function fillHostList(req, host_list_json){
list = "";
var list = "";
var force = $('div#create_vdc_dialog #vdc_force_hosts:checked').length ?
true : false;
var zone_id = req.request.data[0];
var free;
$.each(host_list_json,function(){
list+='<li host_id="'+this.HOST.ID+'">'+this.HOST.NAME+'</li>';
free = isHostFree(this.HOST.ID,zone_id);
if (force || free){
list+='<li host_id="'+this.HOST.ID+'">'+(free? this.HOST.NAME : this.HOST.NAME+'*')+'</li>';
}
});
$('div#create_vdc_dialog #vdc_available_hosts_list').html(list);
}
//return the array of hosts
function isHostMine(host_id,vdc_id){
//locate myself
var vdcs = dataTable_vdcs.fnGetData();
var my_hosts=null;
for (var i=0; i < vdcs.length; i++){
if (vdcs[i][1]==vdc_id){
my_hosts = vdcs[i][4].split(',');
break;
}
};
if (!my_hosts) return false;
return $.inArray(host_id,my_hosts) >= 0;
}
function fillUpdateHostList(req, host_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 zone_id = req.request.data[0];
var free,li;
$.each(host_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>';
return true; //continue
}
//otherwise, check if its free etc...
free = isHostFree(this.HOST.ID,zone_id);
if (force || free){
list+='<li host_id="'+this.HOST.ID+'">'+(free? this.HOST.NAME : this.HOST.NAME+'*')+'</li>';
}
});
$('#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
var data = dataTable_vdcs.fnGetData();
var result = true;
var hosts;
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(',');
if ($.inArray(id,hosts) >= 0){
result = false;
break;
}
}
return result;
}
function setupCreateVDCDialog(){
$('div#dialogs').append('<div title="Create VDC" id="create_vdc_dialog"></div>');
var dialog = $('div#create_vdc_dialog');
@ -266,6 +417,12 @@ function setupCreateVDCDialog(){
containment: dialog
});
$('input#vdc_force_hosts',dialog).change(function(){
select = $('select#zoneid',$('#create_vdc_dialog'));
if (select.val().length){
select.trigger("change");
}
});
//load zone hosts
$('select#zoneid').change(function(){
@ -289,9 +446,10 @@ function setupCreateVDCDialog(){
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 zones are missing");
notifyError("Name, administrator credentials or zone are missing");
return false;
}
var hosts="";
@ -308,6 +466,7 @@ function setupCreateVDCDialog(){
"zoneid" : zoneid,
"vdcadminname" : vdcadminname,
"vdcadminpass" : vdcadminpass,
"force" : force
}
};
if (hosts.length){
@ -328,6 +487,119 @@ function openCreateVDCDialog(){
dialog.dialog('open');
}
function setupUpdateVDCDialog(){
$('div#dialogs').append('<div title="Update VDC" id="update_vdc_dialog"></div>');
$update_vdc_dialog=$('div#update_vdc_dialog',dialogs_context);
var dialog = $update_vdc_dialog;
dialog.html(update_vdc_tmpl);
dialog.dialog({
autoOpen: false,
modal: true,
width: 500
});
$('button',dialog).button();
$('#vdc_update_available_hosts_list',dialog).sortable({
connectWith : '#vdc_update_selected_hosts_list',
containment: dialog
});
$('#vdc_update_selected_hosts_list',dialog).sortable({
connectWith : '#vdc_update_available_hosts_list',
containment: dialog
});
$('#vdc_update_force_hosts',dialog).change(function(){
select = $('select#vdc_update_id',$update_vdc_dialog);
if (select.val().length){
select.trigger("change");
}
});
$('select#vdc_update_id').change(function(){
var id = $(this).val();
var zone_id = $('option:selected',this).attr("zone_id");
var av_hosts=
$('#vdc_update_available_hosts_list',$update_vdc_dialog);
var sel_hosts=
$('#vdc_update_selected_hosts_list',$update_vdc_dialog);
if (!id || !id.length) {
av_hosts.empty();
sel_hosts.empty();
return true;
};
//A VDC has been selected
//Fill in available hosts column
//move current hosts to current
av_hosts.html('<li>'+spinner+'</li>');
sel_hosts.empty();
Sunstone.runAction("VDC.update_zone_hosts",zone_id);
});
$('#update_vdc_form').submit(function(){
var force = $('#vdc_update_force_hosts',this).length ? "yes" : "nein";
var id = $('#vdc_update_id',this).val();
var hosts="";
$('#vdc_update_selected_hosts_list li',this).each(function(){
hosts+=$(this).attr("host_id")+',';
});
if (hosts.length){
hosts= hosts.slice(0,-1);
};
var vdc_json = {
"vdc" : {
"id": id,
"force": force,
"hosts": hosts
}
};
if (hosts.length){
vdc_json["vdc"]["hosts"]=hosts;
};
Sunstone.runAction("VDC.update",id,vdc_json);
dialog.dialog('close');
return false;
});
}
function openUpdateVDCDialog(){
var selected_elems = getSelectedNodes(dataTable_vdcs);
//populate select
var dialog = $update_vdc_dialog;
var options = "";
var vdcs = dataTable_vdcs.fnGetData();
for (var i = 0; i < vdcs.length; i++){
//if this VDC is among the selected
if ($.inArray(vdcs[i][1].toString(),selected_elems) >= 0){
options += '<option zone_id="'+
vdcs[i][3]+
'" value="'+
vdcs[i][1]+'">'+
vdcs[i][2]+
'</option>';
};
};
$('#vdc_update_available_hosts_list',dialog).empty();
$('#vdc_update_selected_hosts_list',dialog).empty();
$('select#vdc_update_id',dialog).html(options);
if (selected_elems.length == 1){
$('select#vdc_update_id',dialog).html(options);
$('select#vdc_update_id option',dialog).attr("checked","checked");
$('select#vdc_update_id').trigger("change");
} else {
$('select#vdc_update_id',dialog).html('<option value="">Please select</option>'+
options);
};
dialog.dialog('open');
}
function setVDCAutorefresh() {
setInterval(function(){
var checked = $('input:checked',dataTable_zones.fnGetNodes());
@ -347,15 +619,19 @@ $(document).ready(function(){
"aoColumnDefs": [
{ "bSortable": false, "aTargets": ["check"] },
{ "sWidth": "60px", "aTargets": [0] },
{ "sWidth": "150px", "aTargets": [4] },
{ "sWidth": "35px", "aTargets": [1,3] }
]
});
dataTable_vdcs.fnClearTable();
addElement([spinner,'','',''],dataTable_vdcs);
addElement([spinner,'','','',''],dataTable_vdcs);
Sunstone.runAction("VDC.list");
setupCreateVDCDialog();
setupTips($('#create_vdc_dialog'));
setupUpdateVDCDialog();
setupTips($('#update_vdc_dialog'));
setVDCAutorefresh();
initCheckAllBoxes(dataTable_vdcs);
tableCheckboxesListener(dataTable_vdcs);