diff --git a/src/cloud/occi/lib/ui/public/js/plugins/network.js b/src/cloud/occi/lib/ui/public/js/plugins/network.js
index b4146411ae..6668ec386d 100644
--- a/src/cloud/occi/lib/ui/public/js/plugins/network.js
+++ b/src/cloud/occi/lib/ui/public/js/plugins/network.js
@@ -290,11 +290,28 @@ function updateVNetworkInfo(request,vn){
'+tr("Type of the image, explained in detail in the following section. If omitted, the default value is the one defined in oned.conf (install default is OS).")+'
\
\
- \
'+tr("Persistent")+': \
\
@@ -185,12 +179,35 @@ var update_image_tmpl =
\
\
\
- '+tr("Public")+': \
- \
+ '+tr("Persistent")+': \
+ \
\
\
-
'+tr("Persistent")+': \
-
\
+
\
\
'+tr("Template")+': \
\
@@ -267,11 +284,20 @@ var image_actions = {
error: onError
},
+ "Image.fetch_permissions" : {
+ type: "single",
+ call: OpenNebula.Image.show,
+ callback: function(request,image_json){
+ var dialog = $('#image_template_update_dialog form');
+ var image = image_json.IMAGE;
+ setPermissionsTable(image,dialog);
+ },
+ error: onError
+ },
+
"Image.update_dialog" : {
type: "custom",
- call: function() {
- popUpImageTemplateUpdateDialog();
- }
+ call: popUpImageTemplateUpdateDialog,
},
"Image.update" : {
@@ -327,28 +353,6 @@ var image_actions = {
notify: true
},
- "Image.publish" : {
- type: "multiple",
- call: OpenNebula.Image.publish,
- callback: function (req) {
- Sunstone.runAction("Image.show",req.request.data[0]);
- },
- elements: imageElements,
- error: onError,
- notify: true
- },
-
- "Image.unpublish" : {
- type: "multiple",
- call: OpenNebula.Image.unpublish,
- callback: function (req) {
- Sunstone.runAction("Image.show",req.request.data[0]);
- },
- elements: imageElements,
- error: onError,
- notify: true
- },
-
"Image.delete" : {
type: "multiple",
call: OpenNebula.Image.delete,
@@ -380,6 +384,14 @@ var image_actions = {
notify: true
},
+ "Image.chmod" : {
+ type: "single",
+ call: OpenNebula.Image.chmod,
+// callback
+ error: onError,
+ notify: true
+ },
+
"Image.chtype" : {
type: "single",
call: OpenNebula.Image.chtype,
@@ -390,8 +402,7 @@ var image_actions = {
error: onError,
notify: true
}
-
-}
+};
var image_buttons = {
@@ -406,7 +417,7 @@ var image_buttons = {
},
"Image.update_dialog" : {
type: "action",
- text: tr("Update a template"),
+ text: tr("Update properties"),
alwaysActive: true
},
"Image.chown" : {
@@ -434,14 +445,6 @@ var image_buttons = {
type: "action",
text: tr("Disable")
},
- "Image.publish" : {
- type: "action",
- text: tr("Publish")
- },
- "Image.unpublish" : {
- type: "action",
- text: tr("Unpublish")
- },
"Image.persistent" : {
type: "action",
text: tr("Make persistent")
@@ -489,7 +492,7 @@ 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() functions.
+ //Changing this? It may affect to the is_persistent() functions.
var image = image_json.IMAGE;
var type = $('
\
@@ -501,8 +504,6 @@ function imageElementArray(image_json){
var value = OpenNebula.Helper.image_type(image.TYPE);
$('option[value="'+value+'"]',type).replaceWith(''+tr(value)+' ');
-
-
return [
' ',
image.ID,
@@ -512,8 +513,6 @@ function imageElementArray(image_json){
image.SIZE,
''+type.html()+' ',
pretty_time(image.REGTIME),
- parseInt(image.PUBLIC) ? ' '
- : ' ',
parseInt(image.PERSISTENT) ? ' '
: ' ',
OpenNebula.Helper.resource_state("image",image.STATE),
@@ -602,10 +601,6 @@ function updateImageInfo(request,img){
'+tr("Register time")+' \
'+pretty_time(img_info.REGTIME)+' \
\
- \
- '+tr("Public")+' \
- '+(parseInt(img_info.PUBLIC) ? tr("yes") : tr("no"))+' \
- \
\
'+tr("Persistent")+' \
'+(parseInt(img_info.PERSISTENT) ? tr("yes") : tr("no"))+' \
@@ -634,6 +629,19 @@ function updateImageInfo(request,img){
'+tr("Running #VMS")+' \
'+img_info.RUNNING_VMS+' \
\
+ \
+ \
+ '+tr("Owner permissions")+' \
+ '+ownerPermStr(img_info)+' \
+ \
+ \
+ '+tr("Group permissions")+' \
+ '+groupPermStr(img_info)+' \
+ \
+ \
+ '+tr("Other permissions")+' \
+ '+otherPermStr(img_info)+' \
+ \
'
}
@@ -693,16 +701,6 @@ function setupCreateImageDialog(){
$('#path_img',dialog).attr('checked','checked');
$('#img_path',dialog).parent().addClass("img_man");
- $('#img_public',dialog).click(function(){
- $('#img_persistent',$create_image_dialog).removeAttr('checked');
- });
-
- $('#img_persistent',dialog).click(function(){
- $('#img_public',$create_image_dialog).removeAttr('checked');
- });
-
-
-
$('#src_path_select input').click(function(){
var context = $create_image_dialog;
var value = $(this).val();
@@ -776,8 +774,6 @@ function setupCreateImageDialog(){
var type = $('#img_type',this).val();
img_json["TYPE"]= type;
- img_json["PUBLIC"] = $('#img_public:checked',this).length ? "YES" : "NO";
-
img_json["PERSISTENT"] = $('#img_persistent:checked',this).length ? "YES" : "NO";
var dev_prefix = $('#img_dev_prefix',this).val();
@@ -841,18 +837,19 @@ function popUpCreateImageDialog(){
function setupImageTemplateUpdateDialog(){
//Append to DOM
- dialogs_context.append('
');
+ dialogs_context.append('
');
var dialog = $('#image_template_update_dialog',dialogs_context);
//Put HTML in place
dialog.html(update_image_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:700,
modal:true,
- height:480,
+ height:height,
resizable:false,
});
@@ -860,62 +857,61 @@ function setupImageTemplateUpdateDialog(){
$('#image_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 = $('#image_template_update_dialog');
$('#image_template_update_textarea',dialog).val(tr("Loading")+
"...");
- var img_public = is_public_image(id);
- var img_persistent = is_persistent_image(id)
-
- if (img_public){
- $('#image_template_update_public',dialog).attr('checked','checked')
- } else {
- $('#image_template_update_public',dialog).removeAttr('checked')
- }
+ var img_persistent = is_persistent_image(id);
if (img_persistent){
$('#image_template_update_persistent',dialog).attr('checked','checked')
} else {
$('#image_template_update_persistent',dialog).removeAttr('checked')
- }
+ };
+ Sunstone.runAction("Image.fetch_permissions",id);
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');
+ $('.permissions_table input',dialog).change(function(){
+ $(this).parents('table').attr('update','update');
+ });
+
+ $('form',dialog).submit(function(){
+ var dialog = $(this);
var new_template = $('#image_template_update_textarea',dialog).val();
var id = $('#image_template_update_select',dialog).val();
if (!id || !id.length) {
- dialog.dialog('close');
+ $(this).parents('#image_template_update_dialog').dialog('close');
return false;
};
- var old_public = is_public_image(id)
var old_persistent = is_persistent_image(id);
-
- var new_public = $('#image_template_update_public:checked',dialog).length;
- var new_persistent = $('#image_template_update_persistent:checked',dialog).length;
-
- if (old_public != new_public){
- if (new_public) Sunstone.runAction("Image.publish",id);
- else Sunstone.runAction("Image.unpublish",id);
- };
-
+ var new_persistent = $('#image_template_update_persistent',dialog).is(':checked');
if (old_persistent != new_persistent){
if (new_persistent) Sunstone.runAction("Image.persistent",id);
else Sunstone.runAction("Image.nonpersistent",id);
};
+ var permissions = $('.permissions_table',dialog);
+ if (permissions.attr('update')){
+ var perms = {
+ octet : buildOctet(permissions)
+ };
+ Sunstone.runAction("Image.chmod",id,perms);
+ };
+
Sunstone.runAction("Image.update",id,new_template);
- dialog.dialog('close');
+ $(this).parents('#image_template_update_dialog').dialog('close');
return false;
});
-}
+};
function popUpImageTemplateUpdateDialog(){
@@ -931,8 +927,10 @@ function popUpImageTemplateUpdateDialog(){
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')
+ $('#image_template_update_persistent',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
@@ -947,14 +945,12 @@ function popUpImageTemplateUpdateDialog(){
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() {
@@ -968,43 +964,19 @@ function setImageAutorefresh() {
},INTERVAL+someTime());
};
-function is_public_image(id){
- var data = getElementData(id,"#image",dataTable_images)[7];
- return $(data).attr('checked');
-};
-
function is_persistent_image(id){
var data = getElementData(id,"#image",dataTable_images)[8];
- return $(data).attr('checked');
+ return $(data).is(':checked');
};
function setupImageActionCheckboxes(){
- $('input.action_cb#cb_public_image',dataTable_images).live("click",function(){
- var $this = $(this)
- var id=$this.attr('elem_id');
- if ($this.attr('checked')){
- if (!is_persistent_image(id))
- Sunstone.runAction("Image.publish",id);
- else {
- notifyError(tr("Image cannot be public and persistent"));
- return false;
- };
- } else Sunstone.runAction("Image.unpublish",id);
-
- return true;
- });
-
$('input.action_cb#cb_persistent_image',dataTable_images).live("click",function(){
var $this = $(this)
var id=$this.attr('elem_id');
- if ($this.attr('checked')){
- if (!is_public_image(id))
- Sunstone.runAction("Image.persistent",id);
- else {
- notifyError(tr("Image cannot be public and persistent"));
- return false;
- };
- } else Sunstone.runAction("Image.nonpersistent",id);
+ if ($this.attr('checked'))
+ Sunstone.runAction("Image.persistent",id);
+ else
+ Sunstone.runAction("Image.nonpersistent",id);
return true;
});
@@ -1029,21 +1001,21 @@ $(document).ready(function(){
"sPaginationType": "full_numbers",
"aoColumnDefs": [
{ "bSortable": false, "aTargets": ["check"] },
- { "sWidth": "60px", "aTargets": [0,2,3,8,9,10] },
- { "sWidth": "35px", "aTargets": [1,5,11] },
+ { "sWidth": "60px", "aTargets": [0,2,3,8,9] },
+ { "sWidth": "35px", "aTargets": [1,5,10] },
{ "sWidth": "100px", "aTargets": [6] },
{ "sWidth": "150px", "aTargets": [7] }
],
"oLanguage": (datatable_lang != "") ?
{
- sUrl: "locale/"+lang+"/"+datatable_lang
+ sUrl: "locale/"+lang+"/"+datatable_lang
} : ""
});
dataTable_images.fnClearTable();
addElement([
spinner,
- '','','','','','','','','','',''],dataTable_images);
+ '','','','','','','','','',''],dataTable_images);
Sunstone.runAction("Image.list");
setupCreateImageDialog();
@@ -1055,6 +1027,4 @@ $(document).ready(function(){
initCheckAllBoxes(dataTable_images);
tableCheckboxesListener(dataTable_images);
imageInfoListener();
-
-
-})
+});
diff --git a/src/sunstone/public/js/plugins/templates-tab.js b/src/sunstone/public/js/plugins/templates-tab.js
index f1d8f97d9c..40b47230cd 100644
--- a/src/sunstone/public/js/plugins/templates-tab.js
+++ b/src/sunstone/public/js/plugins/templates-tab.js
@@ -29,7 +29,6 @@ var templates_tab_content =
'+tr("Group")+' \
'+tr("Name")+' \
'+tr("Registration time")+' \
- '+tr("Public")+' \
\
\
\
@@ -592,8 +591,31 @@ var update_template_tmpl =
\
\
\
-
'+tr("Public")+': \
-
\
+
\
\
'+tr("Template")+': \
\
@@ -664,9 +686,7 @@ var template_actions = {
"Template.update_dialog" : {
type: "custom",
- call: function() {
- popUpTemplateTemplateUpdateDialog();
- }
+ call: popUpTemplateTemplateUpdateDialog
},
"Template.update" : {
@@ -687,32 +707,25 @@ var template_actions = {
error: onError
},
- "Template.publish" : {
+ "Template.fetch_permissions" : {
+ type: "single",
+ call: OpenNebula.Template.show,
+ callback: function(request,template_json){
+ var dialog = $('#template_template_update_dialog form');
+ var template = template_json.VMTEMPLATE;
+ setPermissionsTable(template,dialog);
+ },
+ error: onError
+ },
+
+ "Template.delete" : {
type: "multiple",
- call: OpenNebula.Template.publish,
- callback: templateShow,
+ call: OpenNebula.Template.delete,
+ callback: deleteTemplateElement,
elements: templateElements,
error: onError,
notify: true
- },
-
- "Template.unpublish" : {
- type: "multiple",
- call: OpenNebula.Template.unpublish,
- callback: templateShow,
- elements: templateElements,
- error: onError,
- notify: true
- },
-
- "Template.delete" : {
- type: "multiple",
- call: OpenNebula.Template.delete,
- callback: deleteTemplateElement,
- elements: templateElements,
- error: onError,
- notify: true
- },
+ },
"Template.instantiate" : {
type: "single",
@@ -746,7 +759,13 @@ var template_actions = {
elements: templateElements,
error:onError,
notify: true
- }
+ },
+ "Template.chmod" : {
+ type: "single",
+ call: OpenNebula.Template.chmod,
+ error: onError,
+ notify: true
+ },
}
var template_buttons = {
@@ -761,7 +780,7 @@ var template_buttons = {
},
"Template.update_dialog" : {
type: "action",
- text: tr("Update a template"),
+ text: tr("Update properties"),
alwaysActive: true
},
"Template.instantiate_vms" : {
@@ -838,10 +857,8 @@ function templateElementArray(template_json){
template.UNAME,
template.GNAME,
template.NAME,
- pretty_time(template.REGTIME),
- parseInt(template.PUBLIC) ? ' '
- : ' '
- ];
+ pretty_time(template.REGTIME)
+ ];
}
// Set up the listener on the table TDs to show the info panel
@@ -936,10 +953,19 @@ function updateTemplateInfo(request,template){
'+tr("Register time")+' \
'+pretty_time(template_info.REGTIME)+' \
\
- \
- '+tr("Public")+' \
- '+(parseInt(template_info.PUBLIC) ? tr("yes") : tr("no"))+' \
- \
+ \
+ \
+ '+tr("Owner permissions")+' \
+ '+ownerPermStr(template_info)+' \
+ \
+ \
+ '+tr("Group permissions")+' \
+ '+groupPermStr(template_info)+' \
+ \
+ \
+ '+tr("Other permissions")+' \
+ '+otherPermStr(template_info)+' \
+ \
'
};
var template_tab = {
@@ -2002,18 +2028,20 @@ function popUpCreateTemplateDialog(){
function setupTemplateTemplateUpdateDialog(){
//Append to DOM
- dialogs_context.append('
');
+ dialogs_context.append('
');
var dialog = $('#template_template_update_dialog',dialogs_context);
//Put HTML in place
dialog.html(update_template_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:700,
modal:true,
- height:480,
+ height:height,
resizable:false,
});
@@ -2021,43 +2049,42 @@ function setupTemplateTemplateUpdateDialog(){
$('#template_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 = $('#template_template_update_dialog');
$('#template_template_update_textarea',dialog).val(tr("Loading")+"...");
- var templ_public = is_public_template(id);
-
- if (templ_public){
- $('#template_template_update_public',dialog).attr('checked','checked')
- } else {
- $('#template_template_update_public',dialog).removeAttr('checked')
- }
-
+ Sunstone.runAction("Template.fetch_permissions",id);
Sunstone.runAction("Template.fetch_template",id);
} else {
$('#template_template_update_textarea',dialog).val("");
};
});
- $('#template_template_update_button',dialog).click(function(){
- var dialog = $('#template_template_update_dialog');
+ $('.permissions_table input',dialog).change(function(){
+ $(this).parents('table').attr('update','update');
+ });
+
+ $('form',dialog).submit(function(){
+ var dialog = $(this);
var new_template = $('#template_template_update_textarea',dialog).val();
var id = $('#template_template_update_select',dialog).val();
if (!id || !id.length) {
- dialog.dialog('close');
+ $(this).parents('#template_template_update_dialog').dialog('close');
return false;
};
- var old_public = is_public_template(id);
-
- var new_public = $('#template_template_update_public:checked',dialog).length;
-
- if (old_public != new_public){
- if (new_public) Sunstone.runAction("Template.publish",id);
- else Sunstone.runAction("Template.unpublish",id);
+ var permissions = $('.permissions_table',dialog);
+ if (permissions.attr('update')){
+ var perms = {
+ octet : buildOctet(permissions)
+ };
+ Sunstone.runAction("Template.chmod",id,perms);
};
Sunstone.runAction("Template.update",id,new_template);
+ $(this).parents('#template_template_update_dialog').dialog('close');
dialog.dialog('close');
return false;
});
@@ -2076,7 +2103,8 @@ function popUpTemplateTemplateUpdateDialog(){
var dialog = $('#template_template_update_dialog');
$('#template_template_update_select',dialog).html(select);
$('#template_template_update_textarea',dialog).val("");
- $('#template_template_update_public',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
@@ -2092,7 +2120,6 @@ function popUpTemplateTemplateUpdateDialog(){
$('#template_template_update_select option',dialog).attr('selected','selected');
$('#template_template_update_select',dialog).trigger("change");
};
-
};
dialog.dialog('open');
@@ -2110,25 +2137,8 @@ function setTemplateAutorefresh() {
Sunstone.runAction("Template.autorefresh");
}
},INTERVAL+someTime());
-}
-
-function is_public_template(id){
- var data = getElementData(id,"#template",dataTable_templates)[6];
- return $(data).attr('checked');
};
-function setupTemplateActionCheckboxes(){
- $('input.action_cb#cb_public_template',dataTable_templates).live("click",function(){
- var $this = $(this)
- var id=$this.attr('elem_id');
- if ($this.attr('checked'))
- Sunstone.runAction("Template.publish",id);
- else Sunstone.runAction("Template.unpublish",id);
-
- return true;
- });
-}
-
//The DOM is ready at this point
$(document).ready(function(){
@@ -2139,29 +2149,28 @@ $(document).ready(function(){
"sPaginationType": "full_numbers",
"aoColumnDefs": [
{ "bSortable": false, "aTargets": ["check"] },
- { "sWidth": "60px", "aTargets": [0,6] },
+ { "sWidth": "60px", "aTargets": [0] },
{ "sWidth": "35px", "aTargets": [1] },
{ "sWidth": "150px", "aTargets": [5] },
{ "sWidth": "100px", "aTargets": [2,3] }
],
- "oLanguage": (datatable_lang != "") ?
- {
- sUrl: "locale/"+lang+"/"+datatable_lang
- } : ""
+ "oLanguage": (datatable_lang != "") ?
+ {
+ sUrl: "locale/"+lang+"/"+datatable_lang
+ } : ""
});
dataTable_templates.fnClearTable();
addElement([
spinner,
- '','','','','',''],dataTable_templates);
+ '','','','',''],dataTable_templates);
Sunstone.runAction("Template.list");
setupCreateTemplateDialog();
setupTemplateTemplateUpdateDialog();
- setupTemplateActionCheckboxes();
setTemplateAutorefresh();
initCheckAllBoxes(dataTable_templates);
tableCheckboxesListener(dataTable_templates);
templateInfoListener();
-})
+});
diff --git a/src/sunstone/public/js/plugins/vms-tab.js b/src/sunstone/public/js/plugins/vms-tab.js
index a8f8caad3d..609f7ac91b 100644
--- a/src/sunstone/public/js/plugins/vms-tab.js
+++ b/src/sunstone/public/js/plugins/vms-tab.js
@@ -92,6 +92,54 @@ var create_vm_tmpl ='';
+var update_vm_tmpl =
+ '';
+
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,
@@ -241,6 +294,15 @@ var vm_actions = {
notify: true
},
+ "VM.reboot" : {
+ type: "multiple",
+ call: OpenNebula.VM.reboot,
+ callback: vmShow,
+ elements: vmElements,
+ error: onError,
+ notify: true
+ },
+
"VM.saveasmultiple" : {
type: "custom",
call: function(){
@@ -364,8 +426,24 @@ 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
+ },
+};
@@ -382,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"),
@@ -464,6 +548,11 @@ var vm_buttons = {
text: tr("Resubmit"),
tip: tr("This will resubmits VMs to PENDING state")
},
+ "VM.reboot" : {
+ type : "confirm",
+ text: tr("Reboot"),
+ tip: tr("This will send a reboot action to running VMs")
+ },
"VM.saveasmultiple" : {
type: "action",
text: tr("Save as")
@@ -659,7 +748,21 @@ function updateVMInfo(request,vm){
\
'+tr("Deploy ID")+' \
'+(typeof(vm_info.DEPLOY_ID) == "object" ? "-" : vm_info.DEPLOY_ID)+' \
- \
+ \
+ \
+ \
+ '+tr("Owner permissions")+' \
+ '+ownerPermStr(vm_info)+' \
+ \
+ \
+ '+tr("Group permissions")+' \
+ '+groupPermStr(vm_info)+' \
+ \
+ \
+ '+tr("Other permissions")+' \
+ '+otherPermStr(vm_info)+' \
+ \
+ \
\
\
\
@@ -908,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('
');
+ 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? 'Please select ' : "";
+ $('option',''+select+' ').each(function(){
+ var val = $(this).val();
+ if ($.inArray(val,sel_elems) >= 0){
+ new_select+=''+$(this).text()+' ';
+ };
+ });
+ $('#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(){
@@ -1069,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();
@@ -1082,6 +1278,7 @@ $(document).ready(function(){
Sunstone.runAction("VM.list");
setupCreateVMDialog();
+ setupVMTemplateUpdateDialog();
setupSaveasDialog();
setVMAutorefresh();
setupVNC();
diff --git a/src/sunstone/public/js/plugins/vnets-tab.js b/src/sunstone/public/js/plugins/vnets-tab.js
index b227fd2b64..c206a0aae1 100644
--- a/src/sunstone/public/js/plugins/vnets-tab.js
+++ b/src/sunstone/public/js/plugins/vnets-tab.js
@@ -30,7 +30,6 @@ var vnets_tab_content =
'+tr("Name")+' \
'+tr("Type")+' \
'+tr("Bridge")+' \
- '+tr("Public")+' \
'+tr("Total Leases")+' \
\
\
@@ -149,8 +148,31 @@ var update_vnet_tmpl =
\
\
\
-
'+tr("Public")+': \
-
\
+
\
\
'+tr("Template")+': \
\
@@ -299,6 +321,14 @@ var vnet_actions = {
notify: true
},
+ "Network.chmod" : {
+ type: "single",
+ call: OpenNebula.Network.chmod,
+// callback
+ error: onError,
+ notify: true
+ },
+
"Network.fetch_template" : {
type: "single",
call: OpenNebula.Network.fetch_template,
@@ -308,11 +338,20 @@ var vnet_actions = {
error: onError
},
+ "Network.fetch_permissions" : {
+ type: "single",
+ call: OpenNebula.Network.show,
+ callback: function(request,vnet_json){
+ var dialog = $('#vnet_template_update_dialog form');
+ var vnet = vnet_json.VNET;
+ setPermissionsTable(vnet,dialog);
+ },
+ error: onError
+ },
+
"Network.update_dialog" : {
type: "custom",
- call: function() {
- popUpVNetTemplateUpdateDialog();
- }
+ call: popUpVNetTemplateUpdateDialog
},
"Network.update" : {
@@ -341,20 +380,10 @@ var vnet_buttons = {
"Network.update_dialog" : {
type: "action",
- text: tr("Update a template"),
+ text: tr("Update properties"),
alwaysActive: true
},
- "Network.publish" : {
- type: "action",
- text: tr("Publish")
- },
-
- "Network.unpublish" : {
- type: "action",
- text: tr("Unpublish")
- },
-
"Network.chown" : {
type: "confirm_with_select",
text: tr("Change owner"),
@@ -419,8 +448,6 @@ function vNetworkElementArray(vn_json){
network.NAME,
parseInt(network.TYPE) ? "FIXED" : "RANGED",
network.BRIDGE,
- parseInt(network.PUBLIC) ? ' '
- : ' ',
network.TOTAL_LEASES ];
}
@@ -487,11 +514,11 @@ function updateVNetworkInfo(request,vn){
\
'+tr("ID")+' \
'+vn_info.ID+' \
- \
+ \
\
'+tr("Name")+' \
'+vn_info.NAME+' \
- \
+ \
\
'+tr("Owner")+' \
'+vn_info.UNAME+' \
@@ -500,10 +527,6 @@ function updateVNetworkInfo(request,vn){
'+tr("Group")+' \
'+vn_info.GNAME+' \
\
- \
- '+tr("Public")+' \
- '+(parseInt(vn_info.PUBLIC) ? "yes" : "no" )+' \
- \
\
'+tr("Physical device")+' \
'+ (typeof(vn_info.PHYDEV) == "object" ? "--": vn_info.PHYDEV) +' \
@@ -512,6 +535,19 @@ function updateVNetworkInfo(request,vn){
'+tr("VNET ID")+' \
'+ (typeof(vn_info.VLAN_ID) == "object" ? "--": vn_info.VLAN_ID) +' \
\
+ \
+ \
+ '+tr("Owner permissions")+' \
+ '+ownerPermStr(vn_info)+' \
+ \
+ \
+ '+tr("Group permissions")+' \
+ '+groupPermStr(vn_info)+' \
+ \
+ \
+ '+tr("Other permissions")+' \
+ '+otherPermStr(vn_info)+' \
+ \
';
info_tab_content += '\
@@ -802,7 +838,7 @@ function setupCreateVNetDialog() {
if (ip_start.length)
network_json["vnet"]["ip_start"] = ip_start;
if (ip_end.length)
- network_json["vnet"]["ip_start"] = ip_end;
+ network_json["vnet"]["ip_end"] = ip_end;
};
};
@@ -836,63 +872,63 @@ function popUpCreateVnetDialog() {
function setupVNetTemplateUpdateDialog(){
//Append to DOM
- dialogs_context.append('
');
+ dialogs_context.append('
');
var dialog = $('#vnet_template_update_dialog',dialogs_context);
//Put HTML in place
dialog.html(update_vnet_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:700,
modal:true,
- height:480,
- resizable:false,
+ height:height,
+ resizable:true,
});
$('button',dialog).button();
$('#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');
$('#vnet_template_update_textarea',dialog).val(tr("Loading")+"...");
- var vnet_public = is_public_vnet(id);
-
- if (vnet_public){
- $('#vnet_template_update_public',dialog).attr('checked','checked')
- } else {
- $('#vnet_template_update_public',dialog).removeAttr('checked')
- }
-
+ Sunstone.runAction("Network.fetch_permissions",id);
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');
+ $('.permissions_table input',dialog).change(function(){
+ $(this).parents('table').attr('update','update');
+ });
+
+ $('form',dialog).submit(function(){
+ var dialog = $(this);
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 old_public = is_public_vnet(id);
-
- var new_public = $('#vnet_template_update_public:checked',dialog).length;
-
- if (old_public != new_public){
- if (new_public) Sunstone.runAction("Network.publish",id);
- else Sunstone.runAction("Network.unpublish",id);
+ var permissions = $('.permissions_table',dialog);
+ if (permissions.attr('update')){
+ var perms = {
+ octet : buildOctet(permissions)
+ };
+ Sunstone.runAction("Network.chmod",id,perms);
};
Sunstone.runAction("Network.update",id,new_template);
- dialog.dialog('close');
+ $(this).parents('#vnet_template_update_dialog').dialog('close');
return false;
});
};
@@ -910,7 +946,8 @@ function popUpVNetTemplateUpdateDialog(){
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')
+ $('.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
@@ -925,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');
@@ -999,23 +1035,6 @@ function setVNetAutorefresh() {
},INTERVAL+someTime());
};
-function is_public_vnet(id) {
- var data = getElementData(id,"#vnetwork",dataTable_vNetworks)[7];
- return $(data).is(":checked");
-};
-
-function setupVNetActionCheckboxes(){
- $('input.action_cb#cb_public_vnet',dataTable_vNetworks).live("click",function(){
- var $this = $(this)
- var id=$this.attr('elem_id');
- if ($this.attr('checked'))
- Sunstone.runAction("Network.publish",id);
- else Sunstone.runAction("Network.unpublish",id);
-
- return true;
- });
-}
-
//The DOM is ready and the ready() from sunstone.js
//has been executed at this point.
$(document).ready(function(){
@@ -1027,7 +1046,7 @@ $(document).ready(function(){
"sPaginationType": "full_numbers",
"aoColumnDefs": [
{ "bSortable": false, "aTargets": ["check"] },
- { "sWidth": "60px", "aTargets": [0,5,6,7,8] },
+ { "sWidth": "60px", "aTargets": [0,5,6,7] },
{ "sWidth": "35px", "aTargets": [1] },
{ "sWidth": "100px", "aTargets": [2,3] }
],
@@ -1040,13 +1059,12 @@ $(document).ready(function(){
dataTable_vNetworks.fnClearTable();
addElement([
spinner,
- '','','','','','','',''],dataTable_vNetworks);
+ '','','','','','',''],dataTable_vNetworks);
Sunstone.runAction("Network.list");
setupCreateVNetDialog();
setupVNetTemplateUpdateDialog();
setupLeasesOps();
- setupVNetActionCheckboxes();
setVNetAutorefresh();
initCheckAllBoxes(dataTable_vNetworks);
diff --git a/src/sunstone/public/js/sunstone-util.js b/src/sunstone/public/js/sunstone-util.js
index 7938deb026..d1f2669bad 100644
--- a/src/sunstone/public/js/sunstone-util.js
+++ b/src/sunstone/public/js/sunstone-util.js
@@ -16,7 +16,7 @@
/* Some useful functions for Sunstone default plugins */
-var INTERVAL=60000; //milisecs
+var INTERVAL=300000; //milisecs
function someTime(){
return Math.floor(Math.random()*30000);
@@ -743,3 +743,126 @@ function groups_sel(){
function hosts_sel(){
return hosts_select;
}
+
+function ownerUse(resource){
+ return parseInt(resource.PERMISSIONS.OWNER_U);
+};
+function ownerManage(resource){
+ return parseInt(resource.PERMISSIONS.OWNER_M);
+};
+function ownerAdmin(resource){
+ return parseInt(resource.PERMISSIONS.OWNER_A);
+};
+
+function groupUse(resource){
+ return parseInt(resource.PERMISSIONS.GROUP_U);
+};
+function groupManage(resource){
+ return parseInt(resource.PERMISSIONS.GROUP_M);
+};
+function groupAdmin(resource){
+ return parseInt(resource.PERMISSIONS.GROUP_A);
+};
+
+function otherUse(resource){
+ return parseInt(resource.PERMISSIONS.OTHER_U);
+};
+function otherManage(resource){
+ return parseInt(resource.PERMISSIONS.OTHER_M);
+};
+function otherAdmin(resource){
+ return parseInt(resource.PERMISSIONS.OTHER_A);
+};
+
+
+function ownerPermStr(resource){
+ var result = "";
+ if (ownerUse(resource))
+ result += tr("Use")+", ";
+ if (ownerManage(resource))
+ result += tr("Manage")+", ";
+ if (ownerAdmin(resource))
+ result += tr("Administrate")+", ";
+
+ //Remove ", " from end
+ result = result.substring(0,result.length-2);
+ return result;
+};
+
+function groupPermStr(resource){
+ var result = "";
+ if (groupUse(resource))
+ result += tr("Use")+", ";
+ if (groupManage(resource))
+ result += tr("Manage")+", ";
+ if (groupAdmin(resource))
+ result += tr("Administrate")+", ";
+
+ //Remove ", " from end
+ result = result.substring(0,result.length-2);
+ return result;
+};
+
+function otherPermStr(resource){
+ var result = "";
+ if (otherUse(resource))
+ result += tr("Use")+", ";
+ if (otherManage(resource))
+ result += tr("Manage")+", ";
+ if (otherAdmin(resource))
+ result += tr("Administrate")+", ";
+
+ //Remove ", " from end
+ result = result.substring(0,result.length-2);
+ return result;
+};
+
+function setPermissionsTable(resource,context){
+ if (ownerUse(resource))
+ $('.owner_u',context).attr('checked','checked');
+ if (ownerManage(resource))
+ $('.owner_m',context).attr('checked','checked');
+ if (ownerAdmin(resource))
+ $('.owner_a',context).attr('checked','checked');
+ if (groupUse(resource))
+ $('.group_u',context).attr('checked','checked');
+ if (groupManage(resource))
+ $('.group_m',context).attr('checked','checked');
+ if (groupAdmin(resource))
+ $('.group_a',context).attr('checked','checked');
+ if (otherUse(resource))
+ $('.other_u',context).attr('checked','checked');
+ if (otherManage(resource))
+ $('.other_m',context).attr('checked','checked');
+ if (otherAdmin(resource))
+ $('.other_a',context).attr('checked','checked');
+};
+
+function buildOctet(permTable){
+ var owner=0;
+ var group=0;
+ var other=0;
+
+ if ($('.owner_u',permTable).is(':checked'))
+ owner+=4;
+ if ($('.owner_m',permTable).is(':checked'))
+ owner+=2;
+ if ($('.owner_a',permTable).is(':checked'))
+ owner+=1;
+
+ if ($('.group_u',permTable).is(':checked'))
+ group+=4;
+ if ($('.group_m',permTable).is(':checked'))
+ group+=2;
+ if ($('.group_a',permTable).is(':checked'))
+ group+=1;
+
+ if ($('.other_u',permTable).is(':checked'))
+ other+=4;
+ if ($('.other_m',permTable).is(':checked'))
+ other+=2;
+ if ($('.other_a',permTable).is(':checked'))
+ other+=1;
+
+ return ""+owner+group+other;
+};
\ No newline at end of file
diff --git a/src/sunstone/public/locale/en_US/en_US.js b/src/sunstone/public/locale/en_US/en_US.js
index 1c0df1f1fe..39fef7f845 100644
--- a/src/sunstone/public/locale/en_US/en_US.js
+++ b/src/sunstone/public/locale/en_US/en_US.js
@@ -19,6 +19,8 @@ locale={
"Add lease":"",
"Add network":"",
"Add placement options":"",
+ "Admin":"",
+ "Administrate":"",
"Advanced mode":"",
"Affected resources":"",
"All":"",
@@ -132,14 +134,12 @@ locale={
"Format":"",
"FS":"",
"FS type":"",
- "Get Information":"",
- "Get Pool of my/group\'s resources":"",
- "Get Pool of resources":"",
"Graphics":"",
"Graphics type":"",
"Group":"",
"Group ":"",
"Group name":"",
+ "Group permissions":"",
"Groups":"",
"Hardware that will emulate this network interface. With Xen this is the type attribute of the vif.":"",
"hd":"",
@@ -166,7 +166,6 @@ locale={
"ID":"",
"IDE":"",
"Image":"",
- "Image cannot be public and persistent":"",
"Image information":"",
"Image name":"",
"Images":"",
@@ -248,8 +247,11 @@ locale={
"Optional, please select":"",
"OS":"",
"OS and Boot options":"",
+ "Other":"",
+ "Other permissions":"",
"Owned by group":"",
"Owner":"",
+ "Owner permissions":"",
"PAE":"",
"Password":"",
"Password for the VNC server":"",
@@ -260,6 +262,7 @@ locale={
"Path to the OS kernel to boot the image":"",
"Path vs. source":"",
"Percentage of CPU divided by 100 required for the Virtual Machine. Half a processor is written 0.5.":"",
+ "Permissions":"",
"Permits access to the VM only through the specified ports in the TCP protocol":"",
"Permits access to the VM only through the specified ports in the UDP protocol":"",
"Persistence of the image":"",
@@ -270,6 +273,7 @@ locale={
"Please choose":"",
"Please, choose and modify the image you want to update":"",
"Please, choose and modify the template you want to update":"",
+ "Please, choose and modify the virtual machine you want to update":"",
"Please, choose and modify the virtual network you want to update":"",
"Please choose path if you have a file-based image. Choose source otherwise or create an empty datablock disk.":"",
"Please choose the new type of authentication for the selected users":"",
@@ -290,7 +294,6 @@ locale={
"Provide a source":"",
"PS2":"",
"Public":"",
- "Public scope of the image":"",
"Publish":"",
"Quickstart":"",
"Ranged network":"",
@@ -298,6 +301,7 @@ locale={
"Raw":"",
"Raw data to be passed directly to the hypervisor":"",
"Read only":"",
+ "Reboot":"",
"Refresh list":"",
"Register time":"",
"Registration time":"",
@@ -329,6 +333,7 @@ locale={
"Select a network":"",
"Select an image":"",
"Select a template":"",
+ "Select a VM":"",
"Select boot method":"",
"Select disk":"",
"Select template":"",
@@ -390,6 +395,7 @@ locale={
"This will release held machines":"",
"This will resubmits VMs to PENDING state":"",
"This will resume selected stopped or suspended VMs":"",
+ "This will send a reboot action to running VMs":"",
"This will suspend selected machines":"",
"TM MAD":"",
"total":"",
@@ -410,9 +416,12 @@ locale={
"Unpublish":"",
"Update":"",
"Update a template":"",
- "Update image template":"",
- "Update network template":"",
+ "Update image properties":"",
+ "Update network properties":"",
+ "Update properties":"",
"Update template":"",
+ "Update template properties":"",
+ "Update VM properties":"",
"USB":"",
"Use":"",
"Used by VM":"",
diff --git a/src/sunstone/public/locale/ru/ru.js b/src/sunstone/public/locale/ru/ru.js
index 1c0df1f1fe..dfa8fd1be1 100644
--- a/src/sunstone/public/locale/ru/ru.js
+++ b/src/sunstone/public/locale/ru/ru.js
@@ -1,79 +1,82 @@
-//Translated by
-lang="en_US"
-datatable_lang=""
+//Translated by JSC "VIVOSS and OI", 2011
+//Переведено ЗАО «ВИВОСС и ОИ», 2011
+lang="ru"
+datatable_lang="ru_datatable.txt"
locale={
- "Accept (default)":"",
- "Acl":"",
- "ACL Rules":"",
- "ACLs":"",
+ "Accept (default)":"Принять (по умолчанию)",
+ "Acl":"Список контроля доступа",
+ "ACL Rules":"Правила контроля доступа",
+ "ACLs":"Списки контроля",
"ACL String preview":"",
- "ACPI":"",
- "Add":"",
- "Add context variables":"",
- "Add custom variables":"",
- "Add disk/image":"",
- "Add disks/images":"",
- "Add Graphics":"",
- "Add Hypervisor raw options":"",
- "Add inputs":"",
- "Add lease":"",
- "Add network":"",
- "Add placement options":"",
- "Advanced mode":"",
- "Affected resources":"",
- "All":"",
- "Allowed operations":"",
- "Amount of RAM required for the VM, in Megabytes.":"",
- "Applies to":"",
+ "ACPI":"ACPI",
+ "Add":"Добавить",
+ "Add context variables":"Добавить контекстные переменные",
+ "Add custom variables":"Добавить пользовательские переменные",
+ "Add disk/image":"Добавить диск/образ",
+ "Add disks/images":"Добавить диски/образы",
+ "Add Graphics":"Добавить графические устройства",
+ "Add Hypervisor raw options":"Добавить исходные опции гипервизора",
+ "Add inputs":"Добавить устройства ввода",
+ "Add lease":"Добавить адрес",
+ "Add network":"Добавить сеть",
+ "Add placement options":"Добавить опции размещения",
+ "Admin":"",
+ "Administrate":"",
+ "Advanced mode":"Расширенный режим",
+ "Affected resources":"Затрагиваемые правилом ресурсы",
+ "All":"Все",
+ "Allowed operations":"Разрешенные действия",
+ "Amount of RAM required for the VM, in Megabytes.":"Объем ОЗУ (в МБ), необходимый для ВМ.",
+ "Applies to":"Применено к",
"Architecture":"",
- "are mandatory":"",
- "Arguments for the booting kernel":"",
+ "are mandatory":"обязательные",
+ "Arguments for the booting kernel":"Параметры для загрузки ядра",
"Authentication":"",
"Authentication driver":"",
- "Block":"",
- "Boolean expression that rules out provisioning hosts from list of machines suitable to run this VM":"",
+ "Block":"Block",
+ "Boolean expression that rules out provisioning hosts from list of machines suitable to run this VM":"Логическое выражение, исключающее элементы из списка узлов, подходящих для запуска данной ВМ",
"Boot":"",
- "Boot device type":"",
+ "Boot device type":"Тип устройства загрузки",
"Bootloader":"",
"Boot method":"",
- "Boot/OS options":"",
- "Bridge":"",
+ "Boot/OS options":"Загрузка и тип ОС",
+ "Bridge":"Шлюз",
"Bus":"",
- "Cancel":"",
+ "Cancel":"Отменить",
"Cannot contact server: is it running and reachable?":"",
- "Canvas not supported.":"",
- "Capacity":"",
- "Capacity options":"",
- "cdrom":"",
- "CD-ROM":"",
+ "Canvas not supported.":"Canvas не поддерживается.",
+ "Capacity":"Производительность",
+ "Capacity options":"Настройки производительности",
+ "cdrom":"cdrom",
+ "CD-ROM":"CD-ROM",
"Change":"",
"Change authentication":"",
- "Change group":"",
- "Change owner":"",
+ "Change group":"Сменить группу",
+ "Change owner":"Сменить владельца",
"Change password":"",
"Changing language":"",
"Clone":"",
- "Clone this image":"",
+ "Clone this image":"Клонировать образ",
"Community":"",
"Configuration":"",
- "Confirmation of action":"",
- "Context":"",
- "Context variable name and value must be filled in":"",
+ "Confirmation of action":"Подтверждение действия",
+ "Context":"Контекст",
+ "Context variable name and value must be filled in":"Поля «Имя переменной» и «Значение» должны быть заполнены",
"Core":"",
- "CPU":"",
- "CPU architecture to virtualization":"",
- "CPU Monitoring information":"",
- "CPU Use":"",
- "Create":"",
- "Create ACL":"",
- "Create an empty datablock":"",
- "Create group":"",
- "Create host":"",
+ "CPU":"ЦП",
+ "CPU architecture to virtualization":"Архитектура ЦП для виртуализации",
+ "CPU Monitoring information":"Мониторинг ЦП",
+ "CPU Use":"Использование ЦП",
+ "Create":"Создать",
+ "Create ACL":"Создать список контроля",
+ "Create an empty datablock":"Создать пустой блок данных",
+ "Create group":"Создать группу",
+ "Create host":"Создать узел",
"Create Image":"",
- "Create user":"",
- "Create Virtual Machine":"",
- "Create Virtual Network":"",
- "Create VM Template":"",
+ "Create user":"Создать пользователя",
+ "Create Virtual Machine":"Создать виртуальную машину",
+ "Create Virtual Network":"Создать виртуальную сеть",
+ "Create VM Template":"Создать шаблон ВМ",
"Current disks":"",
"Current inputs":"",
"Current leases":"",
@@ -81,402 +84,415 @@ locale={
"Current variables":"",
"Custom attribute name and value must be filled in":"",
"Custom attributes":"",
- "Custom variable name and value must be filled in":"",
- "Custom variables":"",
- "Dashboard":"",
+ "Custom variable name and value must be filled in":"Поля «Имя переменной» и «Значение» должны быть заполнены",
+ "Custom variables":"Пользовательские переменные",
+ "Dashboard":"Инф. панель",
"Data":"",
- "Datablock":"",
- "Default":"",
+ "Datablock":"Блок данных",
+ "Default":"По умолчанию",
"Default (current image type)":"",
"Define a subnet by IP range":"",
- "Delete":"",
- "Delete host":"",
- "Deploy":"",
- "Deploy ID":"",
+ "Delete":"Удалить",
+ "Delete host":"Удалить узел",
+ "Deploy":"Разместить на узле",
+ "Deploy ID":"№ размещения",
"Deploy # VMs":"",
"Description":"",
"Device prefix":"",
- "Device to be mounted as root":"",
- "Device to map image disk. If set, it will overwrite the default device mapping":"",
- "Disable":"",
+ "Device to be mounted as root":"Устройство, монтируемое как корневое",
+ "Device to map image disk. If set, it will overwrite the default device mapping":"Устройство для образа диска. Если установлено, то оно перезапищет устройсво картографирования по умолчанию.",
+ "Disable":"Отключить",
"disabled":"",
- "Disallow access to the VM through the specified ports in the TCP protocol":"",
- "Disallow access to the VM through the specified ports in the UDP protocol":"",
- "Disk":"",
- "Disk file location path or URL":"",
+ "Disallow access to the VM through the specified ports in the TCP protocol":"Запретить доступ к ВМ через указанные порты для TCP протокола",
+ "Disallow access to the VM through the specified ports in the UDP protocol":"Запретить доступ к ВМ через указанные порты для UDP протокола",
+ "Disk":"Диск",
+ "Disk file location path or URL":"Путь расположения файла диска или URL",
"disk id":"",
- "Disks":"",
- "Disk type":"",
+ "Disks":"Диски",
+ "Disk type":"Тип диска",
"Documentation":"",
- "Do you want to proceed?":"",
+ "Do you want to proceed?":"Хотите продолжить?",
"Driver":"",
- "Driver default":"",
- "Drivers":"",
- "Drop":"",
- "Dummy":"",
- "EC2":"",
- "Enable":"",
+ "Driver default":"Драйвер по умолчанию",
+ "Drivers":"Драйверы",
+ "Drop":"Сбросить",
+ "Dummy":"Заглушка",
+ "EC2":"EC2",
+ "Enable":"Включить",
"English":"",
- "Error":"",
- "failed":"",
- "fd":"",
- "Features":"",
- "Fields marked with":"",
- "File":"",
+ "Error":"Ошибка",
+ "failed":"дефектных",
+ "fd":"fd",
+ "Features":"Особенности",
+ "Fields marked with":"Поля помеченные",
+ "File":"Файл",
"Filesystem type":"",
- "Filesystem type for the fs images":"",
+ "Filesystem type for the fs images":"Тип файловой системы для образов ФС",
"Fill in a new password":"",
- "Fixed network":"",
- "Floppy":"",
- "Fold / Unfold all sections":"",
+ "Fixed network":"Фиксированные адреса",
+ "Floppy":"Floppy",
+ "Fold / Unfold all sections":"Свернуть/развернуть все разделы",
"Format":"",
- "FS":"",
+ "FS":"FS",
"FS type":"",
- "Get Information":"",
- "Get Pool of my/group\'s resources":"",
- "Get Pool of resources":"",
- "Graphics":"",
+ "Graphics":"Графические устройства",
"Graphics type":"",
- "Group":"",
+ "Group":"Группа пользователей",
"Group ":"",
"Group name":"",
- "Groups":"",
- "Hardware that will emulate this network interface. With Xen this is the type attribute of the vif.":"",
- "hd":"",
- "Historical monitoring information":"",
+ "Group permissions":"",
+ "Groups":"Группы",
+ "Hardware that will emulate this network interface. With Xen this is the type attribute of the vif.":"Аппаратное устройствое, которое будет отвечать за эмуляцию сетевого интерфейса. Для Xen это атрибут vif.",
+ "hd":"hd",
+ "Historical monitoring information":"Мониторинг состояния",
"hold":"",
- "Hold":"",
+ "Hold":"Запретить размещение",
"Hold lease":"",
- "Host":"",
- "Host information":"",
- "Hostname":"",
+ "Host":"Узел",
+ "Host information":"Состояние узла",
+ "Hostname":"Название узла",
"Host name missing!":"",
- "Host parameters":"",
- "Hosts":"",
- "Hosts CPU":"",
- "Host shares":"",
- "Hosts memory":"",
- "Hosts (total/active)":"",
- "Host template":"",
- "Human readable description of the image for other users.":"",
- "HW address associated with the network interface":"",
+ "Host parameters":"Параметры узла",
+ "Hosts":"Узлы",
+ "Hosts CPU":"Загрузка ЦП",
+ "Host shares":"Ресурсы узла",
+ "Hosts memory":"Загрузка ОЗУ",
+ "Hosts (total/active)":"Узлы (всего/из них активных)",
+ "Host template":"Шаблон узла",
+ "Human readable description of the image for other users.":"Краткое описание образа.",
+ "HW address associated with the network interface":"MAC-адрес, связанный с сетевым интерфейсом",
"Icmp":"",
- "ICMP policy":"",
- "id":"",
- "ID":"",
- "IDE":"",
- "Image":"",
- "Image cannot be public and persistent":"",
- "Image information":"",
+ "ICMP policy":"Политика ICMP",
+ "id":"№",
+ "ID":"№",
+ "IDE":"IDE",
+ "Image":"Образ",
+ "Image information":"Информация об образе",
"Image name":"",
- "Images":"",
- "Images (total/public)":"",
- "Image template":"",
- "IM MAD":"",
- "Info":"",
- "information":"",
- "Information":"",
+ "Images":"Образы ВМ",
+ "Images (total/public)":"Образы (всего/из них открытых)",
+ "Image template":"Шаблон образа",
+ "IM MAD":"Модуль ср-ва мониторинга",
+ "Info":"Информация",
+ "information":" ",
+ "Information":"Информация",
"Information Manager":"",
"Initrd":"",
- "Inputs":"",
- "Instantiate":"",
- "IP":"",
+ "Inputs":"Устройства ввода",
+ "Instantiate":"Создать экземпляр ВМ",
+ "IP":"IP-адрес",
"IP End":"",
"IP Start":"",
- "IP to listen on":"",
+ "IP to listen on":"IP-адрес для прослушивания",
"Kernel":"",
"Kernel commands":"",
- "Keyboard configuration locale to use in the VNC display":"",
- "Keymap":"",
- "KVM":"",
+ "Keyboard configuration locale to use in the VNC display":"Раскладка клавиатуры, используемая при работе с VNC-дисплеем",
+ "Keymap":"Раскладка клавиатуры",
+ "KVM":"KVM",
"Language":"",
- "LCM State":"",
+ "LCM State":"Текущее состояние ВМ",
"Lease IP":"",
- "Lease MAC (opt):":"",
+ "Lease MAC (opt):":"MAC-адрес (необяз.):",
"Lease management":"",
- "Leases information":"",
+ "Leases information":"Сведения по имеющимся адресам виртуальной сети",
"Listen IP":"",
- "Live migrate":"",
- "Loading":"",
- "MAC":"",
- "Make non persistent":"",
- "Make persistent":"",
- "Manage":"",
- "Manual":"",
- "Max Mem":"",
- "Memory":"",
- "Memory monitoring information":"",
- "Memory use":"",
- "Migrate":"",
+ "Live migrate":"Перенести запущенную ВМ",
+ "Loading":"Идет загрузка",
+ "MAC":"MAC-адрес",
+ "Make non persistent":"Сделать непостоянным",
+ "Make persistent":"Сделать постоянным",
+ "Manage":"Управлять",
+ "Manual":"В ручную",
+ "Max Mem":"Доступно ОЗУ",
+ "Memory":"Память",
+ "Memory monitoring information":"Мониторинг ОЗУ",
+ "Memory use":"Использование ОЗУ",
+ "Migrate":"Перенести ВМ",
"Model":"",
- "Monitoring information":"",
- "Mount image as read-only":"",
- "Mouse":"",
- "Name":"",
- "Name for the context variable":"",
- "Name for the custom variable":"",
- "Name for the tun device created for the VM":"",
- "Name of a shell script to be executed after creating the tun device for the VM":"",
- "Name of the bridge the network device is going to be attached to":"",
- "Name of the image to use":"",
- "Name of the network to attach this device":"",
- "Name that the Image will get. Every image must have a unique name.":"",
- "Name that the VM will get for description purposes. If NAME is not supplied a name generated by one will be in the form of one-<VID>.":"",
- "Net_RX":"",
- "Net_TX":"",
- "network":"",
- "Network":"",
+ "Monitoring information":"Мониторинг",
+ "Mount image as read-only":"Монтировать образ только для чтения",
+ "Mouse":"Мышь",
+ "Name":"Название",
+ "Name for the context variable":"Имя контекстной переменной",
+ "Name for the custom variable":"Имя пользовательской переменной",
+ "Name for the tun device created for the VM":"Имя сетевого туннеля, созданного для ВМ",
+ "Name of a shell script to be executed after creating the tun device for the VM":"shell-скрипт, который будет выполнен после создания сетевого туннеля для ВМ",
+ "Name of the bridge the network device is going to be attached to":"Шлюз, с которым будет связано сетевое устройство",
+ "Name of the image to use":"Название образа для использования",
+ "Name of the network to attach this device":"Сеть, подключаемая к данному устройству",
+ "Name that the Image will get. Every image must have a unique name.":"Название, которое получит образ. Каждый образ должен обладать уникальным названием.",
+ "Name that the VM will get for description purposes. If NAME is not supplied a name generated by one will be in the form of one-<VID>.":"Название, которое получит ВМ. Если название не будет указано, то оно будет сгенерировано в формате one-<№ ВМ>.",
+ "Net_RX":"Принято",
+ "Net_TX":"Отправлено",
+ "network":"network",
+ "Network":"Сеть",
"Network Address":"",
"Network is unreachable: is OpenNebula running?":"",
"Network mask":"",
"Network Mask":"",
- "Network reception":"",
- "Network transmission":"",
+ "Network reception":"Сеть: принято",
+ "Network transmission":"Сеть: отправлено",
"Network type":"",
"New":"",
- "+ New":"",
- "+ New Group":"",
+ "+ New":"Добавить",
+ "+ New Group":"Создать группу",
"New password":"",
- "No":"",
+ "No":"Нет",
"No disk id or image name specified":"",
- "No disks defined":"",
+ "No disks defined":"Дисков не обнаружено",
"No leases to show":"",
- "None":"",
- "Number of virtual cpus. This value is optional, the default hypervisor behavior is used, usually one virtual CPU.":"",
- "OK":"",
- "Open VNC Session":"",
- "Optional, please select":"",
- "OS":"",
- "OS and Boot options":"",
- "Owned by group":"",
- "Owner":"",
+ "None":"Никакой",
+ "Number of virtual cpus. This value is optional, the default hypervisor behavior is used, usually one virtual CPU.":"Количество виртуальных процессоров. Это значение опционально, используется поведение гипервизора по умолчанию - один виртуальный ЦП.",
+ "OK":"OK",
+ "Open VNC Session":"Открыть VNC-сессию",
+ "Optional, please select":"Опционально, пожалуйста выберите",
+ "OS":"ОС",
+ "OS and Boot options":"Опции загрузки и ОС",
+ "Other":"",
+ "Other permissions":"",
+ "Owned by group":"Принадлежит группе",
+ "Owner":"Владелец",
+ "Owner permissions":"",
"PAE":"",
"Password":"",
- "Password for the VNC server":"",
+ "Password for the VNC server":"Пароль для VNC сервера",
"Path":"",
- "Path to the bootloader executable":"",
- "Path to the initrd image":"",
- "Path to the original file that will be copied to the image repository. If not specified for a DATABLOCK type image, an empty image will be created.":"",
- "Path to the OS kernel to boot the image":"",
+ "Path to the bootloader executable":"Путь к исполняемому файлу загрузчика",
+ "Path to the initrd image":"Путь к образу initrd",
+ "Path to the original file that will be copied to the image repository. If not specified for a DATABLOCK type image, an empty image will be created.":"Путь к исходному файлу, который будет скопирован в хранилище образов. Если путь не указан для типа образа БЛОК ДАННЫХ, то будет создан пустой образ.",
+ "Path to the OS kernel to boot the image":"Путь к ядру ОС для загрузки образа",
"Path vs. source":"",
- "Percentage of CPU divided by 100 required for the Virtual Machine. Half a processor is written 0.5.":"",
- "Permits access to the VM only through the specified ports in the TCP protocol":"",
- "Permits access to the VM only through the specified ports in the UDP protocol":"",
- "Persistence of the image":"",
- "Persistent":"",
- "Physical address extension mode allows 32-bit guests to address more than 4 GB of memory":"",
+ "Percentage of CPU divided by 100 required for the Virtual Machine. Half a processor is written 0.5.":"Процент процессорного времени ЦП, предоставлемого ВМ, разделенный на 100. Например, для выделения половины процессорного времени следует указать 0.5.",
+ "Permissions":"",
+ "Permits access to the VM only through the specified ports in the TCP protocol":"Разрешить доступ к ВМ только через указанные порты протокола TCP",
+ "Permits access to the VM only through the specified ports in the UDP protocol":"Разрешить доступ к ВМ только через указанные порты протокола UPD",
+ "Persistence of the image":"Если образ является постоянным, то при каждом завершении работы с полученной на его основе виртуальной машиной все изменения будут сохранены в образе.
+
+ Важно помнить, что сохранение выполнится только в случае завершения работы соответствующей ВМ при помощи операций «Выключить» и «Отменить».
+
+Постоянный образ всегда хранится в одном экземпляре.",
+ "Persistent":"Постоянный",
+ "Physical address extension mode allows 32-bit guests to address more than 4 GB of memory":"Режим расширенной физической адресации позволяет использовать 32-битным ВМ больше 4-х ГБ ",
"Physical device":"",
- "Placement":"",
- "Please choose":"",
+ "Placement":"Размещение",
+ "Please choose":"Пожалуйста выберите",
"Please, choose and modify the image you want to update":"",
"Please, choose and modify the template you want to update":"",
+ "Please, choose and modify the virtual machine you want to update":"",
"Please, choose and modify the virtual network you want to update":"",
- "Please choose path if you have a file-based image. Choose source otherwise or create an empty datablock disk.":"",
+ "Please choose path if you have a file-based image. Choose source otherwise or create an empty datablock disk.":"«Путь к эталонному файлу образа» — образ создается путем копирования эталонного файла образа в хранилище образов.
+
+«Источник» — в данное поле следует указывать местоположение образа (в качестве образа будет использован ресурс, непосредственно указанный в поле «Источник», а не копия этого ресурса).",
"Please choose the new type of authentication for the selected users":"",
- "Please provide a lease IP":"",
- "Please provide a network address":"",
- "Please provide a resource ID for the resource(s) in this rule":"",
- "Please select":"",
- "Please select at least one resource":"",
- "Please specify to who this ACL applies":"",
+ "Please provide a lease IP":"Необходимо указать IP-адрес",
+ "Please provide a network address":"Укажите адрес сети",
+ "Please provide a resource ID for the resource(s) in this rule":"Необходимо указать № ресурса(ов) для данного правила)",
+ "Please select":"Выберите",
+ "Please select at least one resource":"Необходимо выбрать по меньшей мере один ресурс",
+ "Please specify to who this ACL applies":"Необходимо указать, к кому применять данный список контроля",
"Port":"",
- "Port blacklist":"",
- "Port for the VNC server":"",
- "Port whitelist":"",
- "Predefined":"",
- "Prefix for the emulated device this image will be mounted at. For instance, “hd”, “sd”. If omitted, the default value is the one defined in oned.conf (installation default is “hd”).":"",
- "Previous action":"",
- "Provide a path":"",
- "Provide a source":"",
- "PS2":"",
- "Public":"",
- "Public scope of the image":"",
- "Publish":"",
- "Quickstart":"",
- "Ranged network":"",
+ "Port blacklist":"Список запрещенных портов",
+ "Port for the VNC server":"Порт для сервера VNC",
+ "Port whitelist":"Список разрешенных портов",
+ "Predefined":"По умолчанию",
+ "Prefix for the emulated device this image will be mounted at. For instance, “hd”, “sd”. If omitted, the default value is the one defined in oned.conf (installation default is “hd”).":"Префикс эмулируемого устройства, на которое будет смонтирован образ. Например, «hd» и «sd». Если не указать префикс, его значение будет считано из конфигурационного файла oned.conf (значение по умолчанию — «hd»).",
+ "Previous action":"Предыдущее действие",
+ "Provide a path":"Указать путь к эталонному файлу образа",
+ "Provide a source":"Указать источник для образа",
+ "PS2":"PS/2",
+ "Public":"Открытый",
+ "Publish":"Сделать открытым",
+ "Quickstart":"Типовые операции",
+ "Ranged network":"Диапазон адресов",
"Rank":"",
- "Raw":"",
- "Raw data to be passed directly to the hypervisor":"",
+ "Raw":"Исходная опция",
+ "Raw data to be passed directly to the hypervisor":"Исходные данные, передаваемые напрямую гипервизору",
"Read only":"",
- "Refresh list":"",
- "Register time":"",
- "Registration time":"",
+ "Reboot":"",
+ "Refresh list":"Обновить список",
+ "Register time":"Время регистрации",
+ "Registration time":"Время регистрации",
"release":"",
- "Release":"",
- "Remove selected":"",
- "Request an specific IP from the Network":"",
+ "Release":"Разрешить размещение",
+ "Remove selected":"Удалить выбранные",
+ "Request an specific IP from the Network":"Запросить определенный IP-адрес из сети",
"Requirements":"",
- "Reset":"",
+ "Reset":"Сбросить",
"Resource ID":"",
- "Resource ID / Owned by":"",
+ "Resource ID / Owned by":"№ ресурса / Принадлежит",
"Resource subset":"",
- "Restart":"",
- "Resubmit":"",
- "Resume":"",
+ "Restart":"Перезапустить",
+ "Resubmit":"Разместить повторно",
+ "Resume":"Возобновить работу ВМ",
"Retrieving":"",
"Root":"",
- "running":"",
- "Running VMs":"",
+ "running":"запущенных",
+ "Running VMs":"Запущено ВМ",
"Running #VMS":"",
"Russian":"",
"Save":"",
- "Save as":"",
- "Saveas for VM with ID":"",
- "Save this image after shutting down the VM":"",
+ "Save as":"Сохранить как",
+ "Saveas for VM with ID":"Сохранить как для ВМ с №",
+ "Save this image after shutting down the VM":"Сохранить образ после выключения ВМ",
"Script":"",
- "SCSI":"",
- "SDL":"",
+ "SCSI":"SCSI",
+ "SDL":"SDL",
"Select a network":"",
"Select an image":"",
- "Select a template":"",
- "Select boot method":"",
+ "Select a template":"Выберите шаблон",
+ "Select a VM":"",
+ "Select boot method":"Выберите метод загрузки",
"Select disk":"",
"Select template":"",
"Select the new group":"",
"Select the new owner":"",
"Server (Cipher)":"",
"Server (x509)":"",
- "Setup Networks":"",
+ "Setup Networks":"Настройка сетей",
"Shared":"",
- "Shutdown":"",
+ "Shutdown":"Выключить",
"Sign out":"",
"Size":"",
- "Size in MB":"",
+ "Size in MB":"Размер в МБ",
"Size (Mb)":"",
- "Size of the datablock in MB.":"",
- "Skipping VM ":"",
- "Source":"",
- "Source to be used in the DISK attribute. Useful for not file-based images.":"",
- "Specific ID":"",
+ "Size of the datablock in MB.":"Размер блока данных в МБ.",
+ "Skipping VM ":"Пропуск ВМ ",
+ "Source":"Источник",
+ "Source to be used in the DISK attribute. Useful for not file-based images.":"В качестве источника указывается местоположение образа, который планируется использовать непосредственно.",
+ "Specific ID":"Ресурс с конкретным №",
"Specific image mapping driver. KVM: raw, qcow2. XEN: tap:aio, file:":"",
- "Specific image mapping driver. KVM: raw, qcow2. Xen:tap:aio:, file:. VMware unsupported":"",
+ "Specific image mapping driver. KVM: raw, qcow2. Xen:tap:aio:, file:. VMware unsupported":"Формат образа виртуального диска. Для KVM: raw, qcow2. Для Xen: tap:aio:, file:. Форматы VMware не поддерживаются",
"SSH":"",
- "Start time":"",
- "Start Time":"",
- "State":"",
- "Status":"",
- "Stop":"",
- "Submitted":"",
- "Summary of resources":"",
+ "Start time":"Время запуска",
+ "Start Time":"Время запуска",
+ "State":"Состояние",
+ "Status":"Статус",
+ "Stop":"Остановить",
+ "Submitted":"Выполнено",
+ "Summary of resources":"Использование ресурсов",
"Sunstone UI Configuration":"",
"Support":"",
- "Suspend":"",
- "Swap":"",
- "Tablet":"",
+ "Suspend":"Приостановить работу ВМ",
+ "Swap":"Swap",
+ "Tablet":"Планшетный ПК",
"Target":"",
"Tcp black ports":"",
"Tcp firewall mode":"",
"Tcp white ports":"",
- "Template":"",
- "Template information":"",
- "Templates":"",
- "Template updated correctly":"",
- "There are mandatory fields missing in the capacity section":"",
- "There are mandatory fields missing in the OS Boot options section":"",
- "There are mandatory parameters missing":"",
- "There are mandatory parameters missing in this section":"",
- "This field sets which attribute will be used to sort the suitable hosts for this VM. Basically, it defines which hosts are more suitable than others":"",
+ "Template":"Шаблон",
+ "Template information":"Сведения о шаблоне",
+ "Templates":"Шаблоны ВМ",
+ "Template updated correctly":"Шаблон успешно обновлен",
+ "There are mandatory fields missing in the capacity section":"В разделе «Производительность» не заполнены некоторые обязательные поля",
+ "There are mandatory fields missing in the OS Boot options section":"В разделе «Загрузка и тип ОС» не заполнены некоторые обязательные поля",
+ "There are mandatory parameters missing":"Указаны не все обязательные параметры",
+ "There are mandatory parameters missing in this section":"В данном разделе указаны не все обязательные параметры",
+ "This field sets which attribute will be used to sort the suitable hosts for this VM. Basically, it defines which hosts are more suitable than others":"В данном поле устанавливается значение атрибута, используемое для ранжирования узлов, пригодных для размещения ВМ. Значение атрибута определяет, какие из узлов лучше подходят для размещения ВМ.",
"This rule applies to":"",
- "This will cancel selected VMs":"",
+ "This will cancel selected VMs":"Прервать работу выбранных ВМ",
"This will change the main group of the selected users. Select the new group":"",
"This will change the password for the selected users":"",
- "This will delete the selected VMs from the database":"",
- "This will deploy the selected VMs on the chosen host":"",
- "This will hold selected pending VMs from being deployed":"",
- "This will initiate the shutdown process in the selected VMs":"",
- "This will live-migrate the selected VMs to the chosen host":"",
- "This will migrate the selected VMs to the chosen host":"",
- "This will redeploy selected VMs (in UNKNOWN or BOOT state)":"",
- "This will release held machines":"",
- "This will resubmits VMs to PENDING state":"",
- "This will resume selected stopped or suspended VMs":"",
- "This will suspend selected machines":"",
- "TM MAD":"",
- "total":"",
- "Total Leases":"",
- "Total VM count":"",
+ "This will delete the selected VMs from the database":"Удалить выбранные ВМ и связанные с ними образы дисков из базы данных и хранилища образов",
+ "This will deploy the selected VMs on the chosen host":"Разместить выбранные ВМ на определенном узле",
+ "This will hold selected pending VMs from being deployed":"Приостановить процедуру размещения ВМ на узле",
+ "This will initiate the shutdown process in the selected VMs":"Запустить процесс выключения выбранных ВМ",
+ "This will live-migrate the selected VMs to the chosen host":"Перенести выбранные запущенные ВМ, не завершая их работы, с текущих узлов на выбранный",
+ "This will migrate the selected VMs to the chosen host":"Перенести выбранные остановленные ВМ с текущих узлов на выбранный",
+ "This will redeploy selected VMs (in UNKNOWN or BOOT state)":"Повторно выполнить процедуру размещения выбранных ВМ, находящихся в состоянии UNKNOWN или BOOT, на узле",
+ "This will release held machines":"Продолжить ранее приостановленное размещение ВМ на узле",
+ "This will resubmits VMs to PENDING state":"Повторно выполнить попытку размещения выбранных ВМ на одном из доступных узлов системы виртуализации (перевод в состояние PENDING)",
+ "This will resume selected stopped or suspended VMs":"Возобновить работу выбранных остановленных или приостановленных ВМ",
+ "This will send a reboot action to running VMs":"",
+ "This will suspend selected machines":"Приостановить выбранные ВМ",
+ "TM MAD":"Модуль ср-ва передачи",
+ "total":"всего",
+ "Total Leases":"Суммарное количество адресов",
+ "Total VM count":"Количество виртуальных машин",
"Total VM CPU":"",
"Total VM Memory":"",
"Transfer Manager":"",
- "Type":"",
- "Type of disk device to emulate.":"",
- "Type of disk device to emulate: ide, scsi":"",
- "Type of file system to be built. This can be any value understood by mkfs unix command.":"",
- "Type of the image, explained in detail in the following section. If omitted, the default value is the one defined in oned.conf (install default is OS).":"",
+ "Type":"Тип",
+ "Type of disk device to emulate.":"Тип эмулируемого дискового устройства",
+ "Type of disk device to emulate: ide, scsi":"Тип эмулируемого дискового устройства: ide, scsi",
+ "Type of file system to be built. This can be any value understood by mkfs unix command.":"Тип создаваемой ФС. Может быть указан любой тип, который используется в unix-команде mkfs.",
+ "Type of the image, explained in detail in the following section. If omitted, the default value is the one defined in oned.conf (install default is OS).":"Тип. Если не указать тип образа, его значение будет считано из конфигурационного файла oned.conf (значение по умолчанию — «OS»).",
"Udp black ports":"",
"Udp firewall mode":"",
"Udp white ports":"",
"Unauthorized":"",
- "Unpublish":"",
- "Update":"",
- "Update a template":"",
- "Update image template":"",
- "Update network template":"",
- "Update template":"",
- "USB":"",
- "Use":"",
+ "Unpublish":"Отменить статус «Открытый»",
+ "Update":"Обновить",
+ "Update a template":"Обновить шаблон",
+ "Update image properties":"",
+ "Update network properties":"",
+ "Update properties":"",
+ "Update template":"Обновить шаблон",
+ "Update template properties":"",
+ "Update VM properties":"",
+ "USB":"USB",
+ "Use":"Использовать",
"Used by VM":"",
- "Used CPU":"",
- "Used CPU (allocated)":"",
- "Used CPU (real)":"",
- "Used Mem (allocated)":"",
- "Used Memory":"",
- "Used Mem (real)":"",
- "Useful for power management, for example, normally required for graceful shutdown to work":"",
- "User":"",
+ "Used CPU":"Используется ЦП",
+ "Used CPU (allocated)":"Использовано ОЗУ(реально)",
+ "Used CPU (real)":"Использовано ЦП(реально)",
+ "Used Mem (allocated)":"Использовано ОЗУ(выделено)",
+ "Used Memory":"Используется памяти",
+ "Used Mem (real)":"Использовано ОЗУ(реально)",
+ "Useful for power management, for example, normally required for graceful shutdown to work":"Требуется для корректного завершения работы ВМ средствами системы виртуализации",
+ "User":"Пользователь",
"Username":"",
- "User name and password must be filled in":"",
- "Users":"",
+ "User name and password must be filled in":"Необходимо указать и имя пользователя, и пароль",
+ "Users":"Пользователи",
"Value":"",
- "Value of the context variable":"",
- "Value of the custom variable":"",
- "VCPU":"",
- "Virtio":"",
- "Virtio (KVM)":"",
+ "Value of the context variable":"Значение контекстной переменной",
+ "Value of the custom variable":"Значение пользовательской перменной",
+ "VCPU":"Кол-во вирт. ЦП",
+ "Virtio":"Virtio",
+ "Virtio (KVM)":"Virtio (KVM)",
"Virtualization Manager":"",
- "Virtual Machine information":"",
- "Virtual Machines":"",
- "Virtual Network":"",
- "Virtual network information":"",
- "Virtual Network information":"",
- "Virtual Network name missing!":"",
- "Virtual Networks":"",
- "Virtual Networks (total/public)":"",
+ "Virtual Machine information":"Информация о виртуальной машине",
+ "Virtual Machines":"Вирт. машины",
+ "Virtual Network":"Виртуальная сеть",
+ "Virtual network information":"Информация о виртуальной сети",
+ "Virtual Network information":"Информация о виртуальной сети",
+ "Virtual Network name missing!":"Отсутствует название виртуальной сети!",
+ "Virtual Networks":"Вирт. сети",
+ "Virtual Networks (total/public)":"Виртуальные сети (всего/из них открытых)",
"Virtual Network template (attributes)":"",
- "VM information":"",
- "VM Instance":"",
+ "VM information":"Информация о ВМ",
+ "VM Instance":"Экземпляр ВМ",
"VM Instances":"",
- "VM log":"",
- "VM MAD":"",
+ "VM log":"Журнал ВМ",
+ "VM MAD":"Модуль ср-ва виртуализации",
"VM Name":"",
- "VM Network stats":"",
- "#VMS":"",
- "VM Save As":"",
- "VM template":"",
- "VM Template":"",
- "VM Templates":"",
- "VM Templates (total/public)":"",
- "VNC":"",
- "VNC Access":"",
- "VNC connection":"",
- "VNC Disabled":"",
- "VNC Session":"",
+ "VM Network stats":"Статистика виртуальных сетей",
+ "#VMS":"Кол-во ВМ",
+ "VM Save As":"ВМ сохранить как",
+ "VM template":"Шаблон ВМ",
+ "VM Template":"Шаблон ВМ",
+ "VM Templates":"Шаблоны ВМ",
+ "VM Templates (total/public)":"Шаблоны ВМ (всего/из них открытых)",
+ "VNC":"VNC",
+ "VNC Access":"Доступ по VNC",
+ "VNC connection":"VNC соединение",
+ "VNC Disabled":"VNC недоступно",
+ "VNC Session":"VNC сессия",
"VNET ID":"",
"VN MAD":"",
"Welcome":"",
- "Wizard":"",
- "Wizard KVM":"",
- "Wizard VMware":"",
- "Wizard XEN":"",
- "Write the image template here":"",
- "Write the Virtual Machine template here":"",
- "Write the Virtual Network template here":"",
+ "Wizard":"Мастер настройки",
+ "Wizard KVM":"Шаблон KVM",
+ "Wizard VMware":"Шаблон VMware",
+ "Wizard XEN":"Шаблон XEN",
+ "Write the image template here":"Отредактируйте параметры шаблона образа ВМ вручную",
+ "Write the Virtual Machine template here":"Отредактируйте параметры шаблона ВМ вручную",
+ "Write the Virtual Network template here":"Отредактируйте параметры шаблона вирт. сети вручную",
"x509":"",
- "XEN":"",
- "Xen templates must specify a boot method":"",
- "yes":"",
- "Yes":"",
- "You have not selected a template":"",
- "You have to confirm this action.":"",
- "You need to select something.":"",
+ "XEN":"XEN",
+ "Xen templates must specify a boot method":"В шаблон Xen необходимо указывать метод загрузки",
+ "yes":"да",
+ "Yes":"Да",
+ "You have not selected a template":"Вы не выбрали шаблон",
+ "You have to confirm this action.":"Необходимо подтвердить данную операцию.",
+ "You need to select something.":"Вы должны что-нибудь выбрать.",
};