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:
commit
ee4ba96dd4
@ -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
|
||||
|
@ -224,7 +224,6 @@ class OzonesServer
|
||||
end
|
||||
|
||||
def delete_zone(id, pr)
|
||||
|
||||
zone = OZones::Zones.get(id)
|
||||
|
||||
if zone
|
||||
|
@ -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);
|
||||
},
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user