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("ID")+'\ '+vn_info.ID+'\ - \ + \ \ '+tr("Name")+'\ '+vn_info.NAME+'\ + \ \ + '+tr("Used leases")+'\ + '+vn_info.USED_LEASES+'\ + '; + + if (vn_info.ADDRESS){ + info_tab_content += '\ + \ + '+tr("Address")+'\ + '+vn_info.ADDRESS+'\ + \ + \ + '+tr("Size")+'\ + '+vn_info.SIZE+'\ + '; + }; + info_tab_content += '\ \
\
'; diff --git a/src/cloud/occi/lib/ui/public/js/plugins/storage.js b/src/cloud/occi/lib/ui/public/js/plugins/storage.js index 131c824f24..0348a9f255 100644 --- a/src/cloud/occi/lib/ui/public/js/plugins/storage.js +++ b/src/cloud/occi/lib/ui/public/js/plugins/storage.js @@ -367,14 +367,14 @@ function updateImageInfo(request,img){ '+img_info.NAME+'\ \ \ - '+tr("Name")+'\ + '+tr("Description")+'\ '+img_info.DESCRIPTION+'\ \ \ '+tr("Type")+'\ '+OCCI.Helper.image_type(img_info.TYPE)+'\ \ - \ + \ '+tr("Persistent")+'\ \ \ diff --git a/src/sunstone/models/OpenNebulaJSON/ImageJSON.rb b/src/sunstone/models/OpenNebulaJSON/ImageJSON.rb index 5c26e22f71..240b3229c8 100644 --- a/src/sunstone/models/OpenNebulaJSON/ImageJSON.rb +++ b/src/sunstone/models/OpenNebulaJSON/ImageJSON.rb @@ -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 diff --git a/src/sunstone/models/OpenNebulaJSON/TemplateJSON.rb b/src/sunstone/models/OpenNebulaJSON/TemplateJSON.rb index 6b2957365d..0390070add 100644 --- a/src/sunstone/models/OpenNebulaJSON/TemplateJSON.rb +++ b/src/sunstone/models/OpenNebulaJSON/TemplateJSON.rb @@ -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['params']) + 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 diff --git a/src/sunstone/models/OpenNebulaJSON/VirtualMachineJSON.rb b/src/sunstone/models/OpenNebulaJSON/VirtualMachineJSON.rb index 3da1ca9f9a..7dac3fe869 100644 --- a/src/sunstone/models/OpenNebulaJSON/VirtualMachineJSON.rb +++ b/src/sunstone/models/OpenNebulaJSON/VirtualMachineJSON.rb @@ -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 diff --git a/src/sunstone/models/OpenNebulaJSON/VirtualNetworkJSON.rb b/src/sunstone/models/OpenNebulaJSON/VirtualNetworkJSON.rb index fcc71d8e2f..a0fe9146b3 100644 --- a/src/sunstone/models/OpenNebulaJSON/VirtualNetworkJSON.rb +++ b/src/sunstone/models/OpenNebulaJSON/VirtualNetworkJSON.rb @@ -48,6 +48,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 "hold" then self.hold(action_hash['params']) when "release" then self.release(action_hash['params']) else @@ -73,6 +74,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 hold(params=Hash.new) super(params['ip']) end diff --git a/src/sunstone/public/js/opennebula.js b/src/sunstone/public/js/opennebula.js index 0cba8a056e..bf5caaa4a3 100644 --- a/src/sunstone/public/js/opennebula.js +++ b/src/sunstone/public/js/opennebula.js @@ -491,6 +491,13 @@ var OpenNebula = { "chgrp" : function(params){ OpenNebula.Action.chgrp(params,OpenNebula.Network.resource); }, + "chmod" : function(params){ + var action_obj = params.data.extra_param; + OpenNebula.Action.simple_action(params, + OpenNebula.Network.resource, + "chmod", + action_obj); + }, "publish": function(params){ OpenNebula.Action.simple_action(params,OpenNebula.Network.resource,"publish"); }, @@ -558,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"); }, @@ -585,6 +599,9 @@ var OpenNebula = { "resubmit": function(params){ OpenNebula.Action.simple_action(params,OpenNebula.VM.resource,"resubmit"); }, + "reboot" : function(params){ + OpenNebula.Action.simple_action(params,OpenNebula.VM.resource,"reboot"); + }, "log": function(params){ OpenNebula.Action.show(params,OpenNebula.VM.resource,"log"); @@ -732,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, @@ -748,12 +772,6 @@ var OpenNebula = { "disable": function(params){ OpenNebula.Action.simple_action(params,OpenNebula.Image.resource,"disable"); }, - "publish": function(params){ - OpenNebula.Action.simple_action(params,OpenNebula.Image.resource,"publish"); - }, - "unpublish": function(params){ - OpenNebula.Action.simple_action(params,OpenNebula.Image.resource,"unpublish"); - }, "persistent": function(params){ OpenNebula.Action.simple_action(params,OpenNebula.Image.resource,"persistent"); }, @@ -790,6 +808,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, diff --git a/src/sunstone/public/js/plugins/acls-tab.js b/src/sunstone/public/js/plugins/acls-tab.js index f0515f0bcb..539b8d1256 100644 --- a/src/sunstone/public/js/plugins/acls-tab.js +++ b/src/sunstone/public/js/plugins/acls-tab.js @@ -65,16 +65,11 @@ var create_acl_tmpl = \ \
\ - \ + \ '+tr("Create")+'
\ - '+tr("Delete")+'
\ - '+tr("Use")+'
\ - '+tr("Manage")+'
\ - '+tr("Get Information")+'
\ - '+tr("Get Pool of resources")+'
\ - '+tr("Get Pool of my/group\'s resources")+'
\ - '+tr("Change owner")+'
\ - '+tr("Deploy")+'
\ + '+tr("Use")+'
\ + '+tr("Manage")+'
\ + '+tr("Administrate")+'
\
\ \ \ diff --git a/src/sunstone/public/js/plugins/images-tab.js b/src/sunstone/public/js/plugins/images-tab.js index 4a1583ce3a..cf1e96d6f2 100644 --- a/src/sunstone/public/js/plugins/images-tab.js +++ b/src/sunstone/public/js/plugins/images-tab.js @@ -31,7 +31,6 @@ var images_tab_content = '+tr("Size")+'\ '+tr("Type")+'\ '+tr("Registration time")+'\ - '+tr("Public")+'\ '+tr("Persistent")+'\ '+tr("Status")+'\ '+tr("#VMS")+'\ @@ -74,11 +73,6 @@ var create_image_tmpl = \
'+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("Public scope of the image")+'
\ -
\
\ \ \ @@ -185,12 +179,35 @@ var update_image_tmpl = \
\
\ - \ - \ + \ + \
\
\ - \ - \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ +
'+tr("Permissions")+':'+tr("Use")+''+tr("Manage")+''+tr("Admin")+'
'+tr("Owner")+'
'+tr("Group")+'
'+tr("Other")+'
\
\ \
\ @@ -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 = $('', image.ID, @@ -512,8 +513,6 @@ function imageElementArray(image_json){ image.SIZE, '', 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("Permissions")+':'+tr("Use")+''+tr("Manage")+''+tr("Admin")+'
'+tr("Owner")+'
'+tr("Group")+'
'+tr("Other")+'
\
\ \
\ @@ -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 = + '
\ +

'+tr("Please, choose and modify the virtual machine you want to update")+':

\ +
\ + \ + \ +
\ +
\ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ +
'+tr("Permissions")+':'+tr("Use")+''+tr("Manage")+''+tr("Admin")+'
'+tr("Owner")+'
'+tr("Group")+'
'+tr("Other")+'
\ +
\ +\ +
\ +
\ +
\ + \ +
\ +
\ +
'; + 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? '' : ""; + $('option','').each(function(){ + var val = $(this).val(); + if ($.inArray(val,sel_elems) >= 0){ + new_select+=''; + }; + }); + $('#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 = \ \ \ - \ \ \ \ @@ -149,8 +148,31 @@ var update_vnet_tmpl = \
\
\ - \ - \ +
'+tr("Name")+''+tr("Type")+''+tr("Bridge")+''+tr("Public")+''+tr("Total Leases")+'
\ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ +
'+tr("Permissions")+':'+tr("Use")+''+tr("Manage")+''+tr("Admin")+'
'+tr("Owner")+'
'+tr("Group")+'
'+tr("Other")+'
\
\ \
\ @@ -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.":"Вы должны что-нибудь выбрать.", };