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

Feature #862, task #884: Add update properties dialog to VMs view with permissions settings. Fix small problems with vnets.

This commit is contained in:
Hector Sanjuan 2012-01-07 12:47:01 +01:00
parent 094cf5a466
commit cb10c15522
6 changed files with 239 additions and 19 deletions

View File

@ -51,6 +51,7 @@ module OpenNebulaJSON
when "unpublish" then self.unpublish
when "update" then self.update(action_hash['params'])
when "chown" then self.chown(action_hash['params'])
when "chmod" then self.chmod_octet(action_hash['params'])
when "chtype" then self.chtype(action_hash['params'])
else
error_msg = "#{action_hash['perform']} action not " <<
@ -71,6 +72,10 @@ module OpenNebulaJSON
super(params['owner_id'].to_i,params['group_id'].to_i)
end
def chmod_octet(params=Hash.new)
super(params['octet'])
end
def chtype(params=Hash.new)
super(params['type'])
end

View File

@ -42,11 +42,12 @@ module OpenNebulaJSON
end
rc = case action_hash['perform']
when "publish" then self.publish
when "unpublish" then self.unpublish
when "update" then self.update(action_hash['params'])
when "chown" then self.chown(action_hash['params'])
when "instantiate" then self.instantiate(action_hash['params'])
when "publish" then self.publish
when "unpublish" then self.unpublish
when "update" then self.update(action_hash['params'])
when "chown" then self.chown(action_hash['params'])
when "chmod" then self.chmod_octet(action_hash['octet'])
when "instantiate" then self.instantiate(action_hash['params'])
else
error_msg = "#{action_hash['perform']} action not " <<
" available for this resource"
@ -62,6 +63,10 @@ module OpenNebulaJSON
super(params['owner_id'].to_i,params['group_id'].to_i)
end
def chmod_octet(params=Hash.new)
super(params['octet'])
end
def instantiate(params=Hash.new)
super(params['vm_name'])
end

View File

@ -65,6 +65,7 @@ module OpenNebulaJSON
when "reboot" then self.reboot
when "resubmit" then self.resubmit
when "chown" then self.chown(action_hash['params'])
when "chmod" then self.chmod_octet(action_hash['params'])
else
error_msg = "#{action_hash['perform']} action not " <<
" available for this resource"
@ -95,5 +96,9 @@ module OpenNebulaJSON
def chown(params=Hash.new)
super(params['owner_id'].to_i,params['group_id'].to_i)
end
def chmod_octet(params=Hash.new)
super(params['octet'])
end
end
end

View File

@ -565,6 +565,13 @@ var OpenNebula = {
"chgrp" : function(params){
OpenNebula.Action.chgrp(params,OpenNebula.VM.resource);
},
"chmod" : function(params){
var action_obj = params.data.extra_param;
OpenNebula.Action.simple_action(params,
OpenNebula.VM.resource,
"chmod",
action_obj);
},
"shutdown": function(params){
OpenNebula.Action.simple_action(params,OpenNebula.VM.resource,"shutdown");
},
@ -742,6 +749,13 @@ var OpenNebula = {
"chgrp" : function(params){
OpenNebula.Action.chgrp(params,OpenNebula.Image.resource);
},
"chmod" : function(params){
var action_obj = params.data.extra_param;
OpenNebula.Action.simple_action(params,
OpenNebula.Image.resource,
"chmod",
action_obj);
},
"update": function(params){
var action_obj = {"template_raw" : params.data.extra_param };
OpenNebula.Action.simple_action(params,
@ -800,6 +814,13 @@ var OpenNebula = {
"chgrp" : function(params){
OpenNebula.Action.chgrp(params,OpenNebula.Template.resource);
},
"chmod" : function(params){
var action_obj = params.data.extra_param;
OpenNebula.Action.simple_action(params,
OpenNebula.Template.resource,
"chmod",
action_obj);
},
"update" : function(params){
var action_obj = {"template_raw" : params.data.extra_param };
OpenNebula.Action.simple_action(params,

View File

@ -92,6 +92,54 @@ var create_vm_tmpl ='<form id="create_vm_form" action="">\
</fieldset>\
</form>';
var update_vm_tmpl =
'<form action="javascript:alert(\'js error!\');">\
<h3 style="margin-bottom:10px;">'+tr("Please, choose and modify the virtual machine you want to update")+':</h3>\
<fieldset style="border-top:none;">\
<label for="vm_template_update_select">'+tr("Select a VM")+':</label>\
<select id="vm_template_update_select" name="vm_template_update_select"></select>\
<div class="clear"></div>\
<div>\
<table class="permissions_table" style="padding:0 10px;">\
<thead><tr>\
<td style="width:130px">'+tr("Permissions")+':</td>\
<td style="width:40px;text-align:center;">'+tr("Use")+'</td>\
<td style="width:40px;text-align:center;">'+tr("Manage")+'</td>\
<td style="width:40px;text-align:center;">'+tr("Admin")+'</td></tr></thead>\
<tr>\
<td>'+tr("Owner")+'</td>\
<td style="text-align:center"><input type="checkbox" name="vm_owner_u" class="owner_u" /></td>\
<td style="text-align:center"><input type="checkbox" name="vm_owner_m" class="owner_m" /></td>\
<td style="text-align:center"><input type="checkbox" name="vm_owner_a" class="owner_a" /></td>\
</tr>\
<tr>\
<td>'+tr("Group")+'</td>\
<td style="text-align:center"><input type="checkbox" name="vm_owner_u" class="group_u" /></td>\
<td style="text-align:center"><input type="checkbox" name="vm_owner_m" class="group_m" /></td>\
<td style="text-align:center"><input type="checkbox" name="vm_owner_a" class="group_a" /></td>\
</tr>\
<tr>\
<td>'+tr("Other")+'</td>\
<td style="text-align:center"><input type="checkbox" name="vm_owner_u" class="other_u" /></td>\
<td style="text-align:center"><input type="checkbox" name="vm_owner_m" class="other_m" /></td>\
<td style="text-align:center"><input type="checkbox" name="vm_owner_a" class="other_a" /></td>\
</tr>\
</table>\
</div>\
<!-- <label for="vnet_template_update_textarea">'+tr("Template")+':</label>\
<div class="clear"></div>\
<textarea id="vnet_template_update_textarea" style="width:100%; height:14em;"></textarea>\
-->\
</fieldset>\
<fieldset>\
<div class="form_buttons">\
<button class="button" id="vm_template_update_button" value="VM.update_template">\
'+tr("Update")+'\
</button>\
</div>\
</fieldset>\
</form>';
var vmachine_list_json = {};
var dataTable_vMachines;
var $create_vm_dialog;
@ -115,6 +163,11 @@ var vm_actions = {
call: popUpCreateVMDialog,
},
"VM.update_dialog" : {
type: "custom",
call: popUpVMTemplateUpdateDialog
},
"VM.list" : {
type: "list",
call: OpenNebula.VM.list,
@ -373,7 +426,23 @@ var vm_actions = {
elements: vmElements,
error: onError,
notify: true
}
},
"VM.fetch_permissions" : {
type: "single",
call: OpenNebula.VM.show,
callback : function(request, vm_json){
var dialog = $('#vm_template_update_dialog form');
var vm = vm_json.VM;
setPermissionsTable(vm,dialog);
},
error: onError
},
"VM.chmod" : {
type: "single",
call: OpenNebula.VM.chmod,
error: onError,
notify: true
},
}
@ -391,6 +460,12 @@ var vm_buttons = {
alwaysActive: true
},
"VM.update_dialog" : {
type: "action",
text: tr("Update properties"),
alwaysActive: true
},
"VM.chown" : {
type: "confirm_with_select",
text: tr("Change owner"),
@ -673,7 +748,21 @@ function updateVMInfo(request,vm){
<tr>\
<td class="key_td">'+tr("Deploy ID")+'</td>\
<td class="value_td">'+(typeof(vm_info.DEPLOY_ID) == "object" ? "-" : vm_info.DEPLOY_ID)+'</td>\
</tr></tbody>\
</tr>\
<tr><td></td><td></td></tr>\
<tr>\
<td class="key_td">'+tr("Owner permissions")+'</td>\
<td class="value_td">'+ownerPermStr(vm_info)+'</td>\
</tr>\
<tr>\
<td class="key_td">'+tr("Group permissions")+'</td>\
<td class="value_td">'+groupPermStr(vm_info)+'</td>\
</tr>\
<tr>\
<td class="key_td">'+tr("Other permissions")+'</td>\
<td class="value_td">'+otherPermStr(vm_info)+'</td>\
</tr>\
</tbody>\
</table>\
<table id="vm_monitoring_table" class="info_table">\
<thead>\
@ -922,7 +1011,100 @@ function saveasDisksCallback(req,response){
//introduce options in the right tab
$('#saveas_tabs #saveas_tab_'+id+' #vm_disk_id',$saveas_vm_dialog).html(select);
}
};
function setupVMTemplateUpdateDialog(){
//Append to DOM
dialogs_context.append('<div id="vm_template_update_dialog" title="'+tr("Update VM properties")+'"></div>');
var dialog = $('#vm_template_update_dialog',dialogs_context);
//Put HTML in place
dialog.html(update_vm_tmpl);
var height = Math.floor($(window).height()*0.8); //set height to a percentage of the window
//Convert into jQuery
dialog.dialog({
autoOpen:false,
width:500,
modal:true,
height:height,
resizable:true,
});
$('button',dialog).button();
$('#vm_template_update_select',dialog).change(function(){
var id = $(this).val();
$('.permissions_table input',dialog).removeAttr('checked');
$('.permissions_table',dialog).removeAttr('update');
if (id && id.length){
var dialog = $('#vm_template_update_dialog');
Sunstone.runAction("VM.fetch_permissions",id);
};
});
$('.permissions_table input',dialog).change(function(){
$(this).parents('table').attr('update','update');
});
$('form',dialog).submit(function(){
var dialog = $(this);
var id = $('#vm_template_update_select',dialog).val();
if (!id || !id.length) {
$(this).parents('#vm_template_update_dialog').dialog('close');
return false;
};
var permissions = $('.permissions_table',dialog);
if (permissions.attr('update')){
var perms = {
octet : buildOctet(permissions)
};
Sunstone.runAction("VM.chmod",id,perms);
};
$(this).parents('#vm_template_update_dialog').dialog('close');
return false;
});
};
function popUpVMTemplateUpdateDialog(){
var select = makeSelectOptions(dataTable_vMachines,
1,//id_col
4,//name_col
[],
[]
);
var sel_elems = getSelectedNodes(dataTable_vMachines);
var dialog = $('#vm_template_update_dialog');
$('#vm_template_update_select',dialog).html(select);
$('#vm_template_update_textarea',dialog).val("");
$('.permissions_table input',dialog).removeAttr('checked');
$('.permissions_table',dialog).removeAttr('update');
if (sel_elems.length >= 1){ //several items in the list are selected
//grep them
var new_select= sel_elems.length > 1? '<option value="">Please select</option>' : "";
$('option','<select>'+select+'</select>').each(function(){
var val = $(this).val();
if ($.inArray(val,sel_elems) >= 0){
new_select+='<option value="'+val+'">'+$(this).text()+'</option>';
};
});
$('#vm_template_update_select',dialog).html(new_select);
if (sel_elems.length == 1) {
$('#vm_template_update_select option',dialog).attr('selected','selected');
$('#vm_template_update_select',dialog).trigger("change");
};
};
dialog.dialog('open');
return false;
};
//Prepares autorefresh
function setVMAutorefresh(){
@ -1083,10 +1265,10 @@ $(document).ready(function(){
{ "sWidth": "150px", "aTargets": [5,9] },
{ "sWidth": "100px", "aTargets": [2,3] }
],
"oLanguage": (datatable_lang != "") ?
{
sUrl: "locale/"+lang+"/"+datatable_lang
} : ""
"oLanguage": (datatable_lang != "") ?
{
sUrl: "locale/"+lang+"/"+datatable_lang
} : ""
});
dataTable_vMachines.fnClearTable();
@ -1096,6 +1278,7 @@ $(document).ready(function(){
Sunstone.runAction("VM.list");
setupCreateVMDialog();
setupVMTemplateUpdateDialog();
setupSaveasDialog();
setVMAutorefresh();
setupVNC();

View File

@ -872,7 +872,7 @@ function popUpCreateVnetDialog() {
function setupVNetTemplateUpdateDialog(){
//Append to DOM
dialogs_context.append('<div id="vnet_template_update_dialog" title="'+tr("Update network template")+'"></div>');
dialogs_context.append('<div id="vnet_template_update_dialog" title="'+tr("Update network properties")+'"></div>');
var dialog = $('#vnet_template_update_dialog',dialogs_context);
//Put HTML in place
@ -893,9 +893,10 @@ function setupVNetTemplateUpdateDialog(){
$('#vnet_template_update_select',dialog).change(function(){
var id = $(this).val();
$('.permissions_table input',dialog).removeAttr('checked')
$('.permissions_table',dialog).removeAttr('update');
if (id && id.length){
var dialog = $('#vnet_template_update_dialog');
$('.permissions_table input',dialog).removeAttr('checked')
$('#vnet_template_update_textarea',dialog).val(tr("Loading")+"...");
Sunstone.runAction("Network.fetch_permissions",id);
@ -914,11 +915,11 @@ function setupVNetTemplateUpdateDialog(){
var new_template = $('#vnet_template_update_textarea',dialog).val();
var id = $('#vnet_template_update_select',dialog).val();
if (!id || !id.length) {
dialog.dialog('close');
$(this).parents('#vnet_template_update_dialog').dialog('close');
return false;
};
var permissions = $('.permissions_table');
var permissions = $('.permissions_table',dialog);
if (permissions.attr('update')){
var perms = {
octet : buildOctet(permissions)
@ -945,7 +946,8 @@ function popUpVNetTemplateUpdateDialog(){
var dialog = $('#vnet_template_update_dialog');
$('#vnet_template_update_select',dialog).html(select);
$('#vnet_template_update_textarea',dialog).val("");
$('.permissions_table input',dialog).removeAttr('checked')
$('.permissions_table input',dialog).removeAttr('checked');
$('.permissions_table',dialog).removeAttr('update');
if (sel_elems.length >= 1){ //several items in the list are selected
//grep them
@ -960,8 +962,7 @@ function popUpVNetTemplateUpdateDialog(){
if (sel_elems.length == 1) {
$('#vnet_template_update_select option',dialog).attr('selected','selected');
$('#vnet_template_update_select',dialog).trigger("change");
}
};
};
dialog.dialog('open');