mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-21 14:50:08 +03:00
Merge branch 'hector-847' into bug-847
This commit is contained in:
commit
a22bd98265
@ -31,7 +31,7 @@ module OpenNebulaJSON
|
||||
else
|
||||
template = template_to_str(vnet_hash)
|
||||
end
|
||||
|
||||
|
||||
self.allocate(template)
|
||||
end
|
||||
|
||||
@ -46,6 +46,7 @@ module OpenNebulaJSON
|
||||
when "rmleases" then self.rmleases(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'])
|
||||
else
|
||||
error_msg = "#{action_hash['perform']} action not " <<
|
||||
@ -62,6 +63,10 @@ module OpenNebulaJSON
|
||||
super(params['ip'])
|
||||
end
|
||||
|
||||
def update(params=Hash.new)
|
||||
super(params['template_raw'])
|
||||
end
|
||||
|
||||
def chown(params=Hash.new)
|
||||
super(params['owner_id'].to_i,params['group_id'].to_i)
|
||||
end
|
||||
|
@ -510,7 +510,17 @@ var OpenNebula = {
|
||||
OpenNebula.Network.resource,
|
||||
"rmleases",
|
||||
action_obj);
|
||||
}
|
||||
},
|
||||
"update": function(params){
|
||||
var action_obj = {"template_raw" : params.data.extra_param };
|
||||
OpenNebula.Action.simple_action(params,
|
||||
OpenNebula.Network.resource,
|
||||
"update",
|
||||
action_obj);
|
||||
},
|
||||
"fetch_template" : function(params){
|
||||
OpenNebula.Action.show(params,OpenNebula.Network.resource,"template");
|
||||
},
|
||||
},
|
||||
|
||||
"VM": {
|
||||
|
@ -169,6 +169,34 @@ var create_image_tmpl =
|
||||
</div>\
|
||||
</div>';
|
||||
|
||||
var update_image_tmpl =
|
||||
'<form action="javascript:alert(\'js error!\');">\
|
||||
<h3 style="margin-bottom:10px;">Please, choose and modify the image you want to update:</h3>\
|
||||
<fieldset style="border-top:none;">\
|
||||
<label for="image_template_update_select">Select an image:</label>\
|
||||
<select id="image_template_update_select" name="image_template_update_select"></select>\
|
||||
<div class="clear"></div>\
|
||||
<div>\
|
||||
<label for="image_template_update_public">Public:</label>\
|
||||
<input type="checkbox" name="image_template_update_public" id="image_template_update_public" />\
|
||||
</div>\
|
||||
<div>\
|
||||
<label for="image_template_update_public">Persistent:</label>\
|
||||
<input type="checkbox" name="image_template_update_persistent" id="image_template_update_persistent" />\
|
||||
</div>\
|
||||
<label for="image_template_update_textarea">Template:</label>\
|
||||
<div class="clear"></div>\
|
||||
<textarea id="image_template_update_textarea" style="width:100%; height:14em;"></textarea>\
|
||||
</fieldset>\
|
||||
<fieldset>\
|
||||
<div class="form_buttons">\
|
||||
<button class="button" id="image_template_update_button" value="Image.update_template">\
|
||||
Update\
|
||||
</button>\
|
||||
</div>\
|
||||
</fieldset>\
|
||||
</form>';
|
||||
|
||||
var images_select = "";
|
||||
var dataTable_images;
|
||||
var $create_image_dialog;
|
||||
@ -228,7 +256,7 @@ var image_actions = {
|
||||
type: "single",
|
||||
call: OpenNebula.Image.fetch_template,
|
||||
callback: function (request,response) {
|
||||
$('#template_update_dialog #template_update_textarea').val(response.template);
|
||||
$('#image_template_update_dialog #image_template_update_textarea').val(response.template);
|
||||
},
|
||||
error: onError
|
||||
},
|
||||
@ -236,14 +264,7 @@ var image_actions = {
|
||||
"Image.update_dialog" : {
|
||||
type: "custom",
|
||||
call: function() {
|
||||
popUpTemplateUpdateDialog("Image",
|
||||
makeSelectOptions(dataTable_images,
|
||||
1,//id_col
|
||||
4,//name_col
|
||||
[],
|
||||
[]
|
||||
),
|
||||
getSelectedNodes(dataTable_images));
|
||||
popUpImageTemplateUpdateDialog();
|
||||
}
|
||||
},
|
||||
|
||||
@ -450,6 +471,8 @@ function imageElements() {
|
||||
// Returns an array containing the values of the image_json and ready
|
||||
// to be inserted in the dataTable
|
||||
function imageElementArray(image_json){
|
||||
//Changing this? It may affect to the is_public and is_persistent
|
||||
//variables in setupImageTemplateUpdateDialog();
|
||||
var image = image_json.IMAGE;
|
||||
return [
|
||||
'<input type="checkbox" id="image_'+image.ID+'" name="selected_items" value="'+image.ID+'"/>',
|
||||
@ -775,6 +798,127 @@ function popUpCreateImageDialog(){
|
||||
$create_image_dialog.dialog('open');
|
||||
}
|
||||
|
||||
|
||||
|
||||
function setupImageTemplateUpdateDialog(){
|
||||
|
||||
//Append to DOM
|
||||
dialogs_context.append('<div id="image_template_update_dialog" title="Update image template"></div>');
|
||||
var dialog = $('#image_template_update_dialog',dialogs_context);
|
||||
|
||||
//Put HTML in place
|
||||
dialog.html(update_image_tmpl);
|
||||
|
||||
//Convert into jQuery
|
||||
dialog.dialog({
|
||||
autoOpen:false,
|
||||
width:700,
|
||||
modal:true,
|
||||
height:480,
|
||||
resizable:false,
|
||||
});
|
||||
|
||||
$('button',dialog).button();
|
||||
|
||||
$('#image_template_update_select',dialog).change(function(){
|
||||
var id = $(this).val();
|
||||
if (id && id.length){
|
||||
var dialog = $('#image_template_update_dialog');
|
||||
$('#image_template_update_textarea',dialog).val("Loading...");
|
||||
|
||||
var data = getElementData(id,"#image",dataTable_images);
|
||||
var is_public = data[7] == "yes";
|
||||
var is_persistent = data[8] == "yes";
|
||||
|
||||
if (is_public){
|
||||
$('#image_template_update_public',dialog).attr("checked","checked")
|
||||
} else {
|
||||
$('#image_template_update_public',dialog).removeAttr("checked")
|
||||
}
|
||||
|
||||
if (is_persistent){
|
||||
$('#image_template_update_persistent',dialog).attr("checked","checked")
|
||||
} else {
|
||||
$('#image_template_update_persistent',dialog).removeAttr("checked")
|
||||
}
|
||||
|
||||
Sunstone.runAction("Image.fetch_template",id);
|
||||
} else {
|
||||
$('#image_template_update_textarea',dialog).val("");
|
||||
};
|
||||
});
|
||||
|
||||
$('#image_template_update_button',dialog).click(function(){
|
||||
var dialog = $('#image_template_update_dialog');
|
||||
var new_template = $('#image_template_update_textarea',dialog).val();
|
||||
var id = $('#image_template_update_select',dialog).val();
|
||||
if (!id || !id.length) {
|
||||
dialog.dialog('close');
|
||||
return false;
|
||||
};
|
||||
|
||||
var data = getElementData(id,"#image",dataTable_images);
|
||||
var is_public = data[7] == "yes";
|
||||
var is_persistent = data[8] == "yes";
|
||||
|
||||
var new_public = $('#image_template_update_public:checked',dialog).length;
|
||||
var new_persistent = $('#image_template_update_persistent:checked',dialog).length;
|
||||
|
||||
if (is_public != new_public){
|
||||
if (new_public) Sunstone.runAction("Image.publish",id);
|
||||
else Sunstone.runAction("Image.unpublish",id);
|
||||
};
|
||||
|
||||
if (is_persistent != new_persistent){
|
||||
if (new_persistent) Sunstone.runAction("Image.persistent",id);
|
||||
else Sunstone.runAction("Image.nonpersistent",id);
|
||||
};
|
||||
|
||||
Sunstone.runAction("Image.update",id,new_template);
|
||||
dialog.dialog('close');
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function popUpImageTemplateUpdateDialog(){
|
||||
var select = makeSelectOptions(dataTable_images,
|
||||
1,//id_col
|
||||
4,//name_col
|
||||
[],
|
||||
[]
|
||||
);
|
||||
var sel_elems = getSelectedNodes(dataTable_images);
|
||||
|
||||
|
||||
var dialog = $('#image_template_update_dialog');
|
||||
$('#image_template_update_select',dialog).html(select);
|
||||
$('#image_template_update_textarea',dialog).val("");
|
||||
$('#image_template_update_public',dialog).removeAttr("checked")
|
||||
$('#image_template_update_persistent',dialog).removeAttr("checked")
|
||||
|
||||
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>';
|
||||
};
|
||||
});
|
||||
$('#image_template_update_select',dialog).html(new_select);
|
||||
if (sel_elems.length == 1) {
|
||||
$('#image_template_update_select option',dialog).attr("selected","selected");
|
||||
$('#image_template_update_select',dialog).trigger("change");
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
dialog.dialog('open');
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
// Set the autorefresh interval for the datatable
|
||||
function setImageAutorefresh() {
|
||||
setInterval(function(){
|
||||
@ -811,6 +955,7 @@ $(document).ready(function(){
|
||||
Sunstone.runAction("Image.list");
|
||||
|
||||
setupCreateImageDialog();
|
||||
setupImageTemplateUpdateDialog();
|
||||
setupTips($create_image_dialog);
|
||||
setImageAutorefresh();
|
||||
|
||||
|
@ -135,6 +135,30 @@ var create_vn_tmpl =
|
||||
</div>\
|
||||
</div>';
|
||||
|
||||
var update_vnet_tmpl =
|
||||
'<form action="javascript:alert(\'js error!\');">\
|
||||
<h3 style="margin-bottom:10px;">Please, choose and modify the virtual network you want to update:</h3>\
|
||||
<fieldset style="border-top:none;">\
|
||||
<label for="vnet_template_update_select">Select a network:</label>\
|
||||
<select id="vnet_template_update_select" name="vnet_template_update_select"></select>\
|
||||
<div class="clear"></div>\
|
||||
<div>\
|
||||
<label for="vnet_template_update_public">Public:</label>\
|
||||
<input type="checkbox" name="vnet_template_update_public" id="vnet_template_update_public" />\
|
||||
</div>\
|
||||
<label for="vnet_template_update_textarea">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="vnet_template_update_button" value="Network.update_template">\
|
||||
Update\
|
||||
</button>\
|
||||
</div>\
|
||||
</fieldset>\
|
||||
</form>';
|
||||
|
||||
var vnetworks_select="";
|
||||
var dataTable_vNetworks;
|
||||
var $create_vn_dialog;
|
||||
@ -272,8 +296,34 @@ var vnet_actions = {
|
||||
elements: vnElements,
|
||||
error:onError,
|
||||
notify: true
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"Network.fetch_template" : {
|
||||
type: "single",
|
||||
call: OpenNebula.Network.fetch_template,
|
||||
callback: function (request,response) {
|
||||
$('#vnet_template_update_dialog #vnet_template_update_textarea').val(response.template);
|
||||
},
|
||||
error: onError
|
||||
},
|
||||
|
||||
"Network.update_dialog" : {
|
||||
type: "custom",
|
||||
call: function() {
|
||||
popUpVNetTemplateUpdateDialog();
|
||||
}
|
||||
},
|
||||
|
||||
"Network.update" : {
|
||||
type: "single",
|
||||
call: OpenNebula.Network.update,
|
||||
callback: function() {
|
||||
notifyMessage("Template updated correctly");
|
||||
},
|
||||
error: onError
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
|
||||
var vnet_buttons = {
|
||||
@ -288,6 +338,12 @@ var vnet_buttons = {
|
||||
text: "+ New"
|
||||
},
|
||||
|
||||
"Network.update_dialog" : {
|
||||
type: "action",
|
||||
text: "Update a template",
|
||||
alwaysActive: true
|
||||
},
|
||||
|
||||
"Network.publish" : {
|
||||
type: "action",
|
||||
text: "Publish"
|
||||
@ -684,6 +740,109 @@ function popUpCreateVnetDialog() {
|
||||
$create_vn_dialog.dialog('open');
|
||||
}
|
||||
|
||||
|
||||
function setupVNetTemplateUpdateDialog(){
|
||||
//Append to DOM
|
||||
dialogs_context.append('<div id="vnet_template_update_dialog" title="Update network template"></div>');
|
||||
var dialog = $('#vnet_template_update_dialog',dialogs_context);
|
||||
|
||||
//Put HTML in place
|
||||
dialog.html(update_vnet_tmpl);
|
||||
|
||||
//Convert into jQuery
|
||||
dialog.dialog({
|
||||
autoOpen:false,
|
||||
width:700,
|
||||
modal:true,
|
||||
height:480,
|
||||
resizable:false,
|
||||
});
|
||||
|
||||
$('button',dialog).button();
|
||||
|
||||
$('#vnet_template_update_select',dialog).change(function(){
|
||||
var id = $(this).val();
|
||||
if (id && id.length){
|
||||
var dialog = $('#vnet_template_update_dialog');
|
||||
$('#vnet_template_update_textarea',dialog).val("Loading...");
|
||||
|
||||
var data = getElementData(id,"#vnetwork",dataTable_vNetworks);
|
||||
var is_public = data[7] == "yes";
|
||||
|
||||
if (is_public){
|
||||
$('#vnet_template_update_public',dialog).attr("checked","checked")
|
||||
} else {
|
||||
$('#vnet_template_update_public',dialog).removeAttr("checked")
|
||||
}
|
||||
|
||||
Sunstone.runAction("Network.fetch_template",id);
|
||||
} else {
|
||||
$('#vnet_template_update_textarea',dialog).val("");
|
||||
};
|
||||
});
|
||||
|
||||
$('#vnet_template_update_button',dialog).click(function(){
|
||||
var dialog = $('#vnet_template_update_dialog');
|
||||
var new_template = $('#vnet_template_update_textarea',dialog).val();
|
||||
var id = $('#vnet_template_update_select',dialog).val();
|
||||
if (!id || !id.length) {
|
||||
dialog.dialog('close');
|
||||
return false;
|
||||
};
|
||||
|
||||
var data = getElementData(id,"#vnetwork",dataTable_vNetworks);
|
||||
var is_public = data[7] == "yes";
|
||||
|
||||
var new_public = $('#vnet_template_update_public:checked',dialog).length;
|
||||
|
||||
if (is_public != new_public){
|
||||
if (new_public) Sunstone.runAction("Network.publish",id);
|
||||
else Sunstone.runAction("Network.unpublish",id);
|
||||
};
|
||||
|
||||
Sunstone.runAction("Network.update",id,new_template);
|
||||
dialog.dialog('close');
|
||||
return false;
|
||||
});
|
||||
};
|
||||
|
||||
function popUpVNetTemplateUpdateDialog(){
|
||||
var select = makeSelectOptions(dataTable_vNetworks,
|
||||
1,//id_col
|
||||
4,//name_col
|
||||
[],
|
||||
[]
|
||||
);
|
||||
var sel_elems = getSelectedNodes(dataTable_vNetworks);
|
||||
|
||||
|
||||
var dialog = $('#vnet_template_update_dialog');
|
||||
$('#vnet_template_update_select',dialog).html(select);
|
||||
$('#vnet_template_update_textarea',dialog).val("");
|
||||
$('#vnet_template_update_public',dialog).removeAttr("checked")
|
||||
|
||||
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>';
|
||||
};
|
||||
});
|
||||
$('#vnet_template_update_select',dialog).html(new_select);
|
||||
if (sel_elems.length == 1) {
|
||||
$('#vnet_template_update_select option',dialog).attr("selected","selected");
|
||||
$('#vnet_template_update_select',dialog).trigger("change");
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
dialog.dialog('open');
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
function setupAddRemoveLeaseDialog() {
|
||||
dialogs_context.append('<div title="Lease management" id="lease_vn_dialog"></div>');
|
||||
$lease_vn_dialog = $('#lease_vn_dialog',dialogs_context)
|
||||
@ -786,6 +945,7 @@ $(document).ready(function(){
|
||||
Sunstone.runAction("Network.list");
|
||||
|
||||
setupCreateVNetDialog();
|
||||
setupVNetTemplateUpdateDialog();
|
||||
setupAddRemoveLeaseDialog();
|
||||
setVNetAutorefresh();
|
||||
|
||||
|
@ -140,7 +140,7 @@ function tableCheckboxesListener(dataTable){
|
||||
//listen to changes in the visible inputs
|
||||
$('tbody input',dataTable).live("change",function(){
|
||||
var datatable = $(this).parents('table');
|
||||
recountCheckboxes(dataTable);
|
||||
recountCheckboxes(datatable);
|
||||
});
|
||||
}
|
||||
|
||||
@ -163,6 +163,12 @@ function updateSingleElement(element,dataTable,tag){
|
||||
recountCheckboxes(dataTable);
|
||||
}
|
||||
|
||||
function getElementData(id, resource_tag, dataTable){
|
||||
var nodes = dataTable.fnGetNodes();
|
||||
var tr = $(resource_tag+'_'+id,nodes).parents('tr')[0];
|
||||
return dataTable.fnGetData(tr);
|
||||
}
|
||||
|
||||
// Returns an string in the form key=value key=value ...
|
||||
// Does not explore objects in depth.
|
||||
function stringJSON(json){
|
||||
@ -657,6 +663,12 @@ function setupTemplateUpdateDialog(){
|
||||
var dialog = $('#template_update_dialog');
|
||||
var new_template = $('#template_update_textarea',dialog).val();
|
||||
var id = $('#template_update_select',dialog).val();
|
||||
|
||||
if (!id || !id.length) {
|
||||
dialog.dialog('close');
|
||||
return false;
|
||||
};
|
||||
|
||||
var resource = $(this).val();
|
||||
Sunstone.runAction(resource+".update",id,new_template);
|
||||
dialog.dialog('close');
|
||||
|
Loading…
x
Reference in New Issue
Block a user