From 45b400a510d1f0d433f600e88d0ea092f864f171 Mon Sep 17 00:00:00 2001 From: Javi Fontan Date: Thu, 8 Sep 2011 17:32:05 +0200 Subject: [PATCH 01/31] Typo in auth module --- src/authm_mad/one_auth_mad.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/authm_mad/one_auth_mad.rb b/src/authm_mad/one_auth_mad.rb index 0b26c92f45..b1d40bcaf9 100755 --- a/src/authm_mad/one_auth_mad.rb +++ b/src/authm_mad/one_auth_mad.rb @@ -109,7 +109,7 @@ class AuthDriver < OpenNebulaDriver ACTION[:authN], RESULT[:failure], request_id, - "Authentication rotocol '#{protocol}' not available") + "Authentication protocol '#{protocol}' not available") end #build path for the auth action From 78247256ce74a06d7db681a51213469a62c303a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn?= Date: Thu, 8 Sep 2011 17:47:49 +0200 Subject: [PATCH 02/31] Bug #477: Small change in error string generation --- src/authm/AuthManager.cc | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/authm/AuthManager.cc b/src/authm/AuthManager.cc index aeb40d0ba1..8ed3a16b9b 100644 --- a/src/authm/AuthManager.cc +++ b/src/authm/AuthManager.cc @@ -442,16 +442,12 @@ void AuthManager::notify_request(int auth_id,bool result,const string& message) if ( message != "-" ) { - ostringstream oss; - if ( !ar->message.empty() ) { - oss << ar->message << "; "; + ar->message.append("; "); } - oss << message; - - ar->message = oss.str(); + ar->message.append(message); } ar->notify(); From 6d66dac27bec82cf223ad18af76fa2f9036e7567 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Wed, 7 Sep 2011 19:43:20 +0200 Subject: [PATCH 03/31] Small oZones fixes This patch improves the login screen and adjust some visual elements in oZones: - Login form submission is handled in a nicer way - Login failure message fade in on top of the login box - Login screen compacts in screens with small resolutions - Some column widths in the tables are adjusted --- src/ozones/Server/public/css/login.css | 2 +- src/ozones/Server/public/js/login.js | 29 +++++++------------ .../public/js/plugins/aggregated-tab.js | 5 ++-- .../Server/public/js/plugins/dashboard-tab.js | 3 -- .../Server/public/js/plugins/zones-tab.js | 5 ++-- src/ozones/Server/templates/index.html | 2 +- src/ozones/Server/templates/login.html | 20 ++++++------- 7 files changed, 29 insertions(+), 37 deletions(-) diff --git a/src/ozones/Server/public/css/login.css b/src/ozones/Server/public/css/login.css index b6bda684cc..e119e9189a 100644 --- a/src/ozones/Server/public/css/login.css +++ b/src/ozones/Server/public/css/login.css @@ -135,7 +135,7 @@ div#login input#login_btn:hover { .error_message { display: none; position: relative; - top: 150px; + top: 80px; font-family: Arial, Helvetica, sans-serif; color:red; font-size:1.6em; diff --git a/src/ozones/Server/public/js/login.js b/src/ozones/Server/public/js/login.js index fa6e3260c7..ff5eb25faa 100644 --- a/src/ozones/Server/public/js/login.js +++ b/src/ozones/Server/public/js/login.js @@ -25,11 +25,11 @@ function auth_error(req, error){ switch (status){ case 401: $("#one_error").hide(); - $("#auth_error").show(); + $("#auth_error").fadeIn("slow"); break; case 500: $("#auth_error").hide(); - $("#one_error").show(); + $("#one_error").fadeIn("slow"); break; } } @@ -47,25 +47,18 @@ function authenticate(){ }); } -function logout(){ - oZones.Auth.logout(); -} - - $(document).ready(function(){ - $("#login_btn").click(function () { + $("#login_form").submit(function (){ authenticate(); + return false; }); - $("input").keydown(function (e){ - if (e.keyCode == 13) { - authenticate(); - } - }); + //compact login elements according to screen height + if (screen.height <= 600){ + $('div#logo_sunstone').css("top","15px"); + $('div#login').css("top","10px"); + $('.error_message').css("top","10px"); + }; - $("#logout_btn").click(function () { - logout(); - }); - - $("input#username.box").get(0).focus(); + $("input#username.box").focus(); }); diff --git a/src/ozones/Server/public/js/plugins/aggregated-tab.js b/src/ozones/Server/public/js/plugins/aggregated-tab.js index 710e5fa53b..b340bc6dd3 100644 --- a/src/ozones/Server/public/js/plugins/aggregated-tab.js +++ b/src/ozones/Server/public/js/plugins/aggregated-tab.js @@ -555,7 +555,8 @@ $(document).ready(function(){ "bAutoWidth":false, "aoColumnDefs": [ { "sWidth": "35px", "aTargets": [0,2] }, - { "sWidth": "100px", "aTargets": [1,3,4,5,10] } + { "sWidth": "60px", "aTargets": [7,8] }, + { "sWidth": "100px", "aTargets": [1,3,4,6,10] } ] }); @@ -579,7 +580,7 @@ $(document).ready(function(){ "aoColumnDefs": [ { "sWidth": "60px", "aTargets": [10] }, { "sWidth": "35px", "aTargets": [0,2,8,9,11] }, - { "sWidth": "100px", "aTargets": [1,3,4,5,7] } + { "sWidth": "100px", "aTargets": [1,3,4,6,7] } ] }); diff --git a/src/ozones/Server/public/js/plugins/dashboard-tab.js b/src/ozones/Server/public/js/plugins/dashboard-tab.js index 34553f45ab..a0b43908e1 100644 --- a/src/ozones/Server/public/js/plugins/dashboard-tab.js +++ b/src/ozones/Server/public/js/plugins/dashboard-tab.js @@ -139,9 +139,6 @@ var dashboard_tab_content =
\

\ Images\ -
\ - +\ -
\

\
\ \ diff --git a/src/ozones/Server/public/js/plugins/zones-tab.js b/src/ozones/Server/public/js/plugins/zones-tab.js index 920d024609..33bdc05b25 100644 --- a/src/ozones/Server/public/js/plugins/zones-tab.js +++ b/src/ozones/Server/public/js/plugins/zones-tab.js @@ -463,7 +463,8 @@ function updateZoneInfo(req,zone_json){ "bAutoWidth":false, "aoColumnDefs": [ { "sWidth": "35px", "aTargets": [0] }, - { "sWidth": "100px", "aTargets": [1,2,3,4] } + { "sWidth": "60px", "aTargets": [5,6] }, + { "sWidth": "100px", "aTargets": [1,2,4,8] } ] }); @@ -488,7 +489,7 @@ function updateZoneInfo(req,zone_json){ "aoColumnDefs": [ { "sWidth": "60px", "aTargets": [8] }, { "sWidth": "35px", "aTargets": [0,6,7,9] }, - { "sWidth": "100px", "aTargets": [1,2,3,5] } + { "sWidth": "100px", "aTargets": [1,2,4,5] } ] }); diff --git a/src/ozones/Server/templates/index.html b/src/ozones/Server/templates/index.html index 19036e3156..3490be79c7 100644 --- a/src/ozones/Server/templates/index.html +++ b/src/ozones/Server/templates/index.html @@ -1,7 +1,7 @@ - oZones Admin Console + OpenNebula oZones diff --git a/src/ozones/Server/templates/login.html b/src/ozones/Server/templates/login.html index e4b793e2fa..89847c4c35 100644 --- a/src/ozones/Server/templates/login.html +++ b/src/ozones/Server/templates/login.html @@ -1,7 +1,7 @@ - oZones Admin Console Login + OpenNebula oZones Login @@ -23,6 +23,14 @@
+ +
+ Invalid username or password +
+
+ OpenNebula is not running +
+
@@ -33,18 +41,10 @@
- +
- -
- Invalid username or password -
-
- OpenNebula is not running -
- From 66baf1d0537948a7f83aeef71b7bca11c7f013bb Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Wed, 7 Sep 2011 19:46:23 +0200 Subject: [PATCH 04/31] Small Sunstone fixes This commit contains small improvement and fixes in Sunstone javascript client code: - Columns widths in some tables have been adjusted - Login form submission is handled in a better way - Login error message fade in on top of the login box - Login screen compacts in screens with smaller resolution - +/- icon toggle in the create template dialog has been improved - Dashboards left table expands to take 100% of available width - Host/VM plots have a bit less width, so no scroll bar appears - Page title changed to "OpenNebula Sunstone" --- src/sunstone/public/css/login.css | 5 +- src/sunstone/public/js/login.js | 39 +++++++------- .../public/js/plugins/dashboard-tab.js | 2 +- .../public/js/plugins/dashboard-users-tab.js | 2 +- src/sunstone/public/js/plugins/hosts-tab.js | 1 + src/sunstone/public/js/plugins/images-tab.js | 9 ++-- .../public/js/plugins/templates-tab.js | 54 +++++++++++-------- src/sunstone/public/js/plugins/vms-tab.js | 7 +-- src/sunstone/public/js/plugins/vnets-tab.js | 2 +- src/sunstone/public/js/sunstone-util.js | 6 +-- src/sunstone/templates/login.html | 23 ++++---- src/sunstone/views/index.erb | 2 +- 12 files changed, 81 insertions(+), 71 deletions(-) diff --git a/src/sunstone/public/css/login.css b/src/sunstone/public/css/login.css index b4236d267f..4843efacf9 100644 --- a/src/sunstone/public/css/login.css +++ b/src/sunstone/public/css/login.css @@ -52,8 +52,7 @@ div#logo_sunstone { top: 80px; margin-left: auto; margin-right: auto; - background: url(../images/opennebula-sunstone-big.png) no-repeat center ; - + background: url(../images/opennebula-sunstone-big.png) no-repeat center; vertical-align: center; } @@ -135,7 +134,7 @@ div#login input#login_btn:hover { .error_message { display: none; position: relative; - top: 150px; + top: 80px; font-family: Arial, Helvetica, sans-serif; color:red; font-size:1.6em; diff --git a/src/sunstone/public/js/login.js b/src/sunstone/public/js/login.js index 99cfb9d856..608ea609e5 100644 --- a/src/sunstone/public/js/login.js +++ b/src/sunstone/public/js/login.js @@ -23,15 +23,15 @@ function auth_error(req, error){ var status = error.error.http_status; switch (status){ - case 401: - $("#one_error").hide(); - $("#auth_error").show(); - break; - case 500: - $("#auth_error").hide(); - $("#one_error").show(); - break; - } + case 401: + $("#one_error").hide(); + $("#auth_error").fadeIn("slow"); + break; + case 500: + $("#auth_error").hide(); + $("#one_error").fadeIn("slow"); + break; + }; } function authenticate(){ @@ -47,21 +47,18 @@ function authenticate(){ }); } -function logout(){ - OpenNebula.Auth.logout(); -} - - $(document).ready(function(){ - $("#login_btn").click(function () { + $("#login_form").submit(function (){ authenticate(); + return false; }); - $("input").keydown(function (e){ - if (e.keyCode == 13) { - authenticate(); - } - }); + //compact login elements according to screen height + if (screen.height <= 600){ + $('div#logo_sunstone').css("top","15px"); + $('div#login').css("top","10px"); + $('.error_message').css("top","10px"); + }; - $("input#username.box").get(0).focus(); + $("input#username.box").focus(); }); diff --git a/src/sunstone/public/js/plugins/dashboard-tab.js b/src/sunstone/public/js/plugins/dashboard-tab.js index 56b2b475e8..92a38ba49c 100644 --- a/src/sunstone/public/js/plugins/dashboard-tab.js +++ b/src/sunstone/public/js/plugins/dashboard-tab.js @@ -46,7 +46,7 @@ var dashboard_tab_content = '
\ \
\ -\ +
\ \
\
\ diff --git a/src/sunstone/public/js/plugins/dashboard-users-tab.js b/src/sunstone/public/js/plugins/dashboard-users-tab.js index b05de8be29..1c5aa7f386 100644 --- a/src/sunstone/public/js/plugins/dashboard-users-tab.js +++ b/src/sunstone/public/js/plugins/dashboard-users-tab.js @@ -46,7 +46,7 @@ var dashboard_tab_content = '\ \
\ -\ +
\ \ \ \ \ - \ + \ \ \ \ @@ -750,9 +750,10 @@ $(document).ready(function(){ "sPaginationType": "full_numbers", "aoColumnDefs": [ { "bSortable": false, "aTargets": ["check"] }, - { "sWidth": "60px", "aTargets": [0,3] }, - { "sWidth": "35px", "aTargets": [1] }, - { "sWidth": "100px", "aTargets": [2,3,4] } + { "sWidth": "60px", "aTargets": [0,2,3,5,7,8,9] }, + { "sWidth": "35px", "aTargets": [1,10] }, + { "sWidth": "100px", "aTargets": [9] }, + { "sWidth": "150px", "aTargets": [6] } ] }); diff --git a/src/sunstone/public/js/plugins/templates-tab.js b/src/sunstone/public/js/plugins/templates-tab.js index abdaa9e914..cd7db8af35 100644 --- a/src/sunstone/public/js/plugins/templates-tab.js +++ b/src/sunstone/public/js/plugins/templates-tab.js @@ -1259,15 +1259,35 @@ function setupCreateTemplateDialog(){ //Toggles the icon when a section is folded/unfolded var iconToggle = function(){ - $('.icon_right',dialog).toggle( - function(e){ - $('span',e.currentTarget).removeClass("ui-icon-plusthick"); - $('span',e.currentTarget).addClass("ui-icon-minusthick"); - },function(e){ - $('span',e.currentTarget).removeClass("ui-icon-minusthick"); - $('span',e.currentTarget).addClass("ui-icon-plusthick"); + $('.icon_left',$create_template_dialog).click(function(e){ + if ($('span',e.currentTarget).hasClass("ui-icon-plus")){ + $('span',e.currentTarget).removeClass("ui-icon-plus"); + $('span',e.currentTarget).addClass("ui-icon-minus"); + } else { + $('span',e.currentTarget).removeClass("ui-icon-minus"); + $('span',e.currentTarget).addClass("ui-icon-plus"); + }; + }); + }; + + //Fold/unfold all sections button + var foldUnfoldToggle = function() { + $('#fold_unfold_vm_params',$create_template_dialog).toggle( + function(){ + $('.vm_section fieldset',$create_template_dialog).show(); + $('.icon_left span',$create_template_dialog).removeClass("ui-icon-plus"); + $('.icon_left span',$create_template_dialog).addClass("ui-icon-minus"); + return false; + }, + function(){ + $('.vm_section fieldset',$create_template_dialog).hide(); + //Show capacity opts + $('.vm_section fieldset',$create_template_dialog).first().show(); + $('.icon_left span',$create_template_dialog).removeClass("ui-icon-minus"); + $('.icon_left span',$create_template_dialog).addClass("ui-icon-plus"); + return false; }); - } + }; // Set ups the capacity section var capacity_setup = function(){ @@ -1795,18 +1815,7 @@ filled in"); vmTabChange(0,{index : 0}); //enable kvm - //Fold/unfold all sections button - $('#fold_unfold_vm_params',dialog).toggle( - function(){ - $('.vm_section fieldset',$create_template_dialog).show(); - return false; - }, - function(){ - $('.vm_section fieldset',$create_template_dialog).hide(); - //Show capacity opts - $('.vm_section fieldset',$create_template_dialog).first().show(); - return false; - }); + foldUnfoldToggle(); //initialise all sections capacity_setup(); @@ -1969,9 +1978,10 @@ $(document).ready(function(){ "sPaginationType": "full_numbers", "aoColumnDefs": [ { "bSortable": false, "aTargets": ["check"] }, - { "sWidth": "60px", "aTargets": [0] }, + { "sWidth": "60px", "aTargets": [0,6] }, { "sWidth": "35px", "aTargets": [1] }, - { "sWidth": "100px", "aTargets": [2,3,4] } + { "sWidth": "150px", "aTargets": [5] }, + { "sWidth": "100px", "aTargets": [2,3] } ] }); diff --git a/src/sunstone/public/js/plugins/vms-tab.js b/src/sunstone/public/js/plugins/vms-tab.js index f05696bf17..062c1e7e6f 100644 --- a/src/sunstone/public/js/plugins/vms-tab.js +++ b/src/sunstone/public/js/plugins/vms-tab.js @@ -1075,9 +1075,10 @@ $(document).ready(function(){ "bAutoWidth":false, "aoColumnDefs": [ { "bSortable": false, "aTargets": ["check"] }, - { "sWidth": "60px", "aTargets": [0] }, - { "sWidth": "35px", "aTargets": [1,9] }, - { "sWidth": "100px", "aTargets": [2,3,4] } + { "sWidth": "60px", "aTargets": [0,6,7] }, + { "sWidth": "35px", "aTargets": [1,10] }, + { "sWidth": "150px", "aTargets": [5,9] }, + { "sWidth": "100px", "aTargets": [2,3] } ] }); diff --git a/src/sunstone/public/js/plugins/vnets-tab.js b/src/sunstone/public/js/plugins/vnets-tab.js index f72d58da42..e57afb2abd 100644 --- a/src/sunstone/public/js/plugins/vnets-tab.js +++ b/src/sunstone/public/js/plugins/vnets-tab.js @@ -30,7 +30,7 @@ var vnets_tab_content = \ \ \ - \ + \ \ \ \ diff --git a/src/sunstone/public/js/sunstone-util.js b/src/sunstone/public/js/sunstone-util.js index a5084ac401..25d1b6af3e 100644 --- a/src/sunstone/public/js/sunstone-util.js +++ b/src/sunstone/public/js/sunstone-util.js @@ -511,9 +511,9 @@ function escapeDoubleQuotes(string){ //of plotting comes, we can put the data in the right place. function generateMonitoringDivs(graphs, id_prefix){ var str = ""; - //42% of the width of the screen minus + //43% of the width of the screen minus //129px (left menu size) - var width = ($(window).width()-129)*42/100; + var width = ($(window).width()-129)*40/100; var id_suffix=""; var label=""; var id=""; @@ -614,7 +614,7 @@ function setupTemplateUpdateDialog(){ //Put HTML in place dialog.html( '\ -

Update the template here:

\ +

Please, choose and modify the template you want to update:

\
\ \ \ diff --git a/src/sunstone/templates/login.html b/src/sunstone/templates/login.html index a5bfc6de47..8e1294ca3f 100644 --- a/src/sunstone/templates/login.html +++ b/src/sunstone/templates/login.html @@ -1,7 +1,7 @@ - OpenNebula Admin Console Login + OpenNebula Sunstone Login @@ -24,6 +24,14 @@
+ +
+ Invalid username or password +
+
+ OpenNebula is not running +
+
@@ -32,20 +40,13 @@ Password
- + - + +
- -
- Invalid username or password -
-
- OpenNebula is not running -
- diff --git a/src/sunstone/views/index.erb b/src/sunstone/views/index.erb index 00d6331d3d..4e70b668e0 100644 --- a/src/sunstone/views/index.erb +++ b/src/sunstone/views/index.erb @@ -1,7 +1,7 @@ - OpenNebula Admin Console + OpenNebula Sunstone: Cloud Operations Center From b288c319e77a4f78dfc798d5d75a5f0ad1b22e5e Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Thu, 8 Sep 2011 23:21:22 +0200 Subject: [PATCH 05/31] Feature #799: opennebula.js refactor This commit contains a full refactoring of opennebula.js, the Javascript API to interact with Sunstone server. Refactoring includes some other smaller changes in order to achieve consistency: - SunstoneServer.rb: vm logs are returned in JSON format instead of plain text. VM template resource is now accessed via "/vmtemplate" instead of "template". - Images plugin: update "register" references to "create". - VM plugin: update VM log processing. Improve the "saveas" action object, making it a standard "single" action instead of "custom". --- src/sunstone/models/SunstoneServer.rb | 36 +- src/sunstone/public/js/opennebula.js | 2791 +++--------------- src/sunstone/public/js/plugins/images-tab.js | 8 +- src/sunstone/public/js/plugins/vms-tab.js | 15 +- 4 files changed, 442 insertions(+), 2408 deletions(-) diff --git a/src/sunstone/models/SunstoneServer.rb b/src/sunstone/models/SunstoneServer.rb index a9ecd1e15c..fc09d4632f 100644 --- a/src/sunstone/models/SunstoneServer.rb +++ b/src/sunstone/models/SunstoneServer.rb @@ -67,14 +67,14 @@ class SunstoneServer end pool = case kind - when "group" then GroupPoolJSON.new(@client) - when "host" then HostPoolJSON.new(@client) - when "image" then ImagePoolJSON.new(@client, user_flag) - when "template" then TemplatePoolJSON.new(@client, user_flag) - when "vm" then VirtualMachinePoolJSON.new(@client, user_flag) - when "vnet" then VirtualNetworkPoolJSON.new(@client, user_flag) - when "user" then UserPoolJSON.new(@client) - when "acl" then AclPoolJSON.new(@client) + when "group" then GroupPoolJSON.new(@client) + when "host" then HostPoolJSON.new(@client) + when "image" then ImagePoolJSON.new(@client, user_flag) + when "vmtemplate" then TemplatePoolJSON.new(@client, user_flag) + when "vm" then VirtualMachinePoolJSON.new(@client, user_flag) + when "vnet" then VirtualNetworkPoolJSON.new(@client, user_flag) + when "user" then UserPoolJSON.new(@client) + when "acl" then AclPoolJSON.new(@client) else error = Error.new("Error: #{kind} resource not supported") return [404, error.to_json] @@ -119,14 +119,14 @@ class SunstoneServer ############################################################################ def create_resource(kind, template) resource = case kind - when "group" then GroupJSON.new(Group.build_xml, @client) - when "host" then HostJSON.new(Host.build_xml, @client) - when "image" then ImageJSON.new(Image.build_xml, @client) - when "template" then TemplateJSON.new(Template.build_xml, @client) - when "vm" then VirtualMachineJSON.new(VirtualMachine.build_xml,@client) - when "vnet" then VirtualNetworkJSON.new(VirtualNetwork.build_xml, @client) - when "user" then UserJSON.new(User.build_xml, @client) - when "acl" then AclJSON.new(Acl.build_xml, @client) + when "group" then GroupJSON.new(Group.build_xml, @client) + when "host" then HostJSON.new(Host.build_xml, @client) + when "image" then ImageJSON.new(Image.build_xml, @client) + when "vmtemplate" then TemplateJSON.new(Template.build_xml, @client) + when "vm" then VirtualMachineJSON.new(VirtualMachine.build_xml,@client) + when "vnet" then VirtualNetworkJSON.new(VirtualNetwork.build_xml, @client) + when "user" then UserJSON.new(User.build_xml, @client) + when "acl" then AclJSON.new(Acl.build_xml, @client) else error = Error.new("Error: #{kind} resource not supported") return [404, error.to_json] @@ -226,7 +226,7 @@ class SunstoneServer return [200, "Log for VM #{id} not available"] end - return [200, log] + return [200, {:vm_log => log}.to_json] end end @@ -339,7 +339,7 @@ class SunstoneServer when "group" then GroupJSON.new_with_id(id, @client) when "host" then HostJSON.new_with_id(id, @client) when "image" then ImageJSON.new_with_id(id, @client) - when "template" then TemplateJSON.new_with_id(id, @client) + when "vmtemplate" then TemplateJSON.new_with_id(id, @client) when "vm" then VirtualMachineJSON.new_with_id(id, @client) when "vnet" then VirtualNetworkJSON.new_with_id(id, @client) when "user" then UserJSON.new_with_id(id, @client) diff --git a/src/sunstone/public/js/opennebula.js b/src/sunstone/public/js/opennebula.js index 06a1cc651a..32071cc148 100644 --- a/src/sunstone/public/js/opennebula.js +++ b/src/sunstone/public/js/opennebula.js @@ -183,41 +183,174 @@ var OpenNebula = { return(p_pool); } }, - "chown": function(params,resource,url_prefix,chgrp){ + + //server requests methods + + "create": function(params,resource){ var callback = params.success; var callback_error = params.error; - var id = params.data.id; - var id2 = params.data.extra_param; - - var method = "chown"; - //if trying to change group, set owner to -1, otherwise set group to -1 - var object = chgrp ? {"owner_id": "-1", "group_id": id2} : {"owner_id": id2, "group_id": "-1"}; - var action = OpenNebula.Helper.action(method,object); - - var request = OpenNebula.Helper.request(resource,method, [id, id2]); + var data = params.data; + var request = OpenNebula.Helper.request(resource,"create", data); $.ajax({ - url: url_prefix + "/" + id + "/action", + url: resource.toLowerCase(), type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } + dataType: "json", + data: JSON.stringify(data), + success: function(response){ + return callback ? callback(request, response) : null; }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } + error: function(response){ + return callback_error ? + callback_error(request, OpenNebula.Error(response)) : null; } }); }, - "chgrp": function(params,resource,url_prefix){ - OpenNebula.Helper.chown(params,resource,url_prefix,true); + + "delete": function(params,resource){ + var callback = params.success; + var callback_error = params.error; + var id = params.data.id; + var request = OpenNebula.Helper.request(resource,"delete", id); + + $.ajax({ + url: resource.toLowerCase() + "/" + id, + type: "DELETE", + success: function(){ + return callback ? callback(request) : null; + }, + error: function(response){ + return callback_error ? + callback_error(request, OpenNebula.Error(response)) : null; + } + }); + }, + + "list": function(params,resource){ + var callback = params.success; + var callback_error = params.error; + var timeout = params.timeout || false; + var request = OpenNebula.Helper.request(resource,"list"); + + $.ajax({ + url: resource.toLowerCase(), + type: "GET", + data: {timeout: timeout}, + dataType: "json", + success: function(response){ + return callback ? + callback(request, OpenNebula.Helper.pool(resource,response)) : null; + }, + error: function(response) + { + return callback_error ? + callback_error(request, OpenNebula.Error(response)) : null; + } + }); + }, + + //Subresource examples: "fetch_template", "log"... + "show": function(params,resource,subresource){ + var callback = params.success; + var callback_error = params.error; + var id = params.data.id; + var request = subresource ? + OpenNebula.Helper.request(resource,subresource,id) : + OpenNebula.Helper.request(resource,"show", id); + + var url = resource.toLowerCase() + "/" + id; + url = subresource? url + "/" + subresource : url; + + $.ajax({ + url: url, + type: "GET", + dataType: "json", + success: function(response){ + return callback ? callback(request, response) : null; + }, + error: function(response){ + return callback_error ? + callback_error(request, OpenNebula.Error(response)) : null; + } + }); + }, + + "chown": function(params,resource,chgrp){ + var id = params.data.extra_param; + var action_obj = {"owner_id": id, + "group_id": "-1"}; + + OpenNebula.Helper.simple_action(params, + resource, + "chown", + action_obj); + }, + + "chgrp": function(params,resource){ + var id = params.data.extra_param; + var action_obj = {"owner_id": "-1", + "group_id": id}; + + OpenNebula.Helper.simple_action(params, + resource, + "chgrp", + action_obj); + }, + + //Example: Simple action: publish. Simple action with action obj: deploy + "simple_action": function(params,resource,method,action_obj){ + var callback = params.success; + var callback_error = params.error; + var id = params.data.id; + + var action,request; + if (action_obj) { + action = OpenNebula.Helper.action(method, action_obj); + request = OpenNebula.Helper.request(resource,method, [id, action_obj]); + } else { + action = OpenNebula.Helper.action(method); + request = OpenNebula.Helper.request(resource,method, id); + }; + + $.ajax({ + url: resource.toLowerCase() + "/" + id + "/action", + type: "POST", + data: JSON.stringify(action), + success: function(){ + return callback ? callback(request) : null; + }, + error: function(response){ + return callback_error ? + callback_error(request, OpenNebula.Error(response)) : null; + } + }); + }, + + "monitor": function(params,resource,all){ + var callback = params.success; + var callback_error = params.error; + var data = params.data; + + var method = "monitor"; + var action = OpenNebula.Helper.action(method); + var request = OpenNebula.Helper.request(resource,method, data); + + var url = resource.toLowerCase(); + url = all ? url + "/monitor" : url + "/" + params.data.id + "/monitor"; + + $.ajax({ + url: url, + type: "GET", + data: data['monitor'], + dataType: "json", + success: function(response){ + return callback ? callback(request, response) : null; + }, + error: function(response){ + return callback_error ? + callback_error(request, OpenNebula.Error(response)) : null; + } + }); } }, @@ -244,19 +377,12 @@ var OpenNebula = { "Basic " + btoa(username + ":" + password) ) }, - success: function(response) - { - if (callback) - { - callback(request, response); - } + success: function(response){ + return callback ? callback(request, response) : null; }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } + error: function(response){ + return callback_error ? + callback_error(request, OpenNebula.Error(response)) : null; } }); }, @@ -272,19 +398,12 @@ var OpenNebula = { $.ajax({ url: "logout", type: "POST", - success: function(response) - { - if (callback) - { - callback(request, response); - } + success: function(response){ + return callback ? callback(request, response) : null; }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } + error: function(response){ + return callback_error ? + callback_error(request, OpenNebula.Error(response)) : null; } }); } @@ -305,19 +424,12 @@ var OpenNebula = { url: "config", type: "GET", dataType: "json", - success: function(response) - { - if (callback) - { - callback(request, response); - } + success: function(response){ + return callback ? callback(request, response) : null; }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } + error: function(response){ + return callback_error ? + callback_error(request, OpenNebula.Error(response)) : null; } }); } @@ -326,2427 +438,352 @@ var OpenNebula = { "Host": { "resource": "HOST", - "create": function(params) - { - var callback = params.success; - var callback_error = params.error; - var data = params.data; - var resource = OpenNebula.Host.resource; - - var request = OpenNebula.Helper.request(resource,"create", data); - - $.ajax({ - url: "host", - type: "POST", - dataType: "json", - data: JSON.stringify(data), - success: function(response) - { - if (callback) - { - callback(request, response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "create": function(params){ + OpenNebula.Helper.create(params,OpenNebula.Host.resource); }, - - "delete": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.Host.resource; - - - var request = OpenNebula.Helper.request(resource,"delete", id); - - $.ajax({ - url: "host/" + id, - type: "DELETE", - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "delete": function(params){ + OpenNebula.Helper.delete(params,OpenNebula.Host.resource); }, - - "list": function(params) - { - var callback = params.success; - var callback_error = params.error; - var timeout = params.timeout || false; - - var resource = OpenNebula.Host.resource; - var request = OpenNebula.Helper.request(resource,"list"); - - $.ajax({ - url: "host", - type: "GET", - data: {timeout: timeout}, - dataType: "json", - success: function(response) - { - if (callback) - { - var host_pool = OpenNebula.Helper.pool(resource,response); - callback(request, host_pool); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "list": function(params){ + OpenNebula.Helper.list(params,OpenNebula.Host.resource); }, - - "show": function(params) - { - - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - - var resource = OpenNebula.Host.resource; - var request = OpenNebula.Helper.request(resource,"show", id); - - $.ajax({ - url: "host/" + id, - type: "GET", - dataType: "json", - success: function(response) - { - if (callback) - { - callback(request, response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "show": function(params){ + OpenNebula.Helper.show(params,OpenNebula.Host.resource); }, - - "enable": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.Host.resource; - - var method = "enable"; - var action = OpenNebula.Helper.action(method); - var request = OpenNebula.Helper.request(resource,method, id); - - $.ajax({ - url: "host/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if(callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "update": function(params){ + var action_obj = {"template_raw" : params.data.extra_param }; + OpenNebula.Helper.simple_action(params, + OpenNebula.Host.resource, + "update", + action_obj); }, - - "disable": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.Host.resource; - - var method = "disable"; - var action = OpenNebula.Helper.action(method); - var request = OpenNebula.Helper.request(resource,method, id); - - $.ajax({ - url: "host/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "fetch_template" : function(params){ + OpenNebula.Helper.show(params,OpenNebula.Host.resource,"template"); }, - - "fetch_template" : function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - - var method = "fetch_template"; - var resource = OpenNebula.Host.resource; - var request = OpenNebula.Helper.request(resource,method, id); - - $.ajax({ - url: "host/" + id + "/template", - type: "GET", - dataType:"json", - success: function(response) - { - if (callback) - { - callback(request,response); - } - }, - error: function(response) - { - if(callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "enable": function(params){ + OpenNebula.Helper.simple_action(params,OpenNebula.Host.resource,"enable"); }, - - "update": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var template_raw = params.data.extra_param; - var template_obj = {"template_raw": template_raw} - - var method = "update"; - var action = OpenNebula.Helper.action(method, template_obj); - - var resource = OpenNebula.Host.resource; - var request = OpenNebula.Helper.request(resource,method, [id, template_obj]); - - $.ajax({ - url: "host/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function(response) - { - if (callback) - { - callback(request, response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "disable": function(params){ + OpenNebula.Helper.simple_action(params,OpenNebula.Host.resource,"disable"); }, - "monitor" : function(params){ - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.Host.resource; - var data = params.data; - - var method = "monitor"; - var action = OpenNebula.Helper.action(method); - var request = OpenNebula.Helper.request(resource,method, data); - - $.ajax({ - url: "host/"+id+"/monitor", - type: "GET", - data: data['monitor'], - dataType: "json", - success: function(response) - { - if (callback) - { - callback(request,response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + OpenNebula.Helper.monitor(params,OpenNebula.Host.resource,false); }, "monitor_all" : function(params){ - var callback = params.success; - var callback_error = params.error; - var resource = OpenNebula.Host.resource; - var data = params.data; - - var method = "monitor"; - var action = OpenNebula.Helper.action(method); - var request = OpenNebula.Helper.request(resource,method, data); - - $.ajax({ - url: "host/monitor", - type: "GET", - data: data['monitor'], - dataType: "json", - success: function(response) - { - if (callback) - { - callback(request,response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + OpenNebula.Helper.monitor(params,OpenNebula.Host.resource,true); } }, "Network": { "resource": "VNET", - "create": function(params) - { - var callback = params.success; - var callback_error = params.error; - var data = params.data; - var resource = OpenNebula.Network.resource; - - var request = OpenNebula.Helper.request(resource,"create",data); - - $.ajax({ - url: "vnet", - type: "POST", - dataType: "json", - data: JSON.stringify(data), - success: function(response) - { - if (callback) - { - callback(request, response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "create": function(params){ + OpenNebula.Helper.create(params,OpenNebula.Network.resource); }, - - "delete": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.Network.resource; - - var request = OpenNebula.Helper.request(resource,"delete", id); - - $.ajax({ - url: "vnet/" + id, - type: "DELETE", - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "delete": function(params){ + OpenNebula.Helper.delete(params,OpenNebula.Network.resource); }, - - "list": function(params) - { - var callback = params.success; - var callback_error = params.error; - var timeout = params.timeout || false; - var resource = OpenNebula.Network.resource; - - var request = OpenNebula.Helper.request(resource,"list"); - - $.ajax({ - url: "vnet", - type: "GET", - dataType: "json", - data: {timeout: timeout}, - success: function(response) - { - if (callback) - { - var vnet_pool = OpenNebula.Helper.pool(resource,response); - callback(request, vnet_pool); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "list": function(params){ + OpenNebula.Helper.list(params,OpenNebula.Network.resource); }, - - "show": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.Network.resource; - - var request = OpenNebula.Helper.request(resource,"show", id); - - $.ajax({ - url: "vnet/" + id, - type: "GET", - dataType: "json", - success: function(response) - { - if (callback) - { - callback(request, response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "show": function(params){ + OpenNebula.Helper.show(params,OpenNebula.Network.resource); }, - - "publish": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.Network.resource; - - var method = "publish"; - var action = OpenNebula.Helper.action(method); - var request = OpenNebula.Helper.request(resource,method, id); - - $.ajax({ - url: "vnet/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if(callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "unpublish": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.Network.resource; - - var method = "unpublish"; - var action = OpenNebula.Helper.action(method); - var request = OpenNebula.Helper.request(resource,method, id); - - $.ajax({ - url: "vnet/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if(callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "addleases" : function(params){ - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var obj = params.data.extra_param; - - var method = "addleases"; - var action = OpenNebula.Helper.action(method,obj); - var resource = OpenNebula.Network.resource; - var request = OpenNebula.Helper.request(resource,method, [id,obj]); - - $.ajax({ - url: "vnet/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if(callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "rmleases" : function(params){ - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var obj = params.data.extra_param; - - var method = "rmleases"; - var action = OpenNebula.Helper.action(method,obj); - var resource = OpenNebula.Network.resource; - var request = OpenNebula.Helper.request(resource,method, [id,obj]); - - $.ajax({ - url: "vnet/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if(callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - "chown" : function(params){ - OpenNebula.Helper.chown(params,OpenNebula.Network.resource,"vnet"); + OpenNebula.Helper.chown(params,OpenNebula.Network.resource); }, - "chgrp" : function(params){ - OpenNebula.Helper.chgrp(params,OpenNebula.Network.resource,"vnet"); + OpenNebula.Helper.chgrp(params,OpenNebula.Network.resource); + }, + "publish": function(params){ + OpenNebula.Helper.simple_action(params,OpenNebula.Network.resource,"publish"); + }, + "unpublish": function(params){ + OpenNebula.Helper.simple_action(params,OpenNebula.Network.resource,"unpublish"); + }, + "addleases" : function(params){ + var action_obj = params.data.extra_param; + OpenNebula.Helper.simple_action(params, + OpenNebula.Network.resource, + "addleases", + action_obj); + }, + "rmleases" : function(params){ + var action_obj = params.data.extra_param; + OpenNebula.Helper.simple_action(params, + OpenNebula.Network.resource, + "rmleases", + action_obj); } }, "VM": { "resource": "VM", - "create": function(params) - { + "create": function(params){ + OpenNebula.Helper.create(params,OpenNebula.VM.resource); + }, + "delete": function(params){ + OpenNebula.Helper.delete(params,OpenNebula.VM.resource); + }, + "list": function(params){ + OpenNebula.Helper.list(params,OpenNebula.VM.resource); + }, + "show": function(params){ + OpenNebula.Helper.show(params,OpenNebula.VM.resource); + }, + "chown" : function(params){ + OpenNebula.Helper.chown(params,OpenNebula.VM.resource); + }, + "chgrp" : function(params){ + OpenNebula.Helper.chgrp(params,OpenNebula.VM.resource); + }, + "shutdown": function(params){ + OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource,"shutdown"); + }, + "hold": function(params){ + OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource,"hold"); + }, + "release": function(params){ + OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource,"release"); + }, + "stop": function(params){ + OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource,"stop"); + }, + "cancel": function(params){ + OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource,"cancel"); + }, + "suspend": function(params){ + OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource,"suspend"); + }, + "resume": function(params){ + OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource,"resume"); + }, + "restart": function(params){ + OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource,"restart"); + }, + "resubmit": function(params){ + OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource,"resubmit"); + }, + + "log": function(params){ + OpenNebula.Helper.show(params,OpenNebula.VM.resource,"log"); + }, + "deploy": function(params){ + var action_obj = {"host_id": params.data.extra_param}; + OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource, + "deploy",action_obj); + }, + "livemigrate": function(params){ + var action_obj = {"host_id": params.data.extra_param}; + OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource, + "livemigrate",action_obj); + }, + "migrate": function(params){ + var action_obj = {"host_id": params.data.extra_param}; + OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource, + "migrate",action_obj); + }, + "saveas": function(params){ + var action_obj = params.data.extra_param; + OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource, + "saveas",action_obj); + }, + "vnc" : function(params,startstop){ var callback = params.success; var callback_error = params.error; - var data = params.data; + var id = params.data.id; var resource = OpenNebula.VM.resource; - var request = OpenNebula.Helper.request(resource,"create",data); - + var method = startstop; + var action = OpenNebula.Helper.action(method); + var request = OpenNebula.Helper.request(resource,method, id); $.ajax({ - url: "vm", + url: "vm/" + id + "/" + method, type: "POST", dataType: "json", - data: JSON.stringify(data), - success: function(response) - { - if (callback) - { - callback(request, response); - } + success: function(response){ + return callback ? callback(request, response) : null; }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } + error: function(response){ + return callback_error ? + callback_error(request, OpenNebula.Error(response)) : null; } }); }, - - "delete": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.Network.resource; - - var request = OpenNebula.Helper.request(resource,"delete", id); - - $.ajax({ - url: "vm/" + id, - type: "DELETE", - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "list": function(params) - { - var callback = params.success; - var callback_error = params.error; - var timeout = params.timeout || false; - - var resource = OpenNebula.VM.resource; - var request = OpenNebula.Helper.request(resource,"list"); - - $.ajax({ - url: "vm", - type: "GET", - dataType: "json", - data: {timeout: timeout}, - success: function(response) - { - if (callback) - { - var vm_pool = OpenNebula.Helper.pool(resource,response); - callback(request, vm_pool); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "log": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.VM.resource; - - var request = OpenNebula.Helper.request(resource,"log", id); - - $.ajax({ - url: "vm/" + id + "/log", - type: "GET", - success: function(response) - { - if (callback) - { - callback(request, response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "show": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.VM.resource; - - var request = OpenNebula.Helper.request(resource,"show", id); - - $.ajax({ - url: "vm/" + id, - type: "GET", - dataType: "json", - success: function(response) - { - if (callback) - { - callback(request, response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "deploy": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var host = params.data.extra_param; - var resource = OpenNebula.VM.resource; - - var method = "deploy"; - var action = OpenNebula.Helper.action(method, {"host_id": host}); - var request = OpenNebula.Helper.request(resource,method, [id, host]); - - $.ajax({ - url: "vm/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "shutdown": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.VM.resource; - - var method = "shutdown"; - var action = OpenNebula.Helper.action(method); - var request = OpenNebula.Helper.request(resource,method, id); - - $.ajax({ - url: "vm/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "livemigrate": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var host = params.data.extra_param; - var resource = OpenNebula.VM.resource; - - var method = "livemigrate"; - var action = OpenNebula.Helper.action(method,{"host_id": host}); - var request = OpenNebula.Helper.request(resource,method, [id, host]); - - $.ajax({ - url: "vm/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "migrate": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var host = params.data.extra_param; - var resource = OpenNebula.VM.resource; - - var method = "migrate"; - var action = OpenNebula.Helper.action(method,{"host_id": host}); - var request = OpenNebula.Helper.request(resource,method, [id, host]); - - $.ajax({ - url: "vm/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "hold": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.VM.resource; - - var method = "hold"; - var action = OpenNebula.Helper.action(method); - var request = OpenNebula.Helper.request(resource,method, id); - - $.ajax({ - url: "vm/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "release": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.VM.resource; - - var method = "release"; - var action = OpenNebula.Helper.action(method); - var request = OpenNebula.Helper.request(resource,method, id); - - $.ajax({ - url: "vm/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "stop": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.VM.resource; - - var method = "stop"; - var action = OpenNebula.Helper.action(method); - var request = OpenNebula.Helper.request(resource,method, id); - - $.ajax({ - url: "vm/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "cancel": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.VM.resource; - - var method = "cancel"; - var action = OpenNebula.Helper.action(method); - var request = OpenNebula.Helper.request(resource,method, id); - - $.ajax({ - url: "vm/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "suspend": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.VM.resource; - - var method = "suspend"; - var action = OpenNebula.Helper.action(method); - var request = OpenNebula.Helper.request(resource,method, id); - - $.ajax({ - url: "vm/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "resume": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.VM.resource; - - var method = "resume"; - var action = OpenNebula.Helper.action(method); - var request = OpenNebula.Helper.request(resource,method, id); - - $.ajax({ - url: "vm/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "saveas": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.vm_id; - var disk_id = params.data.disk_id; - var image_name = params.data.image_name; - var type = params.data.type; - - var method = "saveas"; - var saveas_params = { - "disk_id" : disk_id, - "image_name": image_name, - "type" : type - } - var resource = OpenNebula.VM.resource; - - var action = OpenNebula.Helper.action(method,saveas_params) - var request = OpenNebula.Helper.request(resource,method, [id,disk_id, image_name, type]); - - $.ajax({ - url: "vm/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "restart": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.VM.resource; - - var method = "restart"; - var action = OpenNebula.Helper.action(method); - var request = OpenNebula.Helper.request(resource,method, id); - - $.ajax({ - url: "vm/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "resubmit": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.VM.resource; - - var method = "resubmit"; - var action = OpenNebula.Helper.action(method); - var request = OpenNebula.Helper.request(resource,method, id); - - $.ajax({ - url: "vm/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - "startvnc" : function(params){ - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.VM.resource; - - var method = "startvnc"; - var action = OpenNebula.Helper.action(method); - var request = OpenNebula.Helper.request(resource,method, id); - $.ajax({ - url: "vm/"+id+"/startvnc", - type: "POST", - dataType: "json", - success: function(response) - { - if (callback) - { - callback(request,response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + OpenNebula.VM.vnc(params,"startvnc"); }, - "stopvnc" : function(params){ - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.VM.resource; - - var method = "stopvnc"; - var action = OpenNebula.Helper.action(method); - var request = OpenNebula.Helper.request(resource,method, id); - $.ajax({ - url: "vm/"+id+"/stopvnc", - type: "POST", - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + OpenNebula.VM.vnc(params,"stopvnc"); }, - "monitor" : function(params){ - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.VM.resource; - var data = params.data; - - var method = "monitor"; - var action = OpenNebula.Helper.action(method); - var request = OpenNebula.Helper.request(resource,method, data); - - $.ajax({ - url: "vm/"+id+"/monitor", - type: "GET", - data: data['monitor'], - dataType: "json", - success: function(response) - { - if (callback) - { - callback(request,response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + OpenNebula.Helper.monitor(params,OpenNebula.VM.resource,false); }, "monitor_all" : function(params){ - var callback = params.success; - var callback_error = params.error; - var resource = OpenNebula.VM.resource; - var data = params.data; - - var method = "monitor"; - var action = OpenNebula.Helper.action(method); - var request = OpenNebula.Helper.request(resource,method, data); - - $.ajax({ - url: "vm/monitor", - type: "GET", - data: data['monitor'], - dataType: "json", - success: function(response) - { - if (callback) - { - callback(request,response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "chown" : function(params){ - OpenNebula.Helper.chown(params,OpenNebula.VM.resource,"vm"); - }, - - "chgrp" : function(params){ - OpenNebula.Helper.chgrp(params,OpenNebula.VM.resource,"vm"); + OpenNebula.Helper.monitor(params,OpenNebula.VM.resource,true); } }, "Group": { "resource": "GROUP", - "create": function(params) - { - var callback = params.success; - var callback_error = params.error; - var data = params.data; - var resource = OpenNebula.Group.resource; - - var request = OpenNebula.Helper.request(resource,"create", name); - - $.ajax({ - url: "group", - type: "POST", - dataType: "json", - data: JSON.stringify(data), - success: function(response) - { - if (callback) - { - callback(request, response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "create": function(params){ + OpenNebula.Helper.create(params,OpenNebula.Group.resource); }, - - "delete": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.Group.resource; - - var request = OpenNebula.Helper.request(resource,"delete", id); - - $.ajax({ - url: "group/" + id, - type: "DELETE", - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "delete": function(params){ + OpenNebula.Helper.delete(params,OpenNebula.Group.resource); }, - - "list": function(params) - { - var callback = params.success; - var callback_error = params.error; - var timeout = params.timeout || false; - - var resource = OpenNebula.Group.resource; - var request = OpenNebula.Helper.request(resource,"list"); - - $.ajax({ - url: "group", - type: "GET", - dataType: "json", - data: {timeout: timeout}, - success: function(response) - { - if (callback) - { - var group_pool = OpenNebula.Helper.pool(resource,response); - callback(request, group_pool); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "list": function(params){ + OpenNebula.Helper.list(params,OpenNebula.Group.resource); } - - // "chown": function(params) - // { - // OpenNebula.Helper.chown(params,OpenNebula.Group.resource,"group"); - // } }, "User": { "resource": "USER", - "create": function(params) - { - var callback = params.success; - var callback_error = params.error; - var data = params.data; - var resource = OpenNebula.User.resource; - - var request = OpenNebula.Helper.request(resource,"create",data); - - $.ajax({ - url: "user", - type: "POST", - dataType: "json", - data: JSON.stringify(data), - success: function(response) - { - if (callback) - { - callback(request, response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "create": function(params){ + OpenNebula.Helper.create(params,OpenNebula.User.resource); }, - - "show" : function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - - var resource = OpenNebula.User.resource; - var request = OpenNebula.Helper.request(resource,"show", id); - - $.ajax({ - url: "user/" + id, - type: "GET", - dataType: "json", - success: function(response) - { - if (callback) - { - callback(request, response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "delete": function(params){ + OpenNebula.Helper.delete(params,OpenNebula.User.resource); }, - - "delete": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.User.resource; - - var request = OpenNebula.Helper.request(resource,"delete", id); - - $.ajax({ - url: "user/" + id, - type: "DELETE", - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "list": function(params){ + OpenNebula.Helper.list(params,OpenNebula.User.resource); }, - - "list": function(params) - { - var callback = params.success; - var callback_error = params.error; - var timeout = params.timeout || false; - - var resource = OpenNebula.User.resource; - var request = OpenNebula.Helper.request(resource,"list"); - - $.ajax({ - url: "user", - type: "GET", - dataType: "json", - data: {timeout: timeout}, - success: function(response) - { - if (callback) - { - var user_pool = OpenNebula.Helper.pool(resource,response); - callback(request, user_pool); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "show" : function(params){ + OpenNebula.Helper.show(params,OpenNebula.User.resource); }, - - "passwd": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var passwd = params.data.password; - - var method = "passwd"; - var action = OpenNebula.Helper.action(method, { - "password" : passwd - }); - - var resource = OpenNebula.User.resource; - var request = OpenNebula.Helper.request(resource,method, passwd); - - $.ajax({ - url: "user/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function(response) - { - if (callback) - { - callback(request, response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "passwd": function(params){ + var action_obj = {"password": params.data.extra_param }; + OpenNebula.Helper.simple_action(params,OpenNebula.User.resource, + "passwd",action_obj); }, - "chgrp" : function(params){ - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var gid = params.data.extra_param; - - var method = "chgrp"; - var action = OpenNebula.Helper.action(method, {"group_id": gid}); - var request = OpenNebula.Helper.request(OpenNebula.User.resource,method, [id, gid]); - - $.ajax({ - url: "user/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + var action_obj = {"group_id": params.data.extra_param }; + OpenNebula.Helper.simple_action(params,OpenNebula.User.resource, + "chgrp",action_obj); } - // "addgroup" : function(params){ - // var callback = params.success; - // var callback_error = params.error; - // var id = params.data.id; - // var gid = params.data.extra_param; - - // var method = "addgroup"; - // var action = OpenNebula.Helper.action(method, {"group_id": gid}); - // var request = OpenNebula.Helper.request(OpenNebula.User.resource,method, [id, gid]); - - // $.ajax({ - // url: "user/" + id + "/action", - // type: "POST", - // data: JSON.stringify(action), - // success: function() - // { - // if (callback) - // { - // callback(request); - // } - // }, - // error: function(response) - // { - // if (callback_error) - // { - // callback_error(request, OpenNebula.Error(response)); - // } - // } - // }); + // var action_obj = {"group_id": params.data.extra_param }; + // OpenNebula.Helper.simple_action(params,OpenNebula.User.resource, + // "addgroup",action_obj); // }, // "delgroup" : function(params){ - // var callback = params.success; - // var callback_error = params.error; - // var id = params.data.id; - // var gid = params.data.extra_param; - - // var method = "delgroup"; - // var action = OpenNebula.Helper.action(method, {"group_id": gid}); - // var request = OpenNebula.Helper.request(OpenNebula.User.resource,method, [id, gid]); - - // $.ajax({ - // url: "user/" + id + "/action", - // type: "POST", - // data: JSON.stringify(action), - // success: function() - // { - // if (callback) - // { - // callback(request); - // } - // }, - // error: function(response) - // { - // if (callback_error) - // { - // callback_error(request, OpenNebula.Error(response)); - // } - // } - // }); + // var action_obj = {"group_id": params.data.extra_param }; + // OpenNebula.Helper.simple_action(params,OpenNebula.User.resource, + // "delgroup",action_obj); // } }, "Image": { "resource": "IMAGE", - "register": function(params) - { - var callback = params.success; - var callback_error = params.error; - var data = params.data; - var resource = OpenNebula.Image.resource; - - var request = OpenNebula.Helper.request(resource,"register",data); - - $.ajax({ - url: "image", - type: "POST", - dataType: "json", - data: JSON.stringify(data), - success: function(response) - { - if (callback) - { - callback(request, response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "create": function(params){ + OpenNebula.Helper.create(params,OpenNebula.Image.resource); }, - "fetch_template" : function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - - var method = "fetch_template"; - var resource = OpenNebula.Image.resource; - var request = OpenNebula.Helper.request(resource,method, id); - - $.ajax({ - url: "image/" + id + "/template", - type: "GET", - dataType:"json", - success: function(response) - { - if (callback) - { - callback(request,response); - } - }, - error: function(response) - { - if(callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "delete": function(params){ + OpenNebula.Helper.delete(params,OpenNebula.Image.resource); }, - - "update": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var template_raw = params.data.extra_param; - var template_obj = {"template_raw": template_raw} - - var method = "update"; - var action = OpenNebula.Helper.action(method, template_obj); - - var resource = OpenNebula.Image.resource; - var request = OpenNebula.Helper.request(resource,method, [id, template_obj]); - - $.ajax({ - url: "image/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function(response) - { - if (callback) - { - callback(request, response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "list": function(params){ + OpenNebula.Helper.list(params,OpenNebula.Image.resource); }, - "delete": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.Image.resource; - - var request = OpenNebula.Helper.request(resource,"delete", id); - - $.ajax({ - url: "image/" + id, - type: "DELETE", - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "show": function(params){ + OpenNebula.Helper.show(params,OpenNebula.Image.resource); }, - - "list": function(params) - { - var callback = params.success; - var callback_error = params.error; - var timeout = params.timeout || false; - - var resource = OpenNebula.Image.resource; - var request = OpenNebula.Helper.request(resource,"list"); - - $.ajax({ - url: "image", - type: "GET", - dataType: "json", - data: {timeout: timeout}, - success: function(response) - { - if (callback) - { - var image_pool = OpenNebula.Helper.pool(resource,response); - callback(request, image_pool); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "show": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - - var resource = OpenNebula.Image.resource; - var request = OpenNebula.Helper.request(resource,"show", id); - - $.ajax({ - url: "image/" + id, - type: "GET", - dataType: "json", - success: function(response) - { - if (callback) - { - callback(request, response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - "enable": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - - var method = "enable"; - var action = OpenNebula.Helper.action(method); - - var resource = OpenNebula.Image.resource; - var request = OpenNebula.Helper.request(resource,method, id); - - $.ajax({ - url: "image/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if(callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "disable": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - - var method = "disable"; - var action = OpenNebula.Helper.action(method); - var resource = OpenNebula.Image.resource; - var request = OpenNebula.Helper.request(resource,method, id); - - $.ajax({ - url: "image/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if(callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "publish": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - - var method = "publish"; - var action = OpenNebula.Helper.action(method); - var resource = OpenNebula.Image.resource; - var request = OpenNebula.Helper.request(resource,method, id); - - $.ajax({ - url: "image/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if(callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "unpublish": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - - var method = "unpublish"; - var action = OpenNebula.Helper.action(method); - var resource = OpenNebula.Image.resource; - var request = OpenNebula.Helper.request(resource,method, id); - - $.ajax({ - url: "image/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if(callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "persistent": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - - var method = "persistent"; - var action = OpenNebula.Helper.action(method); - - var resource = OpenNebula.Image.resource; - var request = OpenNebula.Helper.request(resource,method, id); - - $.ajax({ - url: "image/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if(callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - - "nonpersistent": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - - var method = "nonpersistent"; - var action = OpenNebula.Helper.action(method); - - var resource = OpenNebula.Image.resource; - var request = OpenNebula.Helper.request(resource,method, id); - - $.ajax({ - url: "image/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if(callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - "chown" : function(params){ - OpenNebula.Helper.chown(params,OpenNebula.Image.resource,"image"); + OpenNebula.Helper.chown(params,OpenNebula.Image.resource); }, - "chgrp" : function(params){ - OpenNebula.Helper.chgrp(params,OpenNebula.Image.resource,"image"); + OpenNebula.Helper.chgrp(params,OpenNebula.Image.resource); + }, + "update": function(params){ + var action_obj = {"template_raw" : params.data.extra_param }; + OpenNebula.Helper.simple_action(params, + OpenNebula.Image.resource, + "update", + action_obj); + }, + "fetch_template" : function(params){ + OpenNebula.Helper.show(params,OpenNebula.Image.resource,"template"); + }, + "enable": function(params){ + OpenNebula.Helper.simple_action(params,OpenNebula.Image.resource,"enable"); + }, + "disable": function(params){ + OpenNebula.Helper.simple_action(params,OpenNebula.Image.resource,"disable"); + }, + "publish": function(params){ + OpenNebula.Helper.simple_action(params,OpenNebula.Image.resource,"publish"); + }, + "unpublish": function(params){ + OpenNebula.Helper.simple_action(params,OpenNebula.Image.resource,"unpublish"); + }, + "persistent": function(params){ + OpenNebula.Helper.simple_action(params,OpenNebula.Image.resource,"persistent"); + }, + "nonpersistent": function(params){ + OpenNebula.Helper.simple_action(params,OpenNebula.Image.resource,"nonpersistent"); } }, "Template" : { "resource" : "VMTEMPLATE", - "create" : function(params) - { - var callback = params.success; - var callback_error = params.error; - var data = params.data; - var resource = OpenNebula.Template.resource; - - var request = OpenNebula.Helper.request(resource,"create",data); - - $.ajax({ - url: "template", - type: "POST", - dataType: "json", - data: JSON.stringify(data), - success: function(response) - { - if (callback) - { - callback(request, response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - + "create" : function(params){ + OpenNebula.Helper.create(params,OpenNebula.Template.resource); }, - "instantiate" : function(params) { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var vm_name = params.data.extra_param ? params.data.extra_param : ""; - var vm_obj = { "vm_name" : vm_name } - - var method = "instantiate"; - var action = OpenNebula.Helper.action(method,vm_obj); - var resource = OpenNebula.Template.resource; - var request = OpenNebula.Helper.request(resource,method, [id,vm_obj]); - - $.ajax({ - url: "template/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if(callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "delete" : function(params){ + OpenNebula.Helper.delete(params,OpenNebula.Template.resource); }, - - "fetch_template" : function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - - var method = "fetch_template"; - var resource = OpenNebula.Template.resource; - var request = OpenNebula.Helper.request(resource,method, id); - - $.ajax({ - url: "template/" + id + "/template", - type: "GET", - dataType:"json", - success: function(response) - { - if (callback) - { - callback(request,response); - } - }, - error: function(response) - { - if(callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "list" : function(params){ + OpenNebula.Helper.list(params,OpenNebula.Template.resource); }, - "update" : function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var template_raw = params.data.extra_param; - var template_obj = {"template_raw": template_raw} - - var method = "update"; - var action = OpenNebula.Helper.action(method, template_obj); - - var resource = OpenNebula.Template.resource; - var request = OpenNebula.Helper.request(resource,method, [id, template_obj]); - - $.ajax({ - url: "template/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function(response) - { - if (callback) - { - callback(request, response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + "show" : function(params){ + OpenNebula.Helper.show(params,OpenNebula.Template.resource); }, - - "publish" : function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - - var method = "publish"; - var action = OpenNebula.Helper.action(method); - var resource = OpenNebula.Template.resource; - var request = OpenNebula.Helper.request(resource,method, id); - - $.ajax({ - url: "template/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if(callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - "unpublish" : function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - - var method = "unpublish"; - var action = OpenNebula.Helper.action(method); - var resource = OpenNebula.Template.resource; - var request = OpenNebula.Helper.request(resource,method, id); - - $.ajax({ - url: "template/" + id + "/action", - type: "POST", - data: JSON.stringify(action), - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if(callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - "list" : function(params) - { - var callback = params.success; - var callback_error = params.error; - var timeout = params.timeout || false; - - var resource = OpenNebula.Template.resource; - var request = OpenNebula.Helper.request(resource,"list"); - - $.ajax({ - url: "template", - type: "GET", - dataType: "json", - data: {timeout: timeout}, - success: function(response) - { - if (callback) - { - var template_pool = OpenNebula.Helper.pool(resource,response); - callback(request, template_pool); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - "show" : function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - - var resource = OpenNebula.Template.resource; - var request = OpenNebula.Helper.request(resource,"show", id); - - $.ajax({ - url: "template/" + id, - type: "GET", - dataType: "json", - success: function(response) - { - if (callback) - { - callback(request, response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - "delete" : function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.Template.resource; - - var request = OpenNebula.Helper.request(resource,"delete", id); - - $.ajax({ - url: "template/" + id, - type: "DELETE", - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - "chown" : function(params){ - OpenNebula.Helper.chown(params,OpenNebula.Template.resource,"template"); + OpenNebula.Helper.chown(params,OpenNebula.Template.resource); + }, + "chgrp" : function(params){ + OpenNebula.Helper.chgrp(params,OpenNebula.Template.resource); + }, + "update" : function(params){ + var action_obj = {"template_raw" : params.data.extra_param }; + OpenNebula.Helper.simple_action(params, + OpenNebula.Template.resource, + "update", + action_obj); + }, + "fetch_template" : function(params){ + OpenNebula.Helper.show(params,OpenNebula.Template.resource,"template"); + }, + "publish" : function(params){ + OpenNebula.Helper.simple_action(params,OpenNebula.Template.resource,"publish"); + }, + "unpublish" : function(params){ + OpenNebula.Helper.simple_action(params,OpenNebula.Template.resource,"unpublish"); }, - "chgrp" : function(params){ - OpenNebula.Helper.chgrp(params,OpenNebula.Template.resource,"template"); + "instantiate" : function(params) { + var vm_name = params.data.extra_param ? params.data.extra_param : ""; + var action_obj = { "vm_name" : vm_name }; + OpenNebula.Helper.simple_action(params,OpenNebula.Template.resource, + "instantiate",action_obj); } }, "Acl" : { "resource" : "ACL", + "create" : function(params){ - var callback = params.success; - var callback_error = params.error; - var data = params.data; - var resource = OpenNebula.Acl.resource; - - var request = OpenNebula.Helper.request(resource,"create",data); - - $.ajax({ - url: "acl", - type: "POST", - dataType: "json", - data: JSON.stringify(data), - success: function(response) - { - if (callback) - { - callback(request, response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); - }, - "list" : function(params){ - var callback = params.success; - var callback_error = params.error; - var timeout = params.timeout || false; - - var resource = OpenNebula.Acl.resource; - var request = OpenNebula.Helper.request(resource,"list"); - - $.ajax({ - url: "acl", - type: "GET", - dataType: "json", - data: {timeout: timeout}, - success: function(response) - { - if (callback) - { - var acl_pool = OpenNebula.Helper.pool(resource,response); - callback(request, acl_pool); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + OpenNebula.Helper.create(params,OpenNebula.Acl.resource); }, "delete" : function(params){ - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = OpenNebula.Acl.resource; - - var request = OpenNebula.Helper.request(resource,"delete", id); - - $.ajax({ - url: "acl/" + id, - type: "DELETE", - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, OpenNebula.Error(response)); - } - } - }); + OpenNebula.Helper.delete(params,OpenNebula.Acl.resource); + }, + "list" : function(params){ + OpenNebula.Helper.list(params,OpenNebula.Acl.resource); } } } diff --git a/src/sunstone/public/js/plugins/images-tab.js b/src/sunstone/public/js/plugins/images-tab.js index d47357002e..8713f11fb6 100644 --- a/src/sunstone/public/js/plugins/images-tab.js +++ b/src/sunstone/public/js/plugins/images-tab.js @@ -161,9 +161,9 @@ var $create_image_dialog; var image_actions = { - "Image.register" : { + "Image.create" : { type: "create", - call: OpenNebula.Image.register, + call: OpenNebula.Image.create, callback: addImageElement, error: onError, notify:true @@ -710,7 +710,7 @@ function setupCreateImageDialog(){ break; } var obj = { "image" : img_json }; - Sunstone.runAction("Image.register", obj); + Sunstone.runAction("Image.create", obj); $create_image_dialog.dialog('close'); return false; @@ -718,7 +718,7 @@ function setupCreateImageDialog(){ $('#create_image_form_manual',dialog).submit(function(){ var template=$('#template',this).val(); - Sunstone.runAction("Image.register",template); + Sunstone.runAction("Image.create",template); $create_image_dialog.dialog('close'); return false; }); diff --git a/src/sunstone/public/js/plugins/vms-tab.js b/src/sunstone/public/js/plugins/vms-tab.js index 062c1e7e6f..e7b099b7ce 100644 --- a/src/sunstone/public/js/plugins/vms-tab.js +++ b/src/sunstone/public/js/plugins/vms-tab.js @@ -250,13 +250,10 @@ var vm_actions = { }, "VM.saveas" : { - type: "custom", - call: function(obj) { - OpenNebula.VM.saveas( - {data:obj, - success: vmShow, - error: onError }); - } + type: "single", + call: OpenNebula.VM.saveas, + callback: vmShow, + error:onError }, "VM.saveas_disks" : { @@ -299,6 +296,7 @@ var vm_actions = { callback: function(req,res) { //after calling VM.log we process the answer //update the tab and pop it up again + res = res['vm_log']; var log_lines = res.split("\n"); var colored_log = ''; for (var i = 0; i < log_lines.length;i++){ @@ -822,13 +820,12 @@ function setupSaveasDialog(){ } else { var obj = { - vm_id: id, disk_id : disk_id, image_name : image_name //type: type }; args.push(id); - Sunstone.runAction("VM.saveas",obj); + Sunstone.runAction("VM.saveas",id,obj); } }); if (args.length > 0){ From 09707865beec7283c8c0b4f54f2ba93610b4c891 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Fri, 9 Sep 2011 12:17:17 +0200 Subject: [PATCH 06/31] Feature #799: Put action request helpers as "OpenNebula.Action" / Fix chgrp This way they are separated from original helpers in OpenNebula.Helper, as their function is different. Additionally, a the chgrp action has been fixed. --- src/sunstone/public/js/opennebula.js | 175 ++++++++++++++------------- 1 file changed, 89 insertions(+), 86 deletions(-) diff --git a/src/sunstone/public/js/opennebula.js b/src/sunstone/public/js/opennebula.js index 32071cc148..ce844730f0 100644 --- a/src/sunstone/public/js/opennebula.js +++ b/src/sunstone/public/js/opennebula.js @@ -182,9 +182,12 @@ var OpenNebula = { p_pool[0][type] = pool; return(p_pool); } - }, + } + }, - //server requests methods + "Action": { + + //server requests helper methods "create": function(params,resource){ var callback = params.success; @@ -280,7 +283,7 @@ var OpenNebula = { var action_obj = {"owner_id": id, "group_id": "-1"}; - OpenNebula.Helper.simple_action(params, + OpenNebula.Action.simple_action(params, resource, "chown", action_obj); @@ -291,9 +294,9 @@ var OpenNebula = { var action_obj = {"owner_id": "-1", "group_id": id}; - OpenNebula.Helper.simple_action(params, + OpenNebula.Action.simple_action(params, resource, - "chgrp", + "chown", action_obj); }, @@ -439,38 +442,38 @@ var OpenNebula = { "resource": "HOST", "create": function(params){ - OpenNebula.Helper.create(params,OpenNebula.Host.resource); + OpenNebula.Action.create(params,OpenNebula.Host.resource); }, "delete": function(params){ - OpenNebula.Helper.delete(params,OpenNebula.Host.resource); + OpenNebula.Action.delete(params,OpenNebula.Host.resource); }, "list": function(params){ - OpenNebula.Helper.list(params,OpenNebula.Host.resource); + OpenNebula.Action.list(params,OpenNebula.Host.resource); }, "show": function(params){ - OpenNebula.Helper.show(params,OpenNebula.Host.resource); + OpenNebula.Action.show(params,OpenNebula.Host.resource); }, "update": function(params){ var action_obj = {"template_raw" : params.data.extra_param }; - OpenNebula.Helper.simple_action(params, + OpenNebula.Action.simple_action(params, OpenNebula.Host.resource, "update", action_obj); }, "fetch_template" : function(params){ - OpenNebula.Helper.show(params,OpenNebula.Host.resource,"template"); + OpenNebula.Action.show(params,OpenNebula.Host.resource,"template"); }, "enable": function(params){ - OpenNebula.Helper.simple_action(params,OpenNebula.Host.resource,"enable"); + OpenNebula.Action.simple_action(params,OpenNebula.Host.resource,"enable"); }, "disable": function(params){ - OpenNebula.Helper.simple_action(params,OpenNebula.Host.resource,"disable"); + OpenNebula.Action.simple_action(params,OpenNebula.Host.resource,"disable"); }, "monitor" : function(params){ - OpenNebula.Helper.monitor(params,OpenNebula.Host.resource,false); + OpenNebula.Action.monitor(params,OpenNebula.Host.resource,false); }, "monitor_all" : function(params){ - OpenNebula.Helper.monitor(params,OpenNebula.Host.resource,true); + OpenNebula.Action.monitor(params,OpenNebula.Host.resource,true); } }, @@ -478,39 +481,39 @@ var OpenNebula = { "resource": "VNET", "create": function(params){ - OpenNebula.Helper.create(params,OpenNebula.Network.resource); + OpenNebula.Action.create(params,OpenNebula.Network.resource); }, "delete": function(params){ - OpenNebula.Helper.delete(params,OpenNebula.Network.resource); + OpenNebula.Action.delete(params,OpenNebula.Network.resource); }, "list": function(params){ - OpenNebula.Helper.list(params,OpenNebula.Network.resource); + OpenNebula.Action.list(params,OpenNebula.Network.resource); }, "show": function(params){ - OpenNebula.Helper.show(params,OpenNebula.Network.resource); + OpenNebula.Action.show(params,OpenNebula.Network.resource); }, "chown" : function(params){ - OpenNebula.Helper.chown(params,OpenNebula.Network.resource); + OpenNebula.Action.chown(params,OpenNebula.Network.resource); }, "chgrp" : function(params){ - OpenNebula.Helper.chgrp(params,OpenNebula.Network.resource); + OpenNebula.Action.chgrp(params,OpenNebula.Network.resource); }, "publish": function(params){ - OpenNebula.Helper.simple_action(params,OpenNebula.Network.resource,"publish"); + OpenNebula.Action.simple_action(params,OpenNebula.Network.resource,"publish"); }, "unpublish": function(params){ - OpenNebula.Helper.simple_action(params,OpenNebula.Network.resource,"unpublish"); + OpenNebula.Action.simple_action(params,OpenNebula.Network.resource,"unpublish"); }, "addleases" : function(params){ var action_obj = params.data.extra_param; - OpenNebula.Helper.simple_action(params, + OpenNebula.Action.simple_action(params, OpenNebula.Network.resource, "addleases", action_obj); }, "rmleases" : function(params){ var action_obj = params.data.extra_param; - OpenNebula.Helper.simple_action(params, + OpenNebula.Action.simple_action(params, OpenNebula.Network.resource, "rmleases", action_obj); @@ -521,72 +524,72 @@ var OpenNebula = { "resource": "VM", "create": function(params){ - OpenNebula.Helper.create(params,OpenNebula.VM.resource); + OpenNebula.Action.create(params,OpenNebula.VM.resource); }, "delete": function(params){ - OpenNebula.Helper.delete(params,OpenNebula.VM.resource); + OpenNebula.Action.delete(params,OpenNebula.VM.resource); }, "list": function(params){ - OpenNebula.Helper.list(params,OpenNebula.VM.resource); + OpenNebula.Action.list(params,OpenNebula.VM.resource); }, "show": function(params){ - OpenNebula.Helper.show(params,OpenNebula.VM.resource); + OpenNebula.Action.show(params,OpenNebula.VM.resource); }, "chown" : function(params){ - OpenNebula.Helper.chown(params,OpenNebula.VM.resource); + OpenNebula.Action.chown(params,OpenNebula.VM.resource); }, "chgrp" : function(params){ - OpenNebula.Helper.chgrp(params,OpenNebula.VM.resource); + OpenNebula.Action.chgrp(params,OpenNebula.VM.resource); }, "shutdown": function(params){ - OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource,"shutdown"); + OpenNebula.Action.simple_action(params,OpenNebula.VM.resource,"shutdown"); }, "hold": function(params){ - OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource,"hold"); + OpenNebula.Action.simple_action(params,OpenNebula.VM.resource,"hold"); }, "release": function(params){ - OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource,"release"); + OpenNebula.Action.simple_action(params,OpenNebula.VM.resource,"release"); }, "stop": function(params){ - OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource,"stop"); + OpenNebula.Action.simple_action(params,OpenNebula.VM.resource,"stop"); }, "cancel": function(params){ - OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource,"cancel"); + OpenNebula.Action.simple_action(params,OpenNebula.VM.resource,"cancel"); }, "suspend": function(params){ - OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource,"suspend"); + OpenNebula.Action.simple_action(params,OpenNebula.VM.resource,"suspend"); }, "resume": function(params){ - OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource,"resume"); + OpenNebula.Action.simple_action(params,OpenNebula.VM.resource,"resume"); }, "restart": function(params){ - OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource,"restart"); + OpenNebula.Action.simple_action(params,OpenNebula.VM.resource,"restart"); }, "resubmit": function(params){ - OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource,"resubmit"); + OpenNebula.Action.simple_action(params,OpenNebula.VM.resource,"resubmit"); }, "log": function(params){ - OpenNebula.Helper.show(params,OpenNebula.VM.resource,"log"); + OpenNebula.Action.show(params,OpenNebula.VM.resource,"log"); }, "deploy": function(params){ var action_obj = {"host_id": params.data.extra_param}; - OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource, + OpenNebula.Action.simple_action(params,OpenNebula.VM.resource, "deploy",action_obj); }, "livemigrate": function(params){ var action_obj = {"host_id": params.data.extra_param}; - OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource, + OpenNebula.Action.simple_action(params,OpenNebula.VM.resource, "livemigrate",action_obj); }, "migrate": function(params){ var action_obj = {"host_id": params.data.extra_param}; - OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource, + OpenNebula.Action.simple_action(params,OpenNebula.VM.resource, "migrate",action_obj); }, "saveas": function(params){ var action_obj = params.data.extra_param; - OpenNebula.Helper.simple_action(params,OpenNebula.VM.resource, + OpenNebula.Action.simple_action(params,OpenNebula.VM.resource, "saveas",action_obj); }, "vnc" : function(params,startstop){ @@ -618,10 +621,10 @@ var OpenNebula = { OpenNebula.VM.vnc(params,"stopvnc"); }, "monitor" : function(params){ - OpenNebula.Helper.monitor(params,OpenNebula.VM.resource,false); + OpenNebula.Action.monitor(params,OpenNebula.VM.resource,false); }, "monitor_all" : function(params){ - OpenNebula.Helper.monitor(params,OpenNebula.VM.resource,true); + OpenNebula.Action.monitor(params,OpenNebula.VM.resource,true); } }, @@ -629,13 +632,13 @@ var OpenNebula = { "resource": "GROUP", "create": function(params){ - OpenNebula.Helper.create(params,OpenNebula.Group.resource); + OpenNebula.Action.create(params,OpenNebula.Group.resource); }, "delete": function(params){ - OpenNebula.Helper.delete(params,OpenNebula.Group.resource); + OpenNebula.Action.delete(params,OpenNebula.Group.resource); }, "list": function(params){ - OpenNebula.Helper.list(params,OpenNebula.Group.resource); + OpenNebula.Action.list(params,OpenNebula.Group.resource); } }, @@ -643,35 +646,35 @@ var OpenNebula = { "resource": "USER", "create": function(params){ - OpenNebula.Helper.create(params,OpenNebula.User.resource); + OpenNebula.Action.create(params,OpenNebula.User.resource); }, "delete": function(params){ - OpenNebula.Helper.delete(params,OpenNebula.User.resource); + OpenNebula.Action.delete(params,OpenNebula.User.resource); }, "list": function(params){ - OpenNebula.Helper.list(params,OpenNebula.User.resource); + OpenNebula.Action.list(params,OpenNebula.User.resource); }, "show" : function(params){ - OpenNebula.Helper.show(params,OpenNebula.User.resource); + OpenNebula.Action.show(params,OpenNebula.User.resource); }, "passwd": function(params){ var action_obj = {"password": params.data.extra_param }; - OpenNebula.Helper.simple_action(params,OpenNebula.User.resource, + OpenNebula.Action.simple_action(params,OpenNebula.User.resource, "passwd",action_obj); }, "chgrp" : function(params){ var action_obj = {"group_id": params.data.extra_param }; - OpenNebula.Helper.simple_action(params,OpenNebula.User.resource, + OpenNebula.Action.simple_action(params,OpenNebula.User.resource, "chgrp",action_obj); } // "addgroup" : function(params){ // var action_obj = {"group_id": params.data.extra_param }; - // OpenNebula.Helper.simple_action(params,OpenNebula.User.resource, + // OpenNebula.Action.simple_action(params,OpenNebula.User.resource, // "addgroup",action_obj); // }, // "delgroup" : function(params){ // var action_obj = {"group_id": params.data.extra_param }; - // OpenNebula.Helper.simple_action(params,OpenNebula.User.resource, + // OpenNebula.Action.simple_action(params,OpenNebula.User.resource, // "delgroup",action_obj); // } }, @@ -680,50 +683,50 @@ var OpenNebula = { "resource": "IMAGE", "create": function(params){ - OpenNebula.Helper.create(params,OpenNebula.Image.resource); + OpenNebula.Action.create(params,OpenNebula.Image.resource); }, "delete": function(params){ - OpenNebula.Helper.delete(params,OpenNebula.Image.resource); + OpenNebula.Action.delete(params,OpenNebula.Image.resource); }, "list": function(params){ - OpenNebula.Helper.list(params,OpenNebula.Image.resource); + OpenNebula.Action.list(params,OpenNebula.Image.resource); }, "show": function(params){ - OpenNebula.Helper.show(params,OpenNebula.Image.resource); + OpenNebula.Action.show(params,OpenNebula.Image.resource); }, "chown" : function(params){ - OpenNebula.Helper.chown(params,OpenNebula.Image.resource); + OpenNebula.Action.chown(params,OpenNebula.Image.resource); }, "chgrp" : function(params){ - OpenNebula.Helper.chgrp(params,OpenNebula.Image.resource); + OpenNebula.Action.chgrp(params,OpenNebula.Image.resource); }, "update": function(params){ var action_obj = {"template_raw" : params.data.extra_param }; - OpenNebula.Helper.simple_action(params, + OpenNebula.Action.simple_action(params, OpenNebula.Image.resource, "update", action_obj); }, "fetch_template" : function(params){ - OpenNebula.Helper.show(params,OpenNebula.Image.resource,"template"); + OpenNebula.Action.show(params,OpenNebula.Image.resource,"template"); }, "enable": function(params){ - OpenNebula.Helper.simple_action(params,OpenNebula.Image.resource,"enable"); + OpenNebula.Action.simple_action(params,OpenNebula.Image.resource,"enable"); }, "disable": function(params){ - OpenNebula.Helper.simple_action(params,OpenNebula.Image.resource,"disable"); + OpenNebula.Action.simple_action(params,OpenNebula.Image.resource,"disable"); }, "publish": function(params){ - OpenNebula.Helper.simple_action(params,OpenNebula.Image.resource,"publish"); + OpenNebula.Action.simple_action(params,OpenNebula.Image.resource,"publish"); }, "unpublish": function(params){ - OpenNebula.Helper.simple_action(params,OpenNebula.Image.resource,"unpublish"); + OpenNebula.Action.simple_action(params,OpenNebula.Image.resource,"unpublish"); }, "persistent": function(params){ - OpenNebula.Helper.simple_action(params,OpenNebula.Image.resource,"persistent"); + OpenNebula.Action.simple_action(params,OpenNebula.Image.resource,"persistent"); }, "nonpersistent": function(params){ - OpenNebula.Helper.simple_action(params,OpenNebula.Image.resource,"nonpersistent"); + OpenNebula.Action.simple_action(params,OpenNebula.Image.resource,"nonpersistent"); } }, @@ -731,44 +734,44 @@ var OpenNebula = { "resource" : "VMTEMPLATE", "create" : function(params){ - OpenNebula.Helper.create(params,OpenNebula.Template.resource); + OpenNebula.Action.create(params,OpenNebula.Template.resource); }, "delete" : function(params){ - OpenNebula.Helper.delete(params,OpenNebula.Template.resource); + OpenNebula.Action.delete(params,OpenNebula.Template.resource); }, "list" : function(params){ - OpenNebula.Helper.list(params,OpenNebula.Template.resource); + OpenNebula.Action.list(params,OpenNebula.Template.resource); }, "show" : function(params){ - OpenNebula.Helper.show(params,OpenNebula.Template.resource); + OpenNebula.Action.show(params,OpenNebula.Template.resource); }, "chown" : function(params){ - OpenNebula.Helper.chown(params,OpenNebula.Template.resource); + OpenNebula.Action.chown(params,OpenNebula.Template.resource); }, "chgrp" : function(params){ - OpenNebula.Helper.chgrp(params,OpenNebula.Template.resource); + OpenNebula.Action.chgrp(params,OpenNebula.Template.resource); }, "update" : function(params){ var action_obj = {"template_raw" : params.data.extra_param }; - OpenNebula.Helper.simple_action(params, + OpenNebula.Action.simple_action(params, OpenNebula.Template.resource, "update", action_obj); }, "fetch_template" : function(params){ - OpenNebula.Helper.show(params,OpenNebula.Template.resource,"template"); + OpenNebula.Action.show(params,OpenNebula.Template.resource,"template"); }, "publish" : function(params){ - OpenNebula.Helper.simple_action(params,OpenNebula.Template.resource,"publish"); + OpenNebula.Action.simple_action(params,OpenNebula.Template.resource,"publish"); }, "unpublish" : function(params){ - OpenNebula.Helper.simple_action(params,OpenNebula.Template.resource,"unpublish"); + OpenNebula.Action.simple_action(params,OpenNebula.Template.resource,"unpublish"); }, "instantiate" : function(params) { var vm_name = params.data.extra_param ? params.data.extra_param : ""; var action_obj = { "vm_name" : vm_name }; - OpenNebula.Helper.simple_action(params,OpenNebula.Template.resource, + OpenNebula.Action.simple_action(params,OpenNebula.Template.resource, "instantiate",action_obj); } }, @@ -777,13 +780,13 @@ var OpenNebula = { "resource" : "ACL", "create" : function(params){ - OpenNebula.Helper.create(params,OpenNebula.Acl.resource); + OpenNebula.Action.create(params,OpenNebula.Acl.resource); }, "delete" : function(params){ - OpenNebula.Helper.delete(params,OpenNebula.Acl.resource); + OpenNebula.Action.delete(params,OpenNebula.Acl.resource); }, "list" : function(params){ - OpenNebula.Helper.list(params,OpenNebula.Acl.resource); + OpenNebula.Action.list(params,OpenNebula.Acl.resource); } } } From 0f3574463230aa91199106e604000c31f99e63fb Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Fri, 9 Sep 2011 13:56:42 +0200 Subject: [PATCH 07/31] bug #802: This commit includes - Comment options in configuration files so default values can use $ONE_LOCATION if defined - Better check of YAML syntax errors - Changed some tabs for spaces - By default the installer creates auth/certificates (cherry picked from commit 3527bbd1f721d344afca282dab03d84332a72a24) --- install.sh | 1 + src/authm_mad/remotes/server/server_auth.conf | 5 ++- src/authm_mad/remotes/server/server_auth.rb | 6 +-- src/authm_mad/remotes/x509/x509_auth.conf | 3 +- src/authm_mad/remotes/x509/x509_auth.rb | 45 ++++++++++--------- 5 files changed, 33 insertions(+), 27 deletions(-) diff --git a/install.sh b/install.sh index e33d064816..a2aada53ec 100755 --- a/install.sh +++ b/install.sh @@ -191,6 +191,7 @@ ETC_DIRS="$ETC_LOCATION/im_kvm \ $ETC_LOCATION/tm_lvm \ $ETC_LOCATION/hm \ $ETC_LOCATION/auth \ + $ETC_LOCATION/auth/certificates \ $ETC_LOCATION/ec2query_templates \ $ETC_LOCATION/occi_templates \ $ETC_LOCATION/cli" diff --git a/src/authm_mad/remotes/server/server_auth.conf b/src/authm_mad/remotes/server/server_auth.conf index 2d48125dcd..57b669e4eb 100644 --- a/src/authm_mad/remotes/server/server_auth.conf +++ b/src/authm_mad/remotes/server/server_auth.conf @@ -1,4 +1,5 @@ # Path to the certificate used by the OpenNebula Services # Certificates must be in PEM format -:one_cert: "/etc/one/auth/cert.pem" -:one_key: "/etc/one/auth/pk.pem" + +#:one_cert: "/etc/one/auth/cert.pem" +#:one_key: "/etc/one/auth/pk.pem" diff --git a/src/authm_mad/remotes/server/server_auth.rb b/src/authm_mad/remotes/server/server_auth.rb index e4003f3289..1c3e427bea 100644 --- a/src/authm_mad/remotes/server/server_auth.rb +++ b/src/authm_mad/remotes/server/server_auth.rb @@ -63,7 +63,7 @@ class ServerAuth < X509Auth token_txt = "#{user}:#{user_pass}:#{expires}" token = encrypt(token_txt) - token64 = Base64::encode64(token).strip.delete("\n") + token64 = Base64::encode64(token).strip.delete("\n") login_out = "#{user}:server:#{token64}" @@ -76,7 +76,7 @@ class ServerAuth < X509Auth # auth method for auth_mad def authenticate(user, pass, signed_text) begin - # Decryption demonstrates that the user posessed the private key. + # Decryption demonstrates that the user posessed the private key. _user, user_pass, expires = decrypt(signed_text).split(':') return "User name missmatch" if user != _user @@ -85,7 +85,7 @@ class ServerAuth < X509Auth # Check that the signed password matches one for the user. if !pass.split('|').include?(user_pass) - return "User password missmatch" + return "User password missmatch" end return true diff --git a/src/authm_mad/remotes/x509/x509_auth.conf b/src/authm_mad/remotes/x509/x509_auth.conf index 679610ba0c..b841529176 100644 --- a/src/authm_mad/remotes/x509/x509_auth.conf +++ b/src/authm_mad/remotes/x509/x509_auth.conf @@ -1,3 +1,4 @@ # Path to the trusted CA directory. It should contain the trusted CA's for # the server, each CA certificate shoud be name CA_hash.0 -:ca_dir: "/etc/one/auth/certificates" + +#:ca_dir: "/etc/one/auth/certificates" diff --git a/src/authm_mad/remotes/x509/x509_auth.rb b/src/authm_mad/remotes/x509/x509_auth.rb index dbb69746d7..d9c15c8374 100644 --- a/src/authm_mad/remotes/x509/x509_auth.rb +++ b/src/authm_mad/remotes/x509/x509_auth.rb @@ -91,17 +91,17 @@ class X509Auth def login_token(user, expire) if expire != 0 expires = Time.now.to_i + expire.to_i - else - expires = @cert_chain[0].not_after.to_i - end + else + expires = @cert_chain[0].not_after.to_i + end text_to_sign = "#{user}:#{expires}" signed_text = encrypt(text_to_sign) certs_pem = @cert_chain.collect{|cert| cert.to_pem}.join(":") - token = "#{signed_text}:#{certs_pem}" - token64 = Base64::encode64(token).strip.delete("\n") + token = "#{signed_text}:#{certs_pem}" + token64 = Base64::encode64(token).strip.delete("\n") login_out = "#{user}:x509:#{token64}" @@ -114,23 +114,25 @@ class X509Auth # auth method for auth_mad def authenticate(user, pass, signed_text) begin - # Decryption demonstrates that the user posessed the private key. + # Decryption demonstrates that the user posessed the private key. _user, expires = decrypt(signed_text).split(':') return "User name missmatch" if user != _user return "x509 proxy expired" if Time.now.to_i >= expires.to_i - # Some DN in the chain must match a DN in the password - dn_ok = @cert_chain.each do |cert| - break true if pass.split('|').include?(cert.subject.to_s.delete("\s")) + # Some DN in the chain must match a DN in the password + dn_ok = @cert_chain.each do |cert| + if pass.split('|').include?(cert.subject.to_s.delete("\s")) + break true + end end - - unless dn_ok == true - return "Certificate subject missmatch" + + unless dn_ok == true + return "Certificate subject missmatch" end - - validate + + validate return true rescue => e @@ -159,9 +161,10 @@ private # Load class options form a configuration file (yaml syntax) def load_options(conf_file) if File.readable?(conf_file) - config = File.read(conf_file) - - @options.merge!(YAML::load(config)) + conf_txt = File.read(conf_file) + conf_opt = YAML::load(conf_txt) + + @options.merge!(conf_opt) if conf_opt != false end end @@ -184,7 +187,7 @@ private # Validate the user certificate ########################################################################### def validate - now = Time.now + now = Time.now failed = "Could not validate user credentials: " # Check start time and end time of certificates @@ -196,10 +199,10 @@ private end begin - # Validate the proxy certifcates + # Validate the proxy certifcates signee = @cert_chain[0] - @cert_chain[1..-1].each do |cert| + @cert_chain[1..-1].each do |cert| if !((signee.issuer.to_s == cert.subject.to_s) && (signee.verify(cert.public_key))) raise failed + signee.subject.to_s + " with issuer " + @@ -210,7 +213,7 @@ private end # Validate the End Entity certificate - if !@options[:ca_dir] + if !@options[:ca_dir] raise failed + "No certifcate authority directory was specified." end From 4eb0d69e5c70feab921b1de8711e0b8253c2c4de Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Fri, 9 Sep 2011 18:28:26 +0200 Subject: [PATCH 08/31] Bug: The x509 driver removes spaces in certificate DNs (DNs are used as passwd by this driver). Command line will not modify the passwd if plain or ssh method is used. (cherry picked from commit f8ee2d6c2defed34789400e2e574f51aebf9ed76) --- src/authm_mad/remotes/x509/x509_auth.rb | 2 +- src/cli/one_helper/oneuser_helper.rb | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/authm_mad/remotes/x509/x509_auth.rb b/src/authm_mad/remotes/x509/x509_auth.rb index d9c15c8374..a75a79a09a 100644 --- a/src/authm_mad/remotes/x509/x509_auth.rb +++ b/src/authm_mad/remotes/x509/x509_auth.rb @@ -81,7 +81,7 @@ class X509Auth # Returns the dn of the user certificate def dn - @cert_chain[0].subject.to_s + @cert_chain[0].subject.to_s.delete("\s") end # Generates a login token in the form: diff --git a/src/cli/one_helper/oneuser_helper.rb b/src/cli/one_helper/oneuser_helper.rb index f76ace7cc8..70ec8804bf 100644 --- a/src/cli/one_helper/oneuser_helper.rb +++ b/src/cli/one_helper/oneuser_helper.rb @@ -37,8 +37,10 @@ class OneUserHelper < OpenNebulaHelper::OneHelper return -1, "Can not read file: #{arg}" end else - if options[:plain] || options[:ssh] || options[:x509] - password = arg.gsub(/\s/, '') + if options[:plain] || options[:ssh] + password = arg + elsif options[:x509] + password = arg.delete("\s") else password = Digest::SHA1.hexdigest(arg) end From 0faf6203fbeabb8dd7f79139a60a071449f79ff1 Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Fri, 9 Sep 2011 18:31:46 +0200 Subject: [PATCH 09/31] bug #797: OpenNebula core prevents a password with spaces to be used (cherry picked from commit f0410c9e75a6314976d1c3bc45d5cff11b0feb16) --- include/User.h | 35 +++++++++++++++++++++++++++++--- src/rm/RequestManagerAllocate.cc | 7 +++++++ src/rm/RequestManagerUser.cc | 13 +++++++++--- src/um/User.cc | 2 ++ 4 files changed, 51 insertions(+), 6 deletions(-) diff --git a/include/User.h b/include/User.h index 5e3ab15a4a..35050850f3 100644 --- a/include/User.h +++ b/include/User.h @@ -31,6 +31,11 @@ class User : public PoolObjectSQL { public: + /** + * Characters that can not be in a password + */ + static const string NO_PASSWD_CHARS; + /** * Function to print the User object into a string in XML format * @param xml the resulting XML string @@ -73,11 +78,35 @@ public: }; /** - * Sets user password + * Checks if a password is valid. + * @param passwd to be checked + * @return true if the password is valid */ - void set_password(string _password) + static bool is_valid_password(const string& passwd) { - password = _password; + return passwd.find_first_of(NO_PASSWD_CHARS) == string::npos; + } + + /** + * Sets user password. It checks that the new password does not contain + * forbidden chars. + * @param _password the new pass + * @returns -1 if the password is not valid + */ + int set_password(const string& passwd) + { + int rc = 0; + + if (is_valid_password(passwd)) + { + password = passwd; + } + else + { + rc = -1; + } + + return rc; }; /** diff --git a/src/rm/RequestManagerAllocate.cc b/src/rm/RequestManagerAllocate.cc index abaa83ff36..7db6c60e3b 100644 --- a/src/rm/RequestManagerAllocate.cc +++ b/src/rm/RequestManagerAllocate.cc @@ -242,6 +242,13 @@ int UserAllocate::pool_allocate(xmlrpc_c::paramList const& paramList, ugname = GroupPool::USERS_NAME; } + if (!User::is_valid_password(passwd)) + { + error_str = "Invalid password, it can not contain spaces."; + + return -1; + } + return upool->allocate(&id,ugid,uname,ugname,passwd,true,error_str); } diff --git a/src/rm/RequestManagerUser.cc b/src/rm/RequestManagerUser.cc index 1536f42c92..663a091c41 100644 --- a/src/rm/RequestManagerUser.cc +++ b/src/rm/RequestManagerUser.cc @@ -61,13 +61,20 @@ int UserChangePassword::user_action(User * user, string new_pass = xmlrpc_c::value_string(paramList.getString(2)); - user->set_password(new_pass); + int rc = user->set_password(new_pass); - pool->update(user); + if ( rc == 0 ) + { + pool->update(user); + } + else + { + error_str = "Invalid password, it can not contain spaces."; + } user->unlock(); - return 0; + return rc; } /* ------------------------------------------------------------------------- */ diff --git a/src/um/User.cc b/src/um/User.cc index 6a509b60b5..71837e68de 100644 --- a/src/um/User.cc +++ b/src/um/User.cc @@ -27,6 +27,8 @@ #include "Group.h" +const string User::NO_PASSWD_CHARS = " \t\n\v\f\r"; + /* ************************************************************************** */ /* User :: Database Access Functions */ /* ************************************************************************** */ From d8a5325495aff82d765f41de4a6b5ead30e65f8a Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Fri, 9 Sep 2011 19:13:05 +0200 Subject: [PATCH 10/31] bug: dummy auth driver returns the passwd specify by the user if it does not exists (cherry picked from commit c2351158888141c71b32c024fbe4c264d121501a) --- src/authm_mad/remotes/dummy/authenticate | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/authm_mad/remotes/dummy/authenticate b/src/authm_mad/remotes/dummy/authenticate index 5ef03d7900..2e28d18be9 100755 --- a/src/authm_mad/remotes/dummy/authenticate +++ b/src/authm_mad/remotes/dummy/authenticate @@ -17,8 +17,9 @@ #--------------------------------------------------------------------------- # # $1 = username -# $2 = password -echo $* +# $2 = "-" if user is not registered in opennebula +# $3 = password +echo $1 $3 From cb4dc7123a63ddf722f1df39e257d86592f066eb Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Fri, 9 Sep 2011 19:14:45 +0200 Subject: [PATCH 11/31] Bug #485: Moves passwd checks to user allocate. Driver responses are now better parsed, user creation fails if it contains spaces in passwd. (cherry picked from commit 59e72d93a4979ad81dac8202ecf516e414213569) --- src/rm/RequestManagerAllocate.cc | 7 ------- src/um/UserPool.cc | 18 ++++++++++++++++-- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/rm/RequestManagerAllocate.cc b/src/rm/RequestManagerAllocate.cc index 7db6c60e3b..abaa83ff36 100644 --- a/src/rm/RequestManagerAllocate.cc +++ b/src/rm/RequestManagerAllocate.cc @@ -242,13 +242,6 @@ int UserAllocate::pool_allocate(xmlrpc_c::paramList const& paramList, ugname = GroupPool::USERS_NAME; } - if (!User::is_valid_password(passwd)) - { - error_str = "Invalid password, it can not contain spaces."; - - return -1; - } - return upool->allocate(&id,ugid,uname,ugname,passwd,true,error_str); } diff --git a/src/um/UserPool.cc b/src/um/UserPool.cc index 60933f7a45..73bf9ddb98 100644 --- a/src/um/UserPool.cc +++ b/src/um/UserPool.cc @@ -136,6 +136,11 @@ int UserPool::allocate ( ostringstream oss; + if (password.empty() || !User::is_valid_password(password)) + { + goto error_pass; + } + if ( uname.empty() ) { goto error_name; @@ -176,6 +181,10 @@ int UserPool::allocate ( return *oid; +error_pass: + oss << "Invalid password, it can not contain spaces."; + goto error_common; + error_name: oss << "NAME cannot be empty."; goto error_common; @@ -293,7 +302,12 @@ bool UserPool::authenticate(const string& session, if ( is.good() ) { - is >> mad_name >> ws >> mad_pass; + is >> mad_name >> ws; + } + + if ( !is.fail() ) + { + getline(is, mad_pass); } if ( !is.fail() ) @@ -314,7 +328,7 @@ bool UserPool::authenticate(const string& session, oss << "Can't create user: " << error_str << ". Driver response: " << ar.message; - ar.message = oss.str(); + NebulaLog::log("AuM",Log::ERROR,oss); } else { From b912b71da80a7241f1ea24062fcba785578405e6 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Fri, 9 Sep 2011 22:25:51 +0200 Subject: [PATCH 12/31] Feature #499: Rewrite is_error() --- src/sunstone/public/js/opennebula.js | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/sunstone/public/js/opennebula.js b/src/sunstone/public/js/opennebula.js index ce844730f0..12ea698981 100644 --- a/src/sunstone/public/js/opennebula.js +++ b/src/sunstone/public/js/opennebula.js @@ -38,14 +38,7 @@ var OpenNebula = { "is_error": function(obj) { - if (obj.error) - { - return true; - } - else - { - return false; - } + return obj.error ? true : false; }, "Helper": { From 09c0960d23ac6302210ee6700819e4390a0f474f Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Fri, 9 Sep 2011 22:26:36 +0200 Subject: [PATCH 13/31] Fix vdc refresh button The refresh action in the VDC pluging requested the list of Zones instead of the list of VDCs. --- src/ozones/Server/public/js/plugins/vdcs-tab.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ozones/Server/public/js/plugins/vdcs-tab.js b/src/ozones/Server/public/js/plugins/vdcs-tab.js index c995495f43..dcd5555296 100644 --- a/src/ozones/Server/public/js/plugins/vdcs-tab.js +++ b/src/ozones/Server/public/js/plugins/vdcs-tab.js @@ -92,7 +92,7 @@ var vdc_actions = { type: "custom", call: function() { waitingNodes(dataTable_vdcs); - Sunstone.runAction("Zone.list"); + Sunstone.runAction("VDC.list"); }, error: onError }, From b3ead895ebb6411b78ca9e481b6044be75559279 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Fri, 9 Sep 2011 23:05:07 +0200 Subject: [PATCH 14/31] Feature #799: Refactor ozones.js code This commit refactors the code in ozone.js. In order to allow as much refactoring as possible, server and zones plugin have been modified so that a better consistency is achieved: - "vnet" replaces "vn" to identify virtual networks resource. - "vmtemplate" replaces "template" to identify virtual machine templates. In the server side, all "vnet", "vn" / "vmtemplate", "template" produce the same result, so that the CLI spec and oZones doc are not affected by this change. Note: Additional changes on OzonesServer.rb correspond to whitespace cleanup. --- src/ozones/Server/models/OzonesServer.rb | 118 +-- src/ozones/Server/public/js/ozones.js | 848 ++++-------------- .../Server/public/js/plugins/zones-tab.js | 12 +- 3 files changed, 234 insertions(+), 744 deletions(-) diff --git a/src/ozones/Server/models/OzonesServer.rb b/src/ozones/Server/models/OzonesServer.rb index 409ffc32b6..4fdac56b3e 100644 --- a/src/ozones/Server/models/OzonesServer.rb +++ b/src/ozones/Server/models/OzonesServer.rb @@ -21,7 +21,7 @@ require 'JSONUtils' class OzonesServer include JSONUtils - + def initialize @ocaInt = OCAInteraction.new end @@ -38,69 +38,69 @@ class OzonesServer "Error: #{kind} resource not supported") return [404, error.to_json] end - + return [200, pool.to_json] end - + # Gets an aggreageted pool for a zone or vdc - # ie All the hosts in all the Zones + # ie All the hosts in all the Zones def get_aggregated_pool(kind, aggkind) aggpool = case kind - when "zone" then + when "zone" then case aggkind - when "host" then OZones::AggregatedHosts.new - when "image" then OZones::AggregatedImages.new - when "user" then OZones::AggregatedUsers.new - when "vm" then OZones::AggregatedVirtualMachines.new - when "vn" then OZones::AggregatedVirtualNetworks.new - when "template" then OZones::AggregatedTemplates.new + when "host" then OZones::AggregatedHosts.new + when "image" then OZones::AggregatedImages.new + when "user" then OZones::AggregatedUsers.new + when "vm" then OZones::AggregatedVirtualMachines.new + when "vn","vnet" then OZones::AggregatedVirtualNetworks.new + when "template","vmtemplate" then OZones::AggregatedTemplates.new end else error = OZones::Error.new( "Error: #{aggkind} aggregated pool for #{kind} not supported") return [404, error.to_json] end - + return [200, aggpool.to_json] end - + # Gets an aggreageted pool for a zone or vdc in json - # ie All the hosts in all the Zones + # ie All the hosts in all the Zones def get_full_resource(kind, id, aggkind) resource = retrieve_resource(kind, id) - + if OZones.is_error?(resource) return [404, resource.to_json] end - + # TODO build the vdc retrieval - + if kind == "zone" client = OpenNebula::Client.new( resource.onename + ":" + resource.onepass, resource.endpoint, - false) + false) simple_pool = case aggkind - when "host" then OpenNebulaJSON::HostPoolJSON.new(client) - when "image" then OpenNebulaJSON::ImagePoolJSON.new(client) - when "user" then OpenNebulaJSON::UserPoolJSON.new(client) - when "vm" then OpenNebulaJSON::VirtualMachinePoolJSON.new(client) - when "vn" then OpenNebulaJSON::VirtualNetworkPoolJSON.new(client) - when "template" then OpenNebulaJSON::TemplatePoolJSON.new(client) + when "host" then OpenNebulaJSON::HostPoolJSON.new(client) + when "image" then OpenNebulaJSON::ImagePoolJSON.new(client) + when "user" then OpenNebulaJSON::UserPoolJSON.new(client) + when "vm" then OpenNebulaJSON::VirtualMachinePoolJSON.new(client) + when "vn","vnet" then OpenNebulaJSON::VirtualNetworkPoolJSON.new(client) + when "template","vmtemplate" then OpenNebulaJSON::TemplatePoolJSON.new(client) else error = OZones::Error.new( "Error: #{aggkind} aggregated pool for #{kind} #{id} not supported") return [404, error.to_json] end - + simple_pool.info - + return [200, simple_pool.to_json] end end - - # Get a json representation resource with local (DB) info + + # Get a json representation resource with local (DB) info def get_resource(kind, id) resource = retrieve_resource(kind, id) if OZones.is_error?(resource) @@ -108,7 +108,7 @@ class OzonesServer else return [200, resource.to_json] end - end + end # Get hold of a object of a particular kind def retrieve_resource(kind, id) @@ -119,10 +119,10 @@ class OzonesServer return OZones::Error.new( "Error: #{kind} resource not supported") end - + if resource return resource - else + else return OZones::Error.new( "Error: Resource #{kind} with id #{id} not found") end @@ -134,45 +134,45 @@ class OzonesServer ############################################################################ # Creates a resource of a kind, and updates the Proxy Rules def create_resource(kind, data, body, pr) - - if body.size > 0 + + if body.size > 0 result = parse_json(body,kind) data = result if !OpenNebula.is_error?(result) end resource = case kind - when "vdc" then + when "vdc" then vdc_data=Hash.new data.each{|key,value| vdc_data[key.downcase.to_sym]=value if key!="pool" } - + # Check parameters if !vdc_data[:vdcadminname] || !vdc_data[:vdcadminpass] || - !vdc_data[:zoneid] || !vdc_data[:name] || !vdc_data[:hosts] + !vdc_data[:zoneid] || !vdc_data[:name] || !vdc_data[:hosts] return [400, OZones::Error.new( - "Error: Couldn't create resource #{kind}. " + + "Error: Couldn't create resource #{kind}. " + "Not enough information on the template").to_json] end - - # Check if the referenced zone exists + + # Check if the referenced zone exists zone=OZones::Zones.get(vdc_data[:zoneid]) if !zone - error = OZones::Error.new("Error: Zone " + + error = OZones::Error.new("Error: Zone " + "#{vdc_data[:zoneid]} not found, cannot create Vdc.") return [404, error.to_json] end vdcadminname = vdc_data[:vdcadminname] vdcadminpass = vdc_data[:vdcadminpass] - vdc_data.delete(:zoneid) + vdc_data.delete(:zoneid) vdc_data.delete(:vdcadminpass) - + vdc = OZones::Vdc.create(vdc_data) zone.vdcs << vdc zone.save - + if zone.saved? and vdc.saved? vdcadminpass = Digest::SHA1.hexdigest(vdcadminpass) rc = @ocaInt.create_vdc_in_zone(zone, @@ -196,26 +196,26 @@ class OzonesServer " Maybe duplicated name?").to_json] end - when "zone" then + when "zone" then zone_data=Hash.new data.each{|key,value| zone_data[key.downcase.to_sym]=value if key!="pool" } - + # Check parameters if !zone_data[:onename] || !zone_data[:onepass] || - !zone_data[:endpoint] || !zone_data[:name] + !zone_data[:endpoint] || !zone_data[:name] return [400, OZones::Error.new( - "Error: Couldn't create resource #{kind}. " + + "Error: Couldn't create resource #{kind}. " + "Not enough information on the template").to_json] end - + # Digest and check credentials - zone_data[:onepass] = + zone_data[:onepass] = Digest::SHA1.hexdigest(zone_data[:onepass]) - - rc = @ocaInt.check_oneadmin(zone_data[:onename], - zone_data[:onepass], + + rc = @ocaInt.check_oneadmin(zone_data[:onename], + zone_data[:onepass], zone_data[:endpoint]) if OpenNebula.is_error?(rc) @@ -223,19 +223,19 @@ class OzonesServer "Error: Couldn't create resource #{kind}. Reason: "+ rc.message).to_json] end - + # Create the zone zone = OZones::Zones.create(zone_data) rc = zone.save - + if rc pr.update # Rewrite proxy conf file return [200, zone.to_json] else return [400, OZones::Error.new( - "Error: Couldn't create resource #{kind.upcase}." + + "Error: Couldn't create resource #{kind.upcase}." + " Maybe duplicated name?").to_json] - end + end else error = OZones::Error.new( "Error: #{kind.upcase} resource not supported") @@ -252,16 +252,16 @@ class OzonesServer if OZones.is_error?(resource) return [404, resource.to_json] end - + if kind == "vdc" rc = @ocaInt.delete_vdc_in_zone(id) if OpenNebula.is_error?(rc) return [500, OZones::Error.new( - "Error: Couldn't delete resources from VDC with id #{id}, " + + "Error: Couldn't delete resources from VDC with id #{id}, " + "aborting VDC deletion. Reason:" + rc.message).to_json] end end - + if !resource.destroy return [500, OZones::Error.new( "Error: Couldn't delete resource #{kind} with id #{id}").to_json] diff --git a/src/ozones/Server/public/js/ozones.js b/src/ozones/Server/public/js/ozones.js index 04bf0856ec..051df3fb0b 100644 --- a/src/ozones/Server/public/js/ozones.js +++ b/src/ozones/Server/public/js/ozones.js @@ -38,14 +38,7 @@ var oZones = { "is_error": function(obj) { - if (obj.error) - { - return true; - } - else - { - return false; - } + return obj.error ? true : false; }, "Helper": { @@ -186,6 +179,99 @@ var oZones = { } }, + "Action": { + "create": function(params,resource){ + var callback = params.success; + var callback_error = params.error; + var data = params.data; + var request = oZones.Helper.request(resource,"create", data); + + $.ajax({ + url: resource.toLowerCase(), + type: "POST", + dataType: "json", + data: JSON.stringify(data), + success: function(response){ + return callback ? callback(request, response) : null; + }, + error: function(response){ + return callback_error ? + callback_error(request, oZones.Error(response)) : null; + } + }); + }, + + "delete": function(params,resource){ + var callback = params.success; + var callback_error = params.error; + var id = params.data.id; + var request = oZones.Helper.request(resource,"delete", id); + + $.ajax({ + url: resource.toLowerCase() + "/" + id, + type: "DELETE", + success: function(){ + return callback ? callback(request) : null; + }, + error: function(response){ + return callback_error ? + callback_error(request, oZones.Error(response)) : null; + } + }); + }, + + "list": function(params,resource,subresource){ + var callback = params.success; + var callback_error = params.error; + var timeout = params.timeout || false; + var request = oZones.Helper.request(resource,"list"); + + var url = resource.toLowerCase(); + url = subresource ? url + "/" + subresource : url; + $.ajax({ + url: url, + type: "GET", + data: {timeout: timeout}, + dataType: "json", + success: function(response){ + return callback ? + callback(request, oZones.Helper.pool(resource,response)) : null; + }, + error: function(response) + { + return callback_error ? + callback_error(request, oZones.Error(response)) : null; + } + }); + }, + + //Subresource examples: "fetch_template", "log"... + "show": function(params,resource,subresource){ + var callback = params.success; + var callback_error = params.error; + var id = params.data.id; + var request = subresource ? + oZones.Helper.request(resource,subresource,id) : + oZones.Helper.request(resource,"show", id); + + var url = resource.toLowerCase() + "/" + id; + url = subresource? url + "/" + subresource : url; + + $.ajax({ + url: url, + type: "GET", + dataType: "json", + success: function(response){ + return callback ? callback(request, response) : null; + }, + error: function(response){ + return callback_error ? + callback_error(request, oZones.Error(response)) : null; + } + }); + } + }, + "Auth": { "resource": "AUTH", @@ -209,19 +295,12 @@ var oZones = { "Basic " + btoa(username + ":" + password) ) }, - success: function(response) - { - if (callback) - { - callback(request, response); - } + success: function(response){ + return callback ? callback(request, response) : null; }, - error: function(response) - { - if (callback_error) - { - callback_error(request, oZones.Error(response)); - } + error: function(response){ + return callback_error ? + callback_error(request, oZones.Error(response)) : null; } }); }, @@ -237,19 +316,12 @@ var oZones = { $.ajax({ url: "logout", type: "POST", - success: function(response) - { - if (callback) - { - callback(request, response); - } + success: function(response){ + return callback ? callback(request, response) : null; }, - error: function(response) - { - if (callback_error) - { - callback_error(request, oZones.Error(response)); - } + error: function(response){ + return callback_error ? + callback_error(request, oZones.Error(response)) : null; } }); } @@ -270,19 +342,12 @@ var oZones = { url: "config", type: "GET", dataType: "json", - success: function(response) - { - if (callback) - { - callback(request, response); - } + success: function(response){ + return callback ? callback(request,response) : null; }, - error: function(response) - { - if (callback_error) - { - callback_error(request, oZones.Error(response)); - } + error: function(response){ + return callback_error ? + callback_error(request, oZones.Error(response)) : null; } }); } @@ -291,696 +356,121 @@ var oZones = { "Zone": { "resource": "ZONE", - "create": function(params) - { - var callback = params.success; - var callback_error = params.error; - var data = params.data; - var resource = oZones.Zone.resource; - - var request = oZones.Helper.request(resource,"create", data); - - $.ajax({ - url: "zone", - type: "POST", - dataType: "json", - data: JSON.stringify(data), - success: function(response) - { - if (callback) - { - callback(request, response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, oZones.Error(response)); - } - } - }); + "create": function(params){ + oZones.Action.create(params,oZones.Zone.resource); + }, + "delete" : function(params){ + oZones.Action.delete(params,oZones.Zone.resource); + }, + "list": function(params){ + oZones.Action.list(params,oZones.Zone.resource); + }, + "show": function(params){ + oZones.Action.show(params,oZones.Zone.resource); }, - "delete": function(params) - { + "subresource" : function(params,subresource){ var callback = params.success; var callback_error = params.error; var id = params.data.id; - var resource = oZones.Zone.resource; - - - var request = oZones.Helper.request(resource,"delete", id); - - $.ajax({ - url: "zone/" + id, - type: "DELETE", - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, oZones.Error(response)); - } - } - }); - }, - - "list": function(params) - { - var callback = params.success; - var callback_error = params.error; - var timeout = params.timeout || false; - var resource = oZones.Zone.resource; - var request = oZones.Helper.request(resource,"list"); + var request = oZones.Helper.request(resource,subresource, id); $.ajax({ - url: "zone", - type: "GET", - data: {timeout: timeout}, - dataType: "json", - success: function(response) - { - if (callback) - { - var zone_pool = oZones.Helper.pool(resource,response); - callback(request, zone_pool); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, oZones.Error(response)); - } - } - }); - }, - - "show": function(params) - { - - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - - var resource = oZones.Zone.resource; - var request = oZones.Helper.request(resource,"show", id); - - $.ajax({ - url: "zone/" + id, + url: "zone/" + id + "/" + subresource, type: "GET", dataType: "json", - success: function(response) - { - if (callback) - { - callback(request, response); - } + success: function(response){ + return callback ? + callback(request, oZones.Helper.pool(subresource.toUpperCase(),response)) : null; }, - error: function(response) - { - if (callback_error) - { - callback_error(request, oZones.Error(response)); - } + error: function(response){ + return callback_error ? calback_error(request,oZones.Error(response)) : null; } }); + }, - "host": function(params) - { - - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - - var resource = oZones.Zone.resource; - var request = oZones.Helper.request(resource,"host", id); - - $.ajax({ - url: "zone/" + id + "/host", - type: "GET", - dataType: "json", - success: function(response) - { - if (callback) - { - var host_pool = oZones.Helper.pool("HOST",response); - callback(request, host_pool); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, oZones.Error(response)); - } - } - }); + "host": function(params){ + oZones.Zone.subresource(params,"host"); + }, + "image": function(params){ + oZones.Zone.subresource(params,"image"); + }, + "vmtemplate": function(params){ + oZones.Zone.subresource(params,"vmtemplate"); + }, + "user": function(params){ + oZones.Zone.subresource(params,"user"); + }, + "vm": function(params){ + oZones.Zone.subresource(params,"vm"); + }, + "vnet": function(params){ + oZones.Zone.subresource(params,"vnet"); }, - "image": function(params) - { - - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - - var resource = oZones.Zone.resource; - var request = oZones.Helper.request(resource,"image", id); - - $.ajax({ - url: "zone/" + id + "/image", - type: "GET", - dataType: "json", - success: function(response) - { - if (callback) - { - var pool = oZones.Helper.pool("IMAGE",response); - callback(request, pool); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, oZones.Error(response)); - } - } - }); - }, - - "template": function(params) - { - - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - - var resource = oZones.Zone.resource; - var request = oZones.Helper.request(resource,"template", id); - - $.ajax({ - url: "zone/" + id + "/template", - type: "GET", - dataType: "json", - success: function(response) - { - if (callback) - { - var pool = oZones.Helper.pool("VMTEMPLATE",response); - callback(request, pool); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, oZones.Error(response)); - } - } - }); - }, - - "user": function(params) - { - - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - - var resource = oZones.Zone.resource; - var request = oZones.Helper.request(resource,"user", id); - - $.ajax({ - url: "zone/" + id + "/user", - type: "GET", - dataType: "json", - success: function(response) - { - if (callback) - { - var pool = oZones.Helper.pool("USER",response); - callback(request, pool); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, oZones.Error(response)); - } - } - }); - }, - - "vm": function(params) - { - - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - - var resource = oZones.Zone.resource; - var request = oZones.Helper.request(resource,"vm", id); - - $.ajax({ - url: "zone/" + id + "/vm", - type: "GET", - dataType: "json", - success: function(response) - { - if (callback) - { - var pool = oZones.Helper.pool("VM",response); - callback(request, pool); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, oZones.Error(response)); - } - } - }); - }, - - "vn": function(params) - { - - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - - var resource = oZones.Zone.resource; - var request = oZones.Helper.request(resource,"vn", id); - - $.ajax({ - url: "zone/" + id + "/vn", - type: "GET", - dataType: "json", - success: function(response) - { - if (callback) - { - var pool = oZones.Helper.pool("VNET",response); - callback(request, pool); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, oZones.Error(response)); - } - } - }); - }, - - "group": function(params) - { - - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - - var resource = oZones.Zone.resource; - var request = oZones.Helper.request(resource,"group", id); - - $.ajax({ - url: "zone/" + id + "/group", - type: "GET", - dataType: "json", - success: function(response) - { - if (callback) - { - var pool = oZones.Helper.pool("GROUP",response); - callback(request, pool); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, oZones.Error(response)); - } - } - }); + "group": function(params){ + oZones.Zone.subresource(params,"group"); } }, "VDC": { "resource": "VDC", - "create": function(params) - { - var callback = params.success; - var callback_error = params.error; - var data = params.data; - var resource = oZones.VDC.resource; - - var request = oZones.Helper.request(resource,"create", data); - - $.ajax({ - url: "vdc", - type: "POST", - dataType: "json", - data: JSON.stringify(data), - success: function(response) - { - if (callback) - { - callback(request, response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, oZones.Error(response)); - } - } - }); + "create": function(params){ + oZones.Action.create(params,oZones.VDC.resource); }, - - "delete": function(params) - { - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - var resource = oZones.VDC.resource; - - - var request = oZones.Helper.request(resource,"delete", id); - - $.ajax({ - url: "vdc/" + id, - type: "DELETE", - success: function() - { - if (callback) - { - callback(request); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, oZones.Error(response)); - } - } - }); + "delete": function(params){ + oZones.Action.delete(params,oZones.VDC.resource); }, - - "list": function(params) - { - var callback = params.success; - var callback_error = params.error; - var timeout = params.timeout || false; - - var resource = oZones.VDC.resource; - var request = oZones.Helper.request(resource,"list"); - - $.ajax({ - url: "vdc", - type: "GET", - data: {timeout: timeout}, - dataType: "json", - success: function(response) - { - if (callback) - { - var vdc_pool = oZones.Helper.pool(resource,response); - callback(request, vdc_pool); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, oZones.Error(response)); - } - } - }); + "list": function(params){ + oZones.Action.list(params,oZones.VDC.resource); + }, + "show": function(params){ + oZones.Action.show(params,oZones.VDC.resource); }, - - "show": function(params) - { - - var callback = params.success; - var callback_error = params.error; - var id = params.data.id; - - var resource = oZones.VDC.resource; - var request = oZones.Helper.request(resource,"show", id); - - $.ajax({ - url: "vdc/" + id, - type: "GET", - dataType: "json", - success: function(response) - { - if (callback) - { - callback(request, response); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, oZones.Error(response)); - } - } - }); - } }, "ZoneHosts": { "resource": "ZONE", - - "list": function(params) - { - var callback = params.success; - var callback_error = params.error; - var timeout = params.timeout || false; - - var resource = oZones.ZoneHosts.resource; - var request = oZones.Helper.request(resource,"list"); - - $.ajax({ - url: "zone/host", - type: "GET", - data: {timeout: timeout}, - dataType: "json", - success: function(response) - { - if (callback) - { - var zonehosts_pool = oZones.Helper.pool(resource,response); - callback(request, zonehosts_pool); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, oZones.Error(response)); - } - } - }); + "list": function(params){ + oZones.Action.list(params,oZones.ZoneHosts.resource,"host"); } }, "ZoneVMs": { "resource": "ZONE", - - "list": function(params) - { - var callback = params.success; - var callback_error = params.error; - var timeout = params.timeout || false; - - var resource = oZones.ZoneVMs.resource; - var request = oZones.Helper.request(resource,"list"); - - $.ajax({ - url: "zone/vm", - type: "GET", - data: {timeout: timeout}, - dataType: "json", - success: function(response) - { - if (callback) - { - var zonevms_pool = oZones.Helper.pool(resource,response); - callback(request, zonevms_pool); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, oZones.Error(response)); - } - } - }); + "list": function(params){ + oZones.Action.list(params,oZones.ZoneVMs.resource,"vm"); } }, "ZoneVNs": { "resource": "ZONE", - - "list": function(params) - { - var callback = params.success; - var callback_error = params.error; - var timeout = params.timeout || false; - - var resource = oZones.ZoneVMs.resource; - var request = oZones.Helper.request(resource,"list"); - - $.ajax({ - url: "zone/vn", - type: "GET", - data: {timeout: timeout}, - dataType: "json", - success: function(response) - { - if (callback) - { - var zonevns_pool = oZones.Helper.pool(resource,response); - callback(request, zonevns_pool); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, oZones.Error(response)); - } - } - }); + "list": function(params){ + oZones.Action.list(params,oZones.ZoneVNs.resource,"vnet"); } }, "ZoneImages": { "resource": "ZONE", - - "list": function(params) - { - var callback = params.success; - var callback_error = params.error; - var timeout = params.timeout || false; - - var resource = oZones.ZoneImages.resource; - var request = oZones.Helper.request(resource,"list"); - - $.ajax({ - url: "zone/image", - type: "GET", - data: {timeout: timeout}, - dataType: "json", - success: function(response) - { - if (callback) - { - var zoneimages_pool = oZones.Helper.pool(resource,response); - callback(request, zoneimages_pool); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, oZones.Error(response)); - } - } - }); + "list": function(params){ + oZones.Action.list(params,oZones.ZoneImages.resource,"image"); } }, "ZoneUsers": { "resource": "ZONE", - - "list": function(params) - { - var callback = params.success; - var callback_error = params.error; - var timeout = params.timeout || false; - - var resource = oZones.ZoneUsers.resource; - var request = oZones.Helper.request(resource,"list"); - - $.ajax({ - url: "zone/user", - type: "GET", - data: {timeout: timeout}, - dataType: "json", - success: function(response) - { - if (callback) - { - var zoneusers_pool = oZones.Helper.pool(resource,response); - callback(request, zoneusers_pool); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, oZones.Error(response)); - } - } - }); + "list": function(params){ + oZones.Action.list(params,oZones.ZoneImages.resource,"user"); } }, "ZoneTemplates": { "resource": "ZONE", - - "list": function(params) - { - var callback = params.success; - var callback_error = params.error; - var timeout = params.timeout || false; - - var resource = oZones.ZoneTemplates.resource; - var request = oZones.Helper.request(resource,"list"); - - $.ajax({ - url: "zone/template", - type: "GET", - data: {timeout: timeout}, - dataType: "json", - success: function(response) - { - if (callback) - { - var zonetemplates_pool = oZones.Helper.pool(resource,response); - callback(request, zonetemplates_pool); - } - }, - error: function(response) - { - if (callback_error) - { - callback_error(request, oZones.Error(response)); - } - } - }); + "list": function(params){ + oZones.Action.list(params,oZones.ZoneImages.resource,"vmtemplate"); } } } diff --git a/src/ozones/Server/public/js/plugins/zones-tab.js b/src/ozones/Server/public/js/plugins/zones-tab.js index 33bdc05b25..ffdd2d0069 100644 --- a/src/ozones/Server/public/js/plugins/zones-tab.js +++ b/src/ozones/Server/public/js/plugins/zones-tab.js @@ -133,9 +133,9 @@ var zone_actions = { }, error: onError }, - "Zone.vn" : { + "Zone.vnet" : { type: "single", - call: oZones.Zone.vn, + call: oZones.Zone.vnet, callback: function(req, vn_json){ updateVNsList(req,vn_json,'#datatable_zone_vnets'); }, @@ -149,9 +149,9 @@ var zone_actions = { }, error: onError }, - "Zone.template" : { + "Zone.vmtemplate" : { type: "single", - call: oZones.Zone.template, + call: oZones.Zone.vmtemplate, callback: function(req,template_json){ updateTemplatesList(req,template_json,'#datatable_zone_templates'); }, @@ -519,9 +519,9 @@ function updateZoneInfo(req,zone_json){ //Retrieve pools in the meantime Sunstone.runAction("Zone.host",zone.id); - Sunstone.runAction("Zone.template",zone.id); + Sunstone.runAction("Zone.vmtemplate",zone.id); Sunstone.runAction("Zone.vms",zone.id); - Sunstone.runAction("Zone.vn",zone.id); + Sunstone.runAction("Zone.vnet",zone.id); Sunstone.runAction("Zone.image",zone.id); Sunstone.runAction("Zone.user",zone.id); } From f500cc93ecaf25b4825ed796cdc9d3a8c7f4af8c Mon Sep 17 00:00:00 2001 From: Javi Fontan Date: Mon, 12 Sep 2011 13:00:05 +0200 Subject: [PATCH 15/31] bug #745: little format error on cli help --- src/cli/command_parser.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cli/command_parser.rb b/src/cli/command_parser.rb index 3fb18ae7bd..0d523680ad 100755 --- a/src/cli/command_parser.rb +++ b/src/cli/command_parser.rb @@ -278,6 +278,8 @@ EOT printf cmd_format10, l puts } + + puts } end From 26996edcb33c81191629187cb38b0d436f887a85 Mon Sep 17 00:00:00 2001 From: Javi Fontan Date: Mon, 12 Sep 2011 13:00:47 +0200 Subject: [PATCH 16/31] bug #754: new man pages with the format error fixed --- share/man/oneacl.1 | 62 +++++- share/man/onedb.1 | 117 +++++++---- share/man/onegroup.1 | 107 +++++++--- share/man/onehost.1 | 149 ++++++++----- share/man/oneimage.1 | 319 ++++++++++++++++++---------- share/man/onetemplate.1 | 306 +++++++++++++++++---------- share/man/oneuser.1 | 210 +++++++++++++++---- share/man/onevdc.1 | 83 ++++++-- share/man/onevm.1 | 454 ++++++++++++++++++++++++---------------- share/man/onevnet.1 | 223 ++++++++++++++------ share/man/onezone.1 | 87 ++++++-- 11 files changed, 1457 insertions(+), 660 deletions(-) diff --git a/share/man/oneacl.1 b/share/man/oneacl.1 index 5b5ecb7fe1..83ca8a8ec3 100644 --- a/share/man/oneacl.1 +++ b/share/man/oneacl.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "ONEACL" "1" "July 2011" "" "oneacl(1) -- manages OpenNebula ACLs" +.TH "ONEACL" "1" "September 2011" "" "oneacl(1) -- manages OpenNebula ACLs" . .SH "NAME" \fBoneacl\fR @@ -23,14 +23,13 @@ .SH "COMMANDS" . .IP "\(bu" 4 -list +create \fIuser|rulestr\fR [\fIresource\fR] [\fIrights\fR] . .IP "" 4 . .nf -Lists the ACL rule set -valid options: xml +Adds a new ACL rule . .fi . @@ -52,13 +51,14 @@ Deletes an existing ACL rule . .IP "\(bu" 4 -create \fIuser|rulestr\fR [\fIresource\fR] [\fIrights\fR] +list . .IP "" 4 . .nf -Adds a new ACL rule +Lists the ACL rule set +valid options: xml . .fi . @@ -70,21 +70,65 @@ Adds a new ACL rule .SH "ARGUMENT FORMATS" . .IP "\(bu" 4 -text +file +. +.IP "" 4 +. +.nf + +Path to a file +. +.fi +. +.IP "" 0 + . .IP "\(bu" 4 range +. +.IP "" 4 +. +.nf + +List of id\'s in the form 1,8\.\.15 +. +.fi +. +.IP "" 0 + . .IP "\(bu" 4 -file +text +. +.IP "" 4 +. +.nf + +String +. +.fi +. +.IP "" 0 + . .IP "\(bu" 4 aclid_list +. +.IP "" 4 +. +.nf + +Comma\-separated list of OpenNebula ACL names or ids +. +.fi +. +.IP "" 0 + . .IP "" 0 . .SH "LICENSE" -OpenNebula 2\.9\.80 Copyright 2002\-2011, OpenNebula Project Leads (OpenNebula\.org) +OpenNebula 2\.9\.85 Copyright 2002\-2011, OpenNebula Project Leads (OpenNebula\.org) . .P Licensed under the Apache License, Version 2\.0 (the "License"); you may not use this file except in compliance with the License\. You may obtain a copy of the License at http://www\.apache\.org/licenses/LICENSE\-2\.0 diff --git a/share/man/onedb.1 b/share/man/onedb.1 index 8b6a6232bf..91683af3ab 100644 --- a/share/man/onedb.1 +++ b/share/man/onedb.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "ONEDB" "1" "July 2011" "" "onedb(1) -- OpenNebula database migration tool" +.TH "ONEDB" "1" "September 2011" "" "onedb(1) -- OpenNebula database migration tool" . .SH "NAME" \fBonedb\fR @@ -27,26 +27,25 @@ This command enables the user to manage the OpenNebula database\. It provides in \-v, \-\-verbose Verbose mode \-h, \-\-help Show this message \-V, \-\-version Show version and copyright information - \-s file, \-\-sqlite file SQLite DB file - \-S host, \-\-server host MySQL server hostname or IP\. Defaults to localhost - \-P port, \-\-port port MySQL server port\. Defaults to 3306 - \-u user, \-\-username user MySQL username - \-p pass, \-\-password pass MySQL password\. Leave unset to be prompted for it - \-d dbname, \-\-dbname dbname MySQL DB name for OpenNebula + \-s, \-\-sqlite file SQLite DB file + \-S, \-\-server host MySQL server hostname or IP\. Defaults to localhost + \-P, \-\-port port MySQL server port\. Defaults to 3306 + \-u, \-\-username user MySQL username + \-p, \-\-password pass MySQL password\. Leave unset to be prompted for it + \-d, \-\-dbname dbname MySQL DB name for OpenNebula . .fi . .SH "COMMANDS" . .IP "\(bu" 4 -restore [\fIbackup_file\fR] +backup [\fIoutput_file\fR] . .IP "" 4 . .nf -Restores the DB from a backup file\. Only restores backups generated -from the same backend (SQLite or MySQL) +Dumps the DB to a file specified in the argument valid options: force . .fi @@ -68,6 +67,36 @@ Use \-v flag to see also OpenNebula version . .IP "" 0 +. +.IP "\(bu" 4 +history +. +.IP "" 4 +. +.nf + +Prints the upgrades history +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +restore [\fIbackup_file\fR] +. +.IP "" 4 +. +.nf + +Restores the DB from a backup file\. Only restores backups generated +from the same backend (SQLite or MySQL) +valid options: force +. +.fi +. +.IP "" 0 + . .IP "\(bu" 4 upgrade [\fIversion\fR] @@ -85,48 +114,52 @@ valid options: force, backup . .IP "" 0 -. -.IP "\(bu" 4 -backup [\fIoutput_file\fR] -. -.IP "" 4 -. -.nf - -Dumps the DB to a file specified in the argument -valid options: force -. -.fi -. -.IP "" 0 - -. -.IP "\(bu" 4 -history -. -.IP "" 4 -. -.nf - -Prints the upgrades history -. -.fi -. -.IP "" 0 - . .IP "" 0 . .SH "ARGUMENT FORMATS" . .IP "\(bu" 4 -text -. -.IP "\(bu" 4 file +. +.IP "" 4 +. +.nf + +Path to a file +. +.fi +. +.IP "" 0 + . .IP "\(bu" 4 range +. +.IP "" 4 +. +.nf + +List of id\'s in the form 1,8\.\.15 +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +text +. +.IP "" 4 +. +.nf + +String +. +.fi +. +.IP "" 0 + . .IP "" 0 diff --git a/share/man/onegroup.1 b/share/man/onegroup.1 index 444c0eac6a..c7491abcfc 100644 --- a/share/man/onegroup.1 +++ b/share/man/onegroup.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "ONEGROUP" "1" "July 2011" "" "onegroup(1) -- manages OpenNebula groups" +.TH "ONEGROUP" "1" "September 2011" "" "onegroup(1) -- manages OpenNebula groups" . .SH "NAME" \fBonegroup\fR @@ -38,6 +38,20 @@ Creates a new Group . .IP "" 0 +. +.IP "\(bu" 4 +delete \fIrange|groupid_list\fR +. +.IP "" 4 +. +.nf + +Deletes the given Group +. +.fi +. +.IP "" 0 + . .IP "\(bu" 4 list @@ -55,21 +69,7 @@ valid options: list, delay, xml, numeric . .IP "\(bu" 4 -delete \fIrange|groupid_list\fR -. -.IP "" 4 -. -.nf - -Deletes the given Group -. -.fi -. -.IP "" 0 - -. -.IP "\(bu" 4 -show \fIgroupid\fR +show [\fIgroupid\fR] . .IP "" 4 . @@ -88,24 +88,79 @@ valid options: xml .SH "ARGUMENT FORMATS" . .IP "\(bu" 4 -groupid_list -. -.IP "\(bu" 4 -text -. -.IP "\(bu" 4 -groupid -. -.IP "\(bu" 4 file +. +.IP "" 4 +. +.nf + +Path to a file +. +.fi +. +.IP "" 0 + . .IP "\(bu" 4 range +. +.IP "" 4 +. +.nf + +List of id\'s in the form 1,8\.\.15 +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +text +. +.IP "" 4 +. +.nf + +String +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +groupid +. +.IP "" 4 +. +.nf + +OpenNebula GROUP name or id +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +groupid_list +. +.IP "" 4 +. +.nf + +Comma\-separated list of OpenNebula GROUP names or ids +. +.fi +. +.IP "" 0 + . .IP "" 0 . .SH "LICENSE" -OpenNebula 2\.9\.80 Copyright 2002\-2011, OpenNebula Project Leads (OpenNebula\.org) +OpenNebula 2\.9\.85 Copyright 2002\-2011, OpenNebula Project Leads (OpenNebula\.org) . .P Licensed under the Apache License, Version 2\.0 (the "License"); you may not use this file except in compliance with the License\. You may obtain a copy of the License at http://www\.apache\.org/licenses/LICENSE\-2\.0 diff --git a/share/man/onehost.1 b/share/man/onehost.1 index 1f0060b697..c5598b5d12 100644 --- a/share/man/onehost.1 +++ b/share/man/onehost.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "ONEHOST" "1" "July 2011" "" "onehost(1) -- manages OpenNebula hosts" +.TH "ONEHOST" "1" "September 2011" "" "onehost(1) -- manages OpenNebula hosts" . .SH "NAME" \fBonehost\fR @@ -27,13 +27,13 @@ .SH "COMMANDS" . .IP "\(bu" 4 -enable \fIrange|hostid_list\fR +create \fIhostname\fR \fIim_mad\fR \fIvmm_mad\fR \fItm_mad\fR . .IP "" 4 . .nf -Enables the given Host +Creates a new Host . .fi . @@ -41,13 +41,27 @@ Enables the given Host . .IP "\(bu" 4 -update \fIhostid\fR +delete \fIrange|hostid_list\fR . .IP "" 4 . .nf -Launches the system editor to modify and update the template contents +Deletes the given Host +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +enable \fIrange|hostid_list\fR +. +.IP "" 4 +. +.nf + +Enables the given Host . .fi . @@ -69,28 +83,13 @@ Disables the given Host . .IP "\(bu" 4 -top +update \fIhostid\fR . .IP "" 4 . .nf -Lists Hosts continuously -valid options: list, delay, xml, numeric, kilobytes -. -.fi -. -.IP "" 0 - -. -.IP "\(bu" 4 -create \fIhostname\fR \fIim_mad\fR \fIvmm_mad\fR \fItm_mad\fR -. -.IP "" 4 -. -.nf - -Creates a new Host +Launches the system editor to modify and update the template contents . .fi . @@ -112,21 +111,6 @@ The copy is performed the next time the Host is monitored . .IP "" 0 -. -.IP "\(bu" 4 -show \fIhostid\fR -. -.IP "" 4 -. -.nf - -Shows information for the given Host -valid options: xml -. -.fi -. -.IP "" 0 - . .IP "\(bu" 4 list @@ -144,13 +128,29 @@ valid options: list, delay, xml, numeric, kilobytes . .IP "\(bu" 4 -delete \fIrange|hostid_list\fR +show \fIhostid\fR . .IP "" 4 . .nf -Deletes the given Host +Shows information for the given Host +valid options: xml +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +top +. +.IP "" 4 +. +.nf + +Lists Hosts continuously +valid options: list, delay, xml, numeric, kilobytes . .fi . @@ -162,24 +162,79 @@ Deletes the given Host .SH "ARGUMENT FORMATS" . .IP "\(bu" 4 -hostid_list -. -.IP "\(bu" 4 file . -.IP "\(bu" 4 -text +.IP "" 4 . -.IP "\(bu" 4 -hostid +.nf + +Path to a file +. +.fi +. +.IP "" 0 + . .IP "\(bu" 4 range +. +.IP "" 4 +. +.nf + +List of id\'s in the form 1,8\.\.15 +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +text +. +.IP "" 4 +. +.nf + +String +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +hostid +. +.IP "" 4 +. +.nf + +OpenNebula HOST name or id +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +hostid_list +. +.IP "" 4 +. +.nf + +Comma\-separated list of OpenNebula HOST names or ids +. +.fi +. +.IP "" 0 + . .IP "" 0 . .SH "LICENSE" -OpenNebula 2\.9\.80 Copyright 2002\-2011, OpenNebula Project Leads (OpenNebula\.org) +OpenNebula 2\.9\.85 Copyright 2002\-2011, OpenNebula Project Leads (OpenNebula\.org) . .P Licensed under the Apache License, Version 2\.0 (the "License"); you may not use this file except in compliance with the License\. You may obtain a copy of the License at http://www\.apache\.org/licenses/LICENSE\-2\.0 diff --git a/share/man/oneimage.1 b/share/man/oneimage.1 index 3fc1241a4d..d47d831509 100644 --- a/share/man/oneimage.1 +++ b/share/man/oneimage.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "ONEIMAGE" "1" "July 2011" "" "oneimage(1) -- manages OpenNebula images" +.TH "ONEIMAGE" "1" "September 2011" "" "oneimage(1) -- manages OpenNebula images" . .SH "NAME" \fBoneimage\fR @@ -13,9 +13,9 @@ . .nf - \-x, \-\-xml Show the resource in xml format \-l, \-\-list x,y,z Selects columns to display with list command \-d, \-\-delay x Sets the delay in seconds for top command + \-x, \-\-xml Show the resource in xml format \-n, \-\-numeric Do not translate user and group IDs \-v, \-\-verbose Verbose mode \-h, \-\-help Show this message @@ -24,92 +24,6 @@ .fi . .SH "COMMANDS" -. -.IP "\(bu" 4 -enable \fIrange|imageid_list\fR -. -.IP "" 4 -. -.nf - -Enables the given Image -. -.fi -. -.IP "" 0 - -. -.IP "\(bu" 4 -update \fIimageid\fR -. -.IP "" 4 -. -.nf - -Launches the system editor to modify and update the template contents -. -.fi -. -.IP "" 0 - -. -.IP "\(bu" 4 -disable \fIrange|imageid_list\fR -. -.IP "" 4 -. -.nf - -Disables the given Image -. -.fi -. -.IP "" 0 - -. -.IP "\(bu" 4 -unpublish \fIrange|imageid_list\fR -. -.IP "" 4 -. -.nf - -Unpublishes the given Image\. A private Image can\'t be used by any other -User -. -.fi -. -.IP "" 0 - -. -.IP "\(bu" 4 -show \fIimageid\fR -. -.IP "" 4 -. -.nf - -Shows information for the given Image -valid options: xml -. -.fi -. -.IP "" 0 - -. -.IP "\(bu" 4 -chgrp \fIrange|imageid_list\fR \fIgroupid\fR -. -.IP "" 4 -. -.nf - -Changes the Image group -. -.fi -. -.IP "" 0 - . .IP "\(bu" 4 create \fIfile\fR @@ -126,14 +40,43 @@ Creates a new Image from the given template file . .IP "\(bu" 4 -list [\fIfilterflag\fR] +delete \fIrange|imageid_list\fR . .IP "" 4 . .nf -Lists Images in the pool -valid options: list, delay, xml, numeric +Deletes the given Image +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +publish \fIrange|imageid_list\fR +. +.IP "" 4 +. +.nf + +Publishes the given Image\. A public Image can be seen and used by other +Users in the Image\'s group +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +unpublish \fIrange|imageid_list\fR +. +.IP "" 4 +. +.nf + +Unpublishes the given Image\. A private Image can\'t be used by any other +User . .fi . @@ -158,13 +101,13 @@ one VM instance at a time\. . .IP "\(bu" 4 -delete \fIrange|imageid_list\fR +nonpersistent \fIrange|imageid_list\fR . .IP "" 4 . .nf -Deletes the given Image +Makes the given Image non persistent\. See \'oneimage persistent\' . .fi . @@ -172,14 +115,55 @@ Deletes the given Image . .IP "\(bu" 4 -top [\fIfilterflag\fR] +update \fIimageid\fR . .IP "" 4 . .nf -Lists Images continuously -valid options: list, delay, xml, numeric +Launches the system editor to modify and update the template contents +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +enable \fIrange|imageid_list\fR +. +.IP "" 4 +. +.nf + +Enables the given Image +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +disable \fIrange|imageid_list\fR +. +.IP "" 4 +. +.nf + +Disables the given Image +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +chgrp \fIrange|imageid_list\fR \fIgroupid\fR +. +.IP "" 4 +. +.nf + +Changes the Image group . .fi . @@ -201,14 +185,14 @@ Changes the Image owner and group . .IP "\(bu" 4 -publish \fIrange|imageid_list\fR +list [\fIfilterflag\fR] . .IP "" 4 . .nf -Publishes the given Image\. A public Image can be seen and used by other -Users in the Image\'s group +Lists Images in the pool +valid options: list, delay, xml, numeric . .fi . @@ -216,13 +200,29 @@ Users in the Image\'s group . .IP "\(bu" 4 -nonpersistent \fIrange|imageid_list\fR +show \fIimageid\fR . .IP "" 4 . .nf -Makes the given Image non persistent\. See \'oneimage persistent\' +Shows information for the given Image +valid options: xml +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +top [\fIfilterflag\fR] +. +.IP "" 4 +. +.nf + +Lists Images continuously +valid options: list, delay, xml, numeric . .fi . @@ -234,33 +234,126 @@ Makes the given Image non persistent\. See \'oneimage persistent\' .SH "ARGUMENT FORMATS" . .IP "\(bu" 4 -userid +file . -.IP "\(bu" 4 -imageid +.IP "" 4 . -.IP "\(bu" 4 -filterflag +.nf + +Path to a file . -.IP "\(bu" 4 -groupid +.fi +. +.IP "" 0 + . .IP "\(bu" 4 range . -.IP "\(bu" 4 -file +.IP "" 4 . -.IP "\(bu" 4 -imageid_list +.nf + +List of id\'s in the form 1,8\.\.15 +. +.fi +. +.IP "" 0 + . .IP "\(bu" 4 text +. +.IP "" 4 +. +.nf + +String +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +groupid +. +.IP "" 4 +. +.nf + +OpenNebula GROUP name or id +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +userid +. +.IP "" 4 +. +.nf + +OpenNebula USER name or id +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +imageid +. +.IP "" 4 +. +.nf + +OpenNebula IMAGE name or id +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +imageid_list +. +.IP "" 4 +. +.nf + +Comma\-separated list of OpenNebula IMAGE names or ids +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +filterflag +. +.IP "" 4 +. +.nf + +a, all all the known IMAGEs +m, mine the IMAGE belonging to the user in ONE_AUTH +g, group \'mine\' plus the IMAGE belonging to the groups + the user is member of +uid IMAGE of the user identified by this uid +user IMAGE of the user identified by the username +. +.fi +. +.IP "" 0 + . .IP "" 0 . .SH "LICENSE" -OpenNebula 2\.9\.80 Copyright 2002\-2011, OpenNebula Project Leads (OpenNebula\.org) +OpenNebula 2\.9\.85 Copyright 2002\-2011, OpenNebula Project Leads (OpenNebula\.org) . .P Licensed under the Apache License, Version 2\.0 (the "License"); you may not use this file except in compliance with the License\. You may obtain a copy of the License at http://www\.apache\.org/licenses/LICENSE\-2\.0 diff --git a/share/man/onetemplate.1 b/share/man/onetemplate.1 index 41dc9b833f..a8f9cb2066 100644 --- a/share/man/onetemplate.1 +++ b/share/man/onetemplate.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "ONETEMPLATE" "1" "July 2011" "" "onetemplate(1) -- manages OpenNebula templates" +.TH "ONETEMPLATE" "1" "September 2011" "" "onetemplate(1) -- manages OpenNebula templates" . .SH "NAME" \fBonetemplate\fR @@ -13,9 +13,11 @@ . .nf - \-x, \-\-xml Show the resource in xml format + \-n, \-\-name vm_name Name of the new Virtual Machine + \-m, \-\-multiple x Instance multiple VMs \-l, \-\-list x,y,z Selects columns to display with list command \-d, \-\-delay x Sets the delay in seconds for top command + \-x, \-\-xml Show the resource in xml format \-n, \-\-numeric Do not translate user and group IDs \-v, \-\-verbose Verbose mode \-h, \-\-help Show this message @@ -24,50 +26,6 @@ .fi . .SH "COMMANDS" -. -.IP "\(bu" 4 -show \fItemplateid\fR -. -.IP "" 4 -. -.nf - -Shows information for the given Template -valid options: xml -. -.fi -. -.IP "" 0 - -. -.IP "\(bu" 4 -update \fItemplateid\fR -. -.IP "" 4 -. -.nf - -Launches the system editor to modify and update the template contents -. -.fi -. -.IP "" 0 - -. -.IP "\(bu" 4 -unpublish \fIrange|templateid_list\fR -. -.IP "" 4 -. -.nf - -Unpublishes the given Template\. A private Template can\'t be -instantiated by any other User -. -.fi -. -.IP "" 0 - . .IP "\(bu" 4 create \fIfile\fR @@ -82,50 +40,6 @@ Creates a new Template from the given template file . .IP "" 0 -. -.IP "\(bu" 4 -chgrp \fIrange|templateid_list\fR \fIgroupid\fR -. -.IP "" 4 -. -.nf - -Changes the Template group -. -.fi -. -.IP "" 0 - -. -.IP "\(bu" 4 -list [\fIfilterflag\fR] -. -.IP "" 4 -. -.nf - -Lists Templates in the pool -valid options: list, delay, xml, numeric -. -.fi -. -.IP "" 0 - -. -.IP "\(bu" 4 -top [\fIfilterflag\fR] -. -.IP "" 4 -. -.nf - -Lists Templates continuously -valid options: list, delay, xml, numeric -. -.fi -. -.IP "" 0 - . .IP "\(bu" 4 delete \fIrange|templateid_list\fR @@ -140,6 +54,22 @@ Deletes the given Image . .IP "" 0 +. +.IP "\(bu" 4 +instantiate \fItemplateid\fR +. +.IP "" 4 +. +.nf + +Creates a new VM instance from the given Template\. This VM can be +managed with the \'onevm\' command +valid options: vm_name, multiple +. +.fi +. +.IP "" 0 + . .IP "\(bu" 4 publish \fIrange|templateid_list\fR @@ -155,6 +85,35 @@ instantiated by other Users in the Template\'s group . .IP "" 0 +. +.IP "\(bu" 4 +unpublish \fIrange|templateid_list\fR +. +.IP "" 4 +. +.nf + +Unpublishes the given Template\. A private Template can\'t be +instantiated by any other User +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +chgrp \fIrange|templateid_list\fR \fIgroupid\fR +. +.IP "" 4 +. +.nf + +Changes the Template group +. +.fi +. +.IP "" 0 + . .IP "\(bu" 4 chown \fIrange|templateid_list\fR \fIuserid\fR [\fIgroupid\fR] @@ -171,14 +130,58 @@ Changes the Template owner and group . .IP "\(bu" 4 -instantiate \fIrange|templateid_list\fR +update \fItemplateid\fR . .IP "" 4 . .nf -Creates a new VM instance from the given Template\. This VM can be -managed with the \'onevm\' command +Launches the system editor to modify and update the template contents +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +list [\fIfilterflag\fR] +. +.IP "" 4 +. +.nf + +Lists Templates in the pool +valid options: list, delay, xml, numeric +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +show \fItemplateid\fR +. +.IP "" 4 +. +.nf + +Shows information for the given Template +valid options: xml +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +top [\fIfilterflag\fR] +. +.IP "" 4 +. +.nf + +Lists Templates continuously +valid options: list, delay, xml, numeric . .fi . @@ -190,33 +193,126 @@ managed with the \'onevm\' command .SH "ARGUMENT FORMATS" . .IP "\(bu" 4 -userid +file . -.IP "\(bu" 4 -templateid +.IP "" 4 . -.IP "\(bu" 4 -filterflag +.nf + +Path to a file . -.IP "\(bu" 4 -groupid +.fi +. +.IP "" 0 + . .IP "\(bu" 4 range . -.IP "\(bu" 4 -file +.IP "" 4 . -.IP "\(bu" 4 -templateid_list +.nf + +List of id\'s in the form 1,8\.\.15 +. +.fi +. +.IP "" 0 + . .IP "\(bu" 4 text +. +.IP "" 4 +. +.nf + +String +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +groupid +. +.IP "" 4 +. +.nf + +OpenNebula GROUP name or id +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +userid +. +.IP "" 4 +. +.nf + +OpenNebula USER name or id +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +templateid +. +.IP "" 4 +. +.nf + +OpenNebula VMTEMPLATE name or id +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +templateid_list +. +.IP "" 4 +. +.nf + +Comma\-separated list of OpenNebula VMTEMPLATE names or ids +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +filterflag +. +.IP "" 4 +. +.nf + +a, all all the known VMTEMPLATEs +m, mine the VMTEMPLATE belonging to the user in ONE_AUTH +g, group \'mine\' plus the VMTEMPLATE belonging to the groups + the user is member of +uid VMTEMPLATE of the user identified by this uid +user VMTEMPLATE of the user identified by the username +. +.fi +. +.IP "" 0 + . .IP "" 0 . .SH "LICENSE" -OpenNebula 2\.9\.80 Copyright 2002\-2011, OpenNebula Project Leads (OpenNebula\.org) +OpenNebula 2\.9\.85 Copyright 2002\-2011, OpenNebula Project Leads (OpenNebula\.org) . .P Licensed under the Apache License, Version 2\.0 (the "License"); you may not use this file except in compliance with the License\. You may obtain a copy of the License at http://www\.apache\.org/licenses/LICENSE\-2\.0 diff --git a/share/man/oneuser.1 b/share/man/oneuser.1 index 9004b6e12f..8a327e1d63 100644 --- a/share/man/oneuser.1 +++ b/share/man/oneuser.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "ONEUSER" "1" "July 2011" "" "oneuser(1) -- manages OpenNebula users" +.TH "ONEUSER" "1" "September 2011" "" "oneuser(1) -- manages OpenNebula users" . .SH "NAME" \fBoneuser\fR @@ -13,11 +13,18 @@ . .nf - \-x, \-\-xml Show the resource in xml format \-r, \-\-read\-file Read password from file \-p, \-\-plain Store plain password + \-\-ssh SSH Auth system + \-\-x509 x509 Auth system for x509 certificates + \-k, \-\-key path_to_private_key_pem Path to the Private Key of the User + \-c, \-\-cert path_to_user_cert_pem Path to the Certificate of the User + \-\-x509_proxy x509 Auth system based on x509 proxy certificates + \-\-proxy path_to_user_proxy_pem Path to the user proxy certificate + \-\-time x Token duration in seconds, defaults to 3600 (1 h) \-l, \-\-list x,y,z Selects columns to display with list command \-d, \-\-delay x Sets the delay in seconds for top command + \-x, \-\-xml Show the resource in xml format \-n, \-\-numeric Do not translate user and group IDs \-v, \-\-verbose Verbose mode \-h, \-\-help Show this message @@ -28,14 +35,84 @@ .SH "COMMANDS" . .IP "\(bu" 4 -show [\fIuserid\fR] +create \fIusername\fR [\fIpassword\fR] . .IP "" 4 . .nf -Shows information for the given User -valid options: xml +Creates a new User +Examples: + oneuser create my_user my_password + oneuser create my_user /tmp/mypass \-r + oneuser create my_user \-\-ssh \-\-key /tmp/id_rsa + oneuser create my_user \-\-ssh \-r /tmp/public_key + oneuser create my_user \-\-x509 \-\-cert /tmp/my_cert\.pem +valid options: read_file, plain, ssh, x509, key, cert +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +login \fIusername\fR +. +.IP "" 4 +. +.nf + +Creates the Login token for authentication +Examples: + oneuser login my_user \-\-ssh \-\-key /tmp/id_rsa \-\-time 72000 + oneuser login my_user \-\-x509 \-\-cert /tmp/my_cert\.pem \-\-key /tmp/my_key\.pk \-\-time 72000 + oneuser login my_user \-\-x509_proxy \-\-proxy /tmp/my_cert\.pem \-\-time 72000 +valid options: ssh, x509, x509_proxy, key, cert, proxy, time +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +key +. +.IP "" 4 +. +.nf + +Shows a public key from a private SSH key\. Use it as password +for the SSH authentication mechanism\. +valid options: key +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +delete \fIrange|userid_list\fR +. +.IP "" 4 +. +.nf + +Deletes the given User +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +passwd \fIuserid\fR [\fIpassword\fR] +. +.IP "" 4 +. +.nf + +Changes the given User\'s password +valid options: read_file, plain, ssh, x509, key, cert . .fi . @@ -55,21 +132,6 @@ Changes the User\'s main group . .IP "" 0 -. -.IP "\(bu" 4 -create \fIusername\fR \fIpassword\fR -. -.IP "" 4 -. -.nf - -Creates a new User -valid options: read_file, plain -. -.fi -. -.IP "" 0 - . .IP "\(bu" 4 list @@ -87,27 +149,14 @@ valid options: list, delay, xml, numeric . .IP "\(bu" 4 -delete \fIrange|userid_list\fR +show [\fIuserid\fR] . .IP "" 4 . .nf -Deletes the given User -. -.fi -. -.IP "" 0 - -. -.IP "\(bu" 4 -passwd \fIuserid\fR \fIpassword\fR -. -.IP "" 4 -. -.nf - -Changes the given User\'s password +Shows information for the given User +valid options: xml . .fi . @@ -119,30 +168,107 @@ Changes the given User\'s password .SH "ARGUMENT FORMATS" . .IP "\(bu" 4 -userid +file . -.IP "\(bu" 4 -password +.IP "" 4 +. +.nf + +Path to a file +. +.fi +. +.IP "" 0 + . .IP "\(bu" 4 range +. +.IP "" 4 +. +.nf + +List of id\'s in the form 1,8\.\.15 +. +.fi +. +.IP "" 0 + . .IP "\(bu" 4 text . -.IP "\(bu" 4 -file +.IP "" 4 +. +.nf + +String +. +.fi +. +.IP "" 0 + . .IP "\(bu" 4 groupid +. +.IP "" 4 +. +.nf + +OpenNebula GROUP name or id +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +userid +. +.IP "" 4 +. +.nf + +OpenNebula USER name or id +. +.fi +. +.IP "" 0 + . .IP "\(bu" 4 userid_list +. +.IP "" 4 +. +.nf + +Comma\-separated list of OpenNebula USER names or ids +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +password +. +.IP "" 4 +. +.nf + +User password +. +.fi +. +.IP "" 0 + . .IP "" 0 . .SH "LICENSE" -OpenNebula 2\.9\.80 Copyright 2002\-2011, OpenNebula Project Leads (OpenNebula\.org) +OpenNebula 2\.9\.85 Copyright 2002\-2011, OpenNebula Project Leads (OpenNebula\.org) . .P Licensed under the Apache License, Version 2\.0 (the "License"); you may not use this file except in compliance with the License\. You may obtain a copy of the License at http://www\.apache\.org/licenses/LICENSE\-2\.0 diff --git a/share/man/onevdc.1 b/share/man/onevdc.1 index 9d958560da..5ca56052f5 100644 --- a/share/man/onevdc.1 +++ b/share/man/onevdc.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "ONEVDC" "1" "July 2011" "" "onevdc(1) -- manages OpenNebula Virtual DataCenters" +.TH "ONEVDC" "1" "September 2011" "" "onevdc(1) -- manages OpenNebula Virtual DataCenters" . .SH "NAME" \fBonevdc\fR @@ -27,7 +27,21 @@ .SH "COMMANDS" . .IP "\(bu" 4 -show \fItext\fR +create \fIfile\fR +. +.IP "" 4 +. +.nf + +Create a new VDC +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +show \fIvdcid\fR . .IP "" 4 . @@ -68,38 +82,71 @@ Deletes a VDC . .IP "" 0 +. +.IP "" 0 +. +.SH "ARGUMENT FORMATS" . .IP "\(bu" 4 -create \fIfile\fR +file . .IP "" 4 . .nf -Create a new VDC +Path to a file +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +range +. +.IP "" 4 +. +.nf + +List of id\'s in the form 1,8\.\.15 +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +text +. +.IP "" 4 +. +.nf + +String +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +vdcid +. +.IP "" 4 +. +.nf + +VDC ID . .fi . .IP "" 0 -. -.IP "" 0 -. -.SH "ARGUMENT FORMATS" -. -.IP "\(bu" 4 -file -. -.IP "\(bu" 4 -text -. -.IP "\(bu" 4 -range . .IP "" 0 . .SH "LICENSE" -OpenNebula 2\.9\.80 Copyright 2002\-2011, OpenNebula Project Leads (OpenNebula\.org) +OpenNebula 2\.9\.85 Copyright 2002\-2011, OpenNebula Project Leads (OpenNebula\.org) . .P Licensed under the Apache License, Version 2\.0 (the "License"); you may not use this file except in compliance with the License\. You may obtain a copy of the License at http://www\.apache\.org/licenses/LICENSE\-2\.0 diff --git a/share/man/onevm.1 b/share/man/onevm.1 index d69ea82637..5b24c0f7ca 100644 --- a/share/man/onevm.1 +++ b/share/man/onevm.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "ONEVM" "1" "July 2011" "" "onevm(1) -- manages OpenNebula virtual machines" +.TH "ONEVM" "1" "September 2011" "" "onevm(1) -- manages OpenNebula virtual machines" . .SH "NAME" \fBonevm\fR @@ -13,12 +13,12 @@ . .nf + \-m, \-\-multiple x Instance multiple VMs \-x, \-\-xml Show the resource in xml format - \-l, \-\-list x,y,z Selects columns to display with list command - \-d, \-\-delay x Sets the delay in seconds for top command \-n, \-\-numeric Do not translate user and group IDs \-k, \-\-kilobytes Show units in kilobytes - \-m, \-\-multiple x Instance multiple VMs + \-l, \-\-list x,y,z Selects columns to display with list command + \-d, \-\-delay x Sets the delay in seconds for top command \-v, \-\-verbose Verbose mode \-h, \-\-help Show this message \-V, \-\-version Show version and copyright information @@ -28,13 +28,16 @@ .SH "COMMANDS" . .IP "\(bu" 4 -chgrp \fIrange|vmid_list\fR \fIgroupid\fR +create \fIfile\fR . .IP "" 4 . .nf -Changes the VM group +Creates a new VM from the given template file\. This command bypasses +the Template pool, which is the preferred way to instantiate new VMs\. +See \'onetemplate create\' and \'onetemplate instantiate\' +valid options: multiple, xml, numeric, kilobytes . .fi . @@ -42,15 +45,48 @@ Changes the VM group . .IP "\(bu" 4 -restart \fIrange|vmid_list\fR +delete \fIrange|vmid_list\fR . .IP "" 4 . .nf -Forces a re\-deployment of the given VM, issuing a boot action\. +Deletes the given VM -States: UNKNOWN, BOOT +States: ANY +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +hold \fIrange|vmid_list\fR +. +.IP "" 4 +. +.nf + +Sets the given VM on hold\. A VM on hold is not scheduled until it is +released\. It can be, however, deployed manually; see \'onevm deploy\' + +States: PENDING +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +release \fIrange|vmid_list\fR +. +.IP "" 4 +. +.nf + +Releases a VM on hold\. See \'onevm hold\' + +States: HOLD . .fi . @@ -77,14 +113,33 @@ States: ANY . .IP "\(bu" 4 -show \fIvmid\fR +shutdown \fIrange|vmid_list\fR . .IP "" 4 . .nf -Shows information for the given VM -valid options: xml +Shuts down the given VM\. + +States: RUNNING +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +deploy \fIrange|vmid_list\fR \fIhostid\fR +. +.IP "" 4 +. +.nf + +Deploys the given VM in the specified Host\. This command forces the +deployment, in a standard installation the Scheduler is in charge +of this decision + +States: PENDING . .fi . @@ -108,13 +163,82 @@ States: RUNNING . .IP "\(bu" 4 -shutdown \fIrange|vmid_list\fR +migrate \fIrange|vmid_list\fR \fIhostid\fR . .IP "" 4 . .nf -Shuts down the given VM\. +Saves the given running VM and starts it again in the specified Host + +States: RUNNING +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +restart \fIrange|vmid_list\fR +. +.IP "" 4 +. +.nf + +Forces a re\-deployment of the given VM, issuing a boot action\. + +States: UNKNOWN, BOOT +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +resubmit \fIrange|vmid_list\fR +. +.IP "" 4 +. +.nf + +Resubmits the VM to PENDING state\. This is intented for VMs stuck in a +transient state\. To re\-deploy a fresh copy of the same VM, create a +Template and instantiante it, see \'onetemplate instantiate\' + +States: ANY, except SUSPENDED or DONE +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +cancel \fIrange|vmid_list\fR +. +.IP "" 4 +. +.nf + +Cancels the given VM\. The process is checked by OpenNebula, so +if the process fails the VM remains in running state\. If the action +succeeds the VMDIR in the remote machine is not deleted + +States: RUNNING +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +stop \fIrange|vmid_list\fR +. +.IP "" 4 +. +.nf + +Stops a running VM\. The VM state is saved and transferred back to the +front\-end along with the disk files States: RUNNING . @@ -143,16 +267,15 @@ States: RUNNING . .IP "\(bu" 4 -hold \fIrange|vmid_list\fR +resume \fIrange|vmid_list\fR . .IP "" 4 . .nf -Sets the given VM on hold\. A VM on hold is not scheduled until it is -released\. It can be, however, deployed manually; see \'onevm deploy\' +Resumes the execution of the a saved VM -States: PENDING +States: STOPPED, SUSPENDED . .fi . @@ -160,17 +283,27 @@ States: PENDING . .IP "\(bu" 4 -resubmit \fIrange|vmid_list\fR +chgrp \fIrange|vmid_list\fR \fIgroupid\fR . .IP "" 4 . .nf -Resubmits the VM to PENDING state\. This is intented for VMs stuck in a -transient state\. To re\-deploy a fresh copy of the same VM, create a -Template and instantiante it, see \'onetemplate instantiate\' +Changes the VM group +. +.fi +. +.IP "" 0 -States: ANY, except SUSPENDED or DONE +. +.IP "\(bu" 4 +chown \fIrange|vmid_list\fR \fIuserid\fR [\fIgroupid\fR] +. +.IP "" 4 +. +.nf + +Changes the Image owner and group . .fi . @@ -193,147 +326,14 @@ valid options: list, delay, xml, numeric, kilobytes . .IP "\(bu" 4 -stop \fIrange|vmid_list\fR +show \fIvmid\fR . .IP "" 4 . .nf -Stops a running VM\. The VM state is saved and transferred back to the -front\-end along with the disk files - -States: RUNNING -. -.fi -. -.IP "" 0 - -. -.IP "\(bu" 4 -deploy \fIrange|vmid_list\fR \fIhostid\fR -. -.IP "" 4 -. -.nf - -Deploys the given VM in the specified Host\. This command forces the -deployment, in a standard installation the Scheduler is in charge -of this decision - -States: PENDING -. -.fi -. -.IP "" 0 - -. -.IP "\(bu" 4 -delete \fIrange|vmid_list\fR -. -.IP "" 4 -. -.nf - -Deletes the given VM - -States: ANY -. -.fi -. -.IP "" 0 - -. -.IP "\(bu" 4 -resume \fIrange|vmid_list\fR -. -.IP "" 4 -. -.nf - -Resumes the execution of the a saved VM - -States: STOPPED, SUSPENDED -. -.fi -. -.IP "" 0 - -. -.IP "\(bu" 4 -migrate \fIrange|vmid_list\fR \fIhostid\fR -. -.IP "" 4 -. -.nf - -Saves the given running VM and starts it again in the specified Host - -States: RUNNING -. -.fi -. -.IP "" 0 - -. -.IP "\(bu" 4 -release \fIrange|vmid_list\fR -. -.IP "" 4 -. -.nf - -Releases a VM on hold\. See \'onevm hold\' - -States: HOLD -. -.fi -. -.IP "" 0 - -. -.IP "\(bu" 4 -chown \fIrange|vmid_list\fR \fIuserid\fR [\fIgroupid\fR] -. -.IP "" 4 -. -.nf - -Changes the Image owner and group -. -.fi -. -.IP "" 0 - -. -.IP "\(bu" 4 -cancel \fIrange|vmid_list\fR -. -.IP "" 4 -. -.nf - -Cancels the given VM\. The process is checked by OpenNebula, so -if the process fails the VM remains in running state\. If the action -succeeds the VMDIR in the remote machine is not deleted - -States: RUNNING -. -.fi -. -.IP "" 0 - -. -.IP "\(bu" 4 -create \fIfile\fR -. -.IP "" 4 -. -.nf - -Creates a new VM from the given template file\. This command bypasses -the Template pool, which is the preferred way to instantiate new VMs\. -See \'onetemplate create\' and \'onetemplate instantiate\' -valid options: multiple, xml, numeric, kilobytes +Shows information for the given VM +valid options: xml . .fi . @@ -360,36 +360,140 @@ valid options: list, delay, xml, numeric, kilobytes .SH "ARGUMENT FORMATS" . .IP "\(bu" 4 -text -. -.IP "\(bu" 4 -vmid_list -. -.IP "\(bu" 4 -groupid -. -.IP "\(bu" 4 file . -.IP "\(bu" 4 -userid +.IP "" 4 . -.IP "\(bu" 4 -hostid +.nf + +Path to a file . -.IP "\(bu" 4 -vmid +.fi +. +.IP "" 0 + . .IP "\(bu" 4 range +. +.IP "" 4 +. +.nf + +List of id\'s in the form 1,8\.\.15 +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +text +. +.IP "" 4 +. +.nf + +String +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +hostid +. +.IP "" 4 +. +.nf + +OpenNebula HOST name or id +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +groupid +. +.IP "" 4 +. +.nf + +OpenNebula GROUP name or id +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +userid +. +.IP "" 4 +. +.nf + +OpenNebula USER name or id +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +vmid +. +.IP "" 4 +. +.nf + +OpenNebula VM name or id +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +vmid_list +. +.IP "" 4 +. +.nf + +Comma\-separated list of OpenNebula VM names or ids +. +.fi +. +.IP "" 0 + . .IP "\(bu" 4 filterflag +. +.IP "" 4 +. +.nf + +a, all all the known VMs +m, mine the VM belonging to the user in ONE_AUTH +g, group \'mine\' plus the VM belonging to the groups + the user is member of +uid VM of the user identified by this uid +user VM of the user identified by the username +. +.fi +. +.IP "" 0 + . .IP "" 0 . .SH "LICENSE" -OpenNebula 2\.9\.80 Copyright 2002\-2011, OpenNebula Project Leads (OpenNebula\.org) +OpenNebula 2\.9\.85 Copyright 2002\-2011, OpenNebula Project Leads (OpenNebula\.org) . .P Licensed under the Apache License, Version 2\.0 (the "License"); you may not use this file except in compliance with the License\. You may obtain a copy of the License at http://www\.apache\.org/licenses/LICENSE\-2\.0 diff --git a/share/man/onevnet.1 b/share/man/onevnet.1 index f1a4cb5912..db089aae93 100644 --- a/share/man/onevnet.1 +++ b/share/man/onevnet.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "ONEVNET" "1" "July 2011" "" "onevnet(1) -- manages OpenNebula networks" +.TH "ONEVNET" "1" "September 2011" "" "onevnet(1) -- manages OpenNebula networks" . .SH "NAME" \fBonevnet\fR @@ -13,9 +13,9 @@ . .nf - \-x, \-\-xml Show the resource in xml format \-l, \-\-list x,y,z Selects columns to display with list command \-d, \-\-delay x Sets the delay in seconds for top command + \-x, \-\-xml Show the resource in xml format \-n, \-\-numeric Do not translate user and group IDs \-k, \-\-kilobytes Show units in kilobytes \-v, \-\-verbose Verbose mode @@ -27,13 +27,13 @@ .SH "COMMANDS" . .IP "\(bu" 4 -rmleases \fIvnetid\fR \fIip\fR +create \fIfile\fR . .IP "" 4 . .nf -Removes a lease from the Virtual Network +Creates a new Virtual Network from the given template file . .fi . @@ -41,13 +41,13 @@ Removes a lease from the Virtual Network . .IP "\(bu" 4 -chgrp \fIrange|vnid_list\fR \fIgroupid\fR +delete \fIrange|vnetid_list\fR . .IP "" 4 . .nf -Changes the Virtual Network group +Deletes the given Virtual Network . .fi . @@ -69,14 +69,13 @@ Adds a lease to the Virtual Network . .IP "\(bu" 4 -show \fIvnetid\fR +rmleases \fIvnetid\fR \fIip\fR . .IP "" 4 . .nf -Shows information for the given Virtual Network -valid options: xml +Removes a lease from the Virtual Network . .fi . @@ -97,49 +96,6 @@ seen and used by other Users in the Virtual Network\'s group . .IP "" 0 -. -.IP "\(bu" 4 -list [\fIfilterflag\fR] -. -.IP "" 4 -. -.nf - -Lists Virtual Networks in the pool -valid options: list, delay, xml, numeric, kilobytes -. -.fi -. -.IP "" 0 - -. -.IP "\(bu" 4 -delete \fIrange|vnetid_list\fR -. -.IP "" 4 -. -.nf - -Deletes the given Virtual Network -. -.fi -. -.IP "" 0 - -. -.IP "\(bu" 4 -create \fIfile\fR -. -.IP "" 4 -. -.nf - -Creates a new Virtual Network from the given template file -. -.fi -. -.IP "" 0 - . .IP "\(bu" 4 unpublish \fIrange|vnetid_list\fR @@ -155,6 +111,20 @@ can\'t be used by any other User . .IP "" 0 +. +.IP "\(bu" 4 +chgrp \fIrange|vnid_list\fR \fIgroupid\fR +. +.IP "" 4 +. +.nf + +Changes the Virtual Network group +. +.fi +. +.IP "" 0 + . .IP "\(bu" 4 chown \fIrange|vnid_list\fR \fIuserid\fR [\fIgroupid\fR] @@ -169,39 +139,162 @@ Changes the Virtual Network owner and group . .IP "" 0 +. +.IP "\(bu" 4 +list [\fIfilterflag\fR] +. +.IP "" 4 +. +.nf + +Lists Virtual Networks in the pool +valid options: list, delay, xml, numeric, kilobytes +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +show \fIvnetid\fR +. +.IP "" 4 +. +.nf + +Shows information for the given Virtual Network +valid options: xml +. +.fi +. +.IP "" 0 + . .IP "" 0 . .SH "ARGUMENT FORMATS" . .IP "\(bu" 4 -vnetid_list -. -.IP "\(bu" 4 -userid -. -.IP "\(bu" 4 file . -.IP "\(bu" 4 -vnetid +.IP "" 4 . -.IP "\(bu" 4 -filterflag +.nf + +Path to a file . -.IP "\(bu" 4 -groupid +.fi +. +.IP "" 0 + . .IP "\(bu" 4 range +. +.IP "" 4 +. +.nf + +List of id\'s in the form 1,8\.\.15 +. +.fi +. +.IP "" 0 + . .IP "\(bu" 4 text +. +.IP "" 4 +. +.nf + +String +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +groupid +. +.IP "" 4 +. +.nf + +OpenNebula GROUP name or id +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +userid +. +.IP "" 4 +. +.nf + +OpenNebula USER name or id +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +vnetid +. +.IP "" 4 +. +.nf + +OpenNebula VNET name or id +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +vnetid_list +. +.IP "" 4 +. +.nf + +Comma\-separated list of OpenNebula VNET names or ids +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +filterflag +. +.IP "" 4 +. +.nf + +a, all all the known VNETs +m, mine the VNET belonging to the user in ONE_AUTH +g, group \'mine\' plus the VNET belonging to the groups + the user is member of +uid VNET of the user identified by this uid +user VNET of the user identified by the username +. +.fi +. +.IP "" 0 + . .IP "" 0 . .SH "LICENSE" -OpenNebula 2\.9\.80 Copyright 2002\-2011, OpenNebula Project Leads (OpenNebula\.org) +OpenNebula 2\.9\.85 Copyright 2002\-2011, OpenNebula Project Leads (OpenNebula\.org) . .P Licensed under the Apache License, Version 2\.0 (the "License"); you may not use this file except in compliance with the License\. You may obtain a copy of the License at http://www\.apache\.org/licenses/LICENSE\-2\.0 diff --git a/share/man/onezone.1 b/share/man/onezone.1 index df1d049446..a25d516379 100644 --- a/share/man/onezone.1 +++ b/share/man/onezone.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "ONEZONE" "1" "July 2011" "" "onezone(1) -- manages OpenNebula zones" +.TH "ONEZONE" "1" "September 2011" "" "onezone(1) -- manages OpenNebula zones" . .SH "NAME" \fBonezone\fR @@ -27,13 +27,31 @@ .SH "COMMANDS" . .IP "\(bu" 4 -show \fItext\fR [\fItext\fR] +create \fIfile\fR +. +.IP "" 4 +. +.nf + +Create a new Zone +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +show \fIzoneid\fR [\fIresource\fR] . .IP "" 4 . .nf Show information of a particular Zone +Available resources: host, vm, image, vn, template, user +Examples: + onezone show 4 + onezone show 4 host . .fi . @@ -68,38 +86,71 @@ Deletes a Zone . .IP "" 0 +. +.IP "" 0 +. +.SH "ARGUMENT FORMATS" . .IP "\(bu" 4 -create \fIfile\fR +file . .IP "" 4 . .nf -Create a new Zone +Path to a file +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +range +. +.IP "" 4 +. +.nf + +List of id\'s in the form 1,8\.\.15 +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +text +. +.IP "" 4 +. +.nf + +String +. +.fi +. +.IP "" 0 + +. +.IP "\(bu" 4 +zoneid +. +.IP "" 4 +. +.nf + +Zone ID . .fi . .IP "" 0 -. -.IP "" 0 -. -.SH "ARGUMENT FORMATS" -. -.IP "\(bu" 4 -file -. -.IP "\(bu" 4 -text -. -.IP "\(bu" 4 -range . .IP "" 0 . .SH "LICENSE" -OpenNebula 2\.9\.80 Copyright 2002\-2011, OpenNebula Project Leads (OpenNebula\.org) +OpenNebula 2\.9\.85 Copyright 2002\-2011, OpenNebula Project Leads (OpenNebula\.org) . .P Licensed under the Apache License, Version 2\.0 (the "License"); you may not use this file except in compliance with the License\. You may obtain a copy of the License at http://www\.apache\.org/licenses/LICENSE\-2\.0 From 79f6fad41d2b09f97c931ad97baed764de10894c Mon Sep 17 00:00:00 2001 From: Javi Fontan Date: Mon, 12 Sep 2011 16:15:59 +0200 Subject: [PATCH 17/31] bug #568: get network consumption from all interfaces (kvm) --- src/vmm_mad/remotes/poll_xen_kvm.rb | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/vmm_mad/remotes/poll_xen_kvm.rb b/src/vmm_mad/remotes/poll_xen_kvm.rb index 2be25119f3..2e39a24c88 100755 --- a/src/vmm_mad/remotes/poll_xen_kvm.rb +++ b/src/vmm_mad/remotes/poll_xen_kvm.rb @@ -138,17 +138,21 @@ private interfaces=get_interface_names(vmid) if interfaces && !interfaces.empty? - text=`#{virsh(:domifstat)} #{vmid} #{interfaces.join(' ')}` - values={} + values[:netrx]=0 + values[:nettx]=0 - text.each_line do |line| - columns=line.split(/\s+/) - case columns[1] - when 'rx_bytes' - values[:netrx]=columns[2] - when 'tx_bytes' - values[:nettx]=columns[2] + interfaces.each do |interface| + text=`#{virsh(:domifstat)} #{vmid} #{interface}` + + text.each_line do |line| + columns=line.split(/\s+/) + case columns[1] + when 'rx_bytes' + values[:netrx]+=columns[2].to_i + when 'tx_bytes' + values[:nettx]+=columns[2].to_i + end end end From ac71f33c15c2210a8be18cf3a958a00882f5ad10 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Thu, 8 Sep 2011 19:23:43 +0200 Subject: [PATCH 18/31] Sunstone: Fix some widths in create ACL dialog Affects the proper alignment of the deploy checkbox and the acl string preview field position. (cherry picked from commit e540743a3b26161092ceed215ef63e6bfeb90967) --- src/sunstone/public/js/plugins/acls-tab.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sunstone/public/js/plugins/acls-tab.js b/src/sunstone/public/js/plugins/acls-tab.js index d25e45dc49..d78f542fd4 100644 --- a/src/sunstone/public/js/plugins/acls-tab.js +++ b/src/sunstone/public/js/plugins/acls-tab.js @@ -65,7 +65,7 @@ var create_acl_tmpl = \ \
\ - \ + \ Create
\ Delete
\ Use
\ @@ -312,7 +312,7 @@ function setupCreateAclDialog(){ dialog.dialog({ autoOpen: false, modal:true, - width: 600, + width: 650, height: height }); From 591f761c69de9a7bb5e4a18c10438d7549c81af0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn?= Date: Mon, 12 Sep 2011 18:12:36 +0200 Subject: [PATCH 19/31] Bug #668: Change the LCM, the cancel action executes the epilog on success (cherry picked from commit 5b67dd2ebbe65142954c9e260aa9a2386b92384d) --- share/doc/states/states-complete.dot | 4 ++-- share/doc/states/states-simple.dot | 5 ++--- src/lcm/LifeCycleStates.cc | 25 +++++++++++++++---------- src/lcm/test/LifeCycleManagerTest.cc | 2 +- 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/share/doc/states/states-complete.dot b/share/doc/states/states-complete.dot index 2f80a2a1ff..9937c7a306 100644 --- a/share/doc/states/states-complete.dot +++ b/share/doc/states/states-complete.dot @@ -23,7 +23,7 @@ digraph OpenNebula { subgraph { rank = same; prolog; prolog_resume; prolog_migrate; color="white" } - subgraph { rank = max; suspended; done; cancel; failure; + subgraph { rank = max; suspended; done; failure; stopped;color="white" } # create @@ -64,7 +64,7 @@ digraph OpenNebula { # cancel running -> cancel [label="cancel"]; - cancel -> done [style="dashed"]; + cancel -> epilog [style="dashed"]; # suspend running -> save_suspend [label="suspend"]; diff --git a/share/doc/states/states-simple.dot b/share/doc/states/states-simple.dot index 12d4ddb8a6..21d37fb8b9 100644 --- a/share/doc/states/states-simple.dot +++ b/share/doc/states/states-simple.dot @@ -34,8 +34,8 @@ digraph OpenNebula { # shutdown running -> shutdown [label="shutdown"]; - shutdown -> epilog [label="shutdown", style="dashed"]; - epilog -> done [label="shutdown", style="dashed"]; + shutdown -> epilog [style="dashed"]; + epilog -> done [style="dashed"]; # livemigrate running -> migrate [label="livemigrate"]; @@ -59,7 +59,6 @@ digraph OpenNebula { # cancel running -> shutdown [label="cancel"]; - shutdown -> done [label="cancel", style="dashed"]; # suspend running -> save [label="suspend"]; diff --git a/src/lcm/LifeCycleStates.cc b/src/lcm/LifeCycleStates.cc index a57fe25c44..ac01274093 100644 --- a/src/lcm/LifeCycleStates.cc +++ b/src/lcm/LifeCycleStates.cc @@ -598,12 +598,10 @@ void LifeCycleManager::epilog_failure_action(int vid) void LifeCycleManager::cancel_success_action(int vid) { + Nebula& nd = Nebula::instance(); + TransferManager * tm = nd.get_tm(); VirtualMachine * vm; time_t the_time = time(0); - int cpu,mem,disk; - - Nebula& nd = Nebula::instance(); - DispatchManager * dm = nd.get_dm(); vm = vmpool->get(vid,true); @@ -612,20 +610,27 @@ void LifeCycleManager::cancel_success_action(int vid) return; } - vm->set_running_etime(the_time); - vm->set_etime(the_time); + //---------------------------------------------------- + // EPILOG STATE + //---------------------------------------------------- + + vm->set_state(VirtualMachine::EPILOG); + + vmpool->update(vm); vm->set_reason(History::CANCEL); + vm->set_epilog_stime(the_time); + + vm->set_running_etime(the_time); + vmpool->update_history(vm); - vm->get_requirements(cpu,mem,disk); - - hpool->del_capacity(vm->get_hid(),cpu,mem,disk); + vm->log("LCM", Log::INFO, "New VM state is EPILOG"); //---------------------------------------------------- - dm->trigger(DispatchManager::DONE,vid); + tm->trigger(TransferManager::EPILOG,vid); vm->unlock(); } diff --git a/src/lcm/test/LifeCycleManagerTest.cc b/src/lcm/test/LifeCycleManagerTest.cc index 414be71a67..c2d4386d2e 100644 --- a/src/lcm/test/LifeCycleManagerTest.cc +++ b/src/lcm/test/LifeCycleManagerTest.cc @@ -714,7 +714,7 @@ public: dm->cancel(vm->get_oid()); - wait_assert(vm, VirtualMachine::DONE); + wait_assert(vm, VirtualMachine::ACTIVE, VirtualMachine::EPILOG ); } /* -------------------------------------------------------------------------- */ From 2df1eabaa6d5b721dab4ade4e0f1074f0afeca34 Mon Sep 17 00:00:00 2001 From: Tino Vazquez Date: Mon, 12 Sep 2011 18:15:07 +0200 Subject: [PATCH 20/31] Remove duplicated JSONUtils file (cherry picked from commit c10b9630caca6fda9b991a29fcb76eb0e2a745bc) --- install.sh | 2 +- src/ozones/Server/models/JSONUtils.rb | 87 --------------------------- 2 files changed, 1 insertion(+), 88 deletions(-) delete mode 100644 src/ozones/Server/models/JSONUtils.rb diff --git a/install.sh b/install.sh index a2aada53ec..8a28e0d9cd 100755 --- a/install.sh +++ b/install.sh @@ -1033,7 +1033,7 @@ OZONES_ETC_FILES="src/ozones/Server/etc/ozones-server.conf" OZONES_MODELS_FILES="src/ozones/Server/models/OzonesServer.rb \ src/ozones/Server/models/Auth.rb \ src/ozones/Server/models/OCAInteraction.rb \ - src/ozones/Server/models/JSONUtils.rb" + src/sunstone/models/OpenNebulaJSON/JSONUtils.rb" OZONES_TEMPLATE_FILES="src/ozones/Server/templates/index.html \ src/ozones/Server/templates/login.html" diff --git a/src/ozones/Server/models/JSONUtils.rb b/src/ozones/Server/models/JSONUtils.rb deleted file mode 100644 index 85a23d9bb2..0000000000 --- a/src/ozones/Server/models/JSONUtils.rb +++ /dev/null @@ -1,87 +0,0 @@ -# -------------------------------------------------------------------------- # -# Copyright 2002-2011, OpenNebula Project Leads (OpenNebula.org) # -# # -# Licensed under the Apache License, Version 2.0 (the "License"); you may # -# not use this file except in compliance with the License. You may obtain # -# a copy of the License at # -# # -# http://www.apache.org/licenses/LICENSE-2.0 # -# # -# Unless required by applicable law or agreed to in writing, software # -# distributed under the License is distributed on an "AS IS" BASIS, # -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # -# See the License for the specific language governing permissions and # -# limitations under the License. # -#--------------------------------------------------------------------------- # - -require 'json' - -module JSONUtils - def to_json - begin - JSON.pretty_generate self.to_hash - rescue Exception => e - OpenNebula::Error.new(e.message) - end - end - - def parse_json(json_str, root_element) - begin - hash = JSON.parse(json_str) - rescue Exception => e - return OpenNebula::Error.new(e.message) - end - - if hash.has_key?(root_element) - return hash[root_element] - else - return OpenNebula::Error.new("Error parsing JSON: Wrong resource type") - end - end - - def template_to_str(attributes, indent=true) - if indent - ind_enter="\n" - ind_tab=' ' - else - ind_enter='' - ind_tab=' ' - end - - str=attributes.collect do |key, value| - if value - str_line="" - if value.class==Array && !value.empty? - value.each do |value2| - str_line << key.to_s.upcase << "=[" << ind_enter - if value2 && value2.class==Hash - str_line << value2.collect do |key3, value3| - str = ind_tab + key3.to_s.upcase + "=" - str += "\"#{value3.to_s}\"" if value3 - str - end.compact.join(",\n") - end - str_line << "\n]\n" - end - - elsif value.class==Hash && !value.empty? - str_line << key.to_s.upcase << "=[" << ind_enter - - str_line << value.collect do |key3, value3| - str = ind_tab + key3.to_s.upcase + "=" - str += "\"#{value3.to_s}\"" if value3 - str - end.compact.join(",\n") - - str_line << "\n]\n" - - else - str_line< Date: Mon, 12 Sep 2011 18:25:36 +0200 Subject: [PATCH 21/31] bug #803: added auth documentation to oned.conf --- share/etc/oned.conf | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/share/etc/oned.conf b/share/etc/oned.conf index 80d4b8690f..1f110b3b6d 100644 --- a/share/etc/oned.conf +++ b/share/etc/oned.conf @@ -538,17 +538,22 @@ HM_MAD = [ #******************************************************************************* # Auth Manager Configuration #******************************************************************************* -# The Driver (AUTHM_MAD) that will be used to authenticate and authorize -# OpenNebula requests. If not defined OpenNebula will use the built-in auth -# policies +# The Driver (AUTH_MAD) that will be used to authenticate (authn) and +# authorize (authz) OpenNebula requests. If defined OpenNebula will use the +# built-in auth policies. +# # executable: path of the auth driver executable, can be an # absolute path or relative to $ONE_LOCATION/lib/mads (or # /usr/lib/one/mads/ if OpenNebula was installed in /) # -# arguments : for the driver executable, can be an absolute path or relative -# to $ONE_LOCATION/etc (or /etc/one/ if OpenNebula was installed -# in /) +# arguments : +# --authn: list of authentication modules separated by commas, if not +# defined all the modules available will be enabled +# --authz: authorization module #------------------------------------------------------------------------------- #AUTH_MAD = [ -# executable = "one_auth_mad" ] +# executable = "one_auth_mad", +# arguments = "--authz quota --authn plain,ssh,x509" +#] + From 497821e1b1945c2ba72635dcf4b1e760439dcb62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn?= Date: Tue, 13 Sep 2011 12:14:36 +0200 Subject: [PATCH 22/31] Fix tests for onedb: ignore the Image SIZE element --- src/onedb/test/test.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/onedb/test/test.sh b/src/onedb/test/test.sh index 0a7cd2f9cf..5253b93cee 100755 --- a/src/onedb/test/test.sh +++ b/src/onedb/test/test.sh @@ -120,7 +120,7 @@ echo "XML output collected. A diff will be performed." mkdir results/diff_files diff <(grep -v -e "" -e "" -e "NAME>" results/xml_files/host-pool.xml) <(grep -v -e "" -e "" -e "NAME>" results/xml_files/host-pool-upgraded.xml) > results/diff_files/host-pool.diff -diff <(grep -v -e "" -e "" results/xml_files/image-pool.xml) <(grep -v -e "" -e "" results/xml_files/image-pool-upgraded.xml) > results/diff_files/image-pool.diff +diff <(grep -v -e "" -e "" -e "" results/xml_files/image-pool.xml) <(grep -v -e "" -e "" -e "" results/xml_files/image-pool-upgraded.xml) > results/diff_files/image-pool.diff diff <(grep -v -e "" -e "TIME>" -e "" -e "" -e "" results/xml_files/vm-pool.xml) <(grep -v -e "" -e "TIME>" -e "" -e "" -e "" results/xml_files/vm-pool-upgraded.xml) > results/diff_files/vm-pool.diff for obj in vnet acl group user; do @@ -132,7 +132,7 @@ for i in 0 1 2 3 4; do diff <(cat results/xml_files/vnet-$i.xml) <(cat results/xml_files/vnet-$i-upgraded.xml) > results/diff_files/vnet-$i.diff - diff <(grep -v -e "" -e "" results/xml_files/image-$i.xml) <(grep -v -e "" -e "" results/xml_files/image-$i-upgraded.xml) > results/diff_files/image-$i.diff + diff <(grep -v -e "" -e "" -e "" results/xml_files/image-$i.xml) <(grep -v -e "" -e "" -e "" results/xml_files/image-$i-upgraded.xml) > results/diff_files/image-$i.diff diff <(grep -v -e "" -e "TIME>" -e "" -e "" -e "" -e "" results/xml_files/vm-$i.xml) <(grep -v -e "" -e "TIME>" -e "" -e "" -e "" -e "" results/xml_files/vm-$i-upgraded.xml) > results/diff_files/vm-$i.diff From 06ab68f306bbe2fb8369ebc880331a1f14ed3287 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn?= Date: Tue, 13 Sep 2011 13:02:10 +0200 Subject: [PATCH 23/31] Feature #788: Fix ImagePoolTest, adding SIZE element --- src/image/test/ImagePoolTest.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/image/test/ImagePoolTest.cc b/src/image/test/ImagePoolTest.cc index 78a353f766..002736709a 100644 --- a/src/image/test/ImagePoolTest.cc +++ b/src/image/test/ImagePoolTest.cc @@ -53,19 +53,19 @@ const string templates[] = const string xmls[] = { - "001oneoneadminImage one0010000000000-40", + "001oneoneadminImage one0010000000000-040", - "111twooneadminSecond Image0100000000000-40", + "111twooneadminSecond Image0100000000000-040", - "021threeusersThe third image0000000000000-40" + "021threeusersThe third image0000000000000-040" }; // This xml dump result has the STIMEs modified to 0000000000 const string xml_dump = -"001oneoneadminImage one0010000000000-40111twooneadminSecond Image0100000000000-40221threeusersThe third image0000000000000-40"; +"001oneoneadminImage one0010000000000-040111twooneadminSecond Image0100000000000-040221threeusersThe third image0000000000000-040"; const string xml_dump_where = -"001oneoneadminImage one0010000000000-40111twooneadminSecond Image0100000000000-40"; +"001oneoneadminImage one0010000000000-040111twooneadminSecond Image0100000000000-040"; /* ************************************************************************* */ /* ************************************************************************* */ From 6d42518b9011b81b6bc0b4d5b73adbb7d87f4773 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn?= Date: Tue, 13 Sep 2011 13:10:48 +0200 Subject: [PATCH 24/31] Bug #797: Fix UserPoolTest, spaces in names or password are no longer allowed --- src/um/test/UserPoolTest.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/um/test/UserPoolTest.cc b/src/um/test/UserPoolTest.cc index 3e38e73ece..8012cbacdc 100644 --- a/src/um/test/UserPoolTest.cc +++ b/src/um/test/UserPoolTest.cc @@ -27,8 +27,8 @@ using namespace std; /* ************************************************************************* */ /* ************************************************************************* */ -const string usernames[] = { "A user", "B user", "C user", "D user", "E user" }; -const string passwords[] = { "A pass", "B pass", "C pass", "D pass", "E pass" }; +const string usernames[] = { "A_user", "B_user", "C_user", "D_user", "E_user" }; +const string passwords[] = { "A_pass", "B_pass", "C_pass", "D_pass", "E_pass" }; const string dump_result = "00oneadminone_user_test5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8110oneadminap120oneadmina namepass130oneadmina_namepassword140oneadminanother namesecret150oneadminuser12341"; From 7d0ac75b0f873e17088c5aa3fd23e8e3cb6e7c0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn?= Date: Tue, 13 Sep 2011 14:58:38 +0200 Subject: [PATCH 25/31] Bug #477: Fix AuthManagerTest, now the authorization errors are more vebose --- src/authm/test/AuthManagerTest.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/authm/test/AuthManagerTest.cc b/src/authm/test/AuthManagerTest.cc index 3e0c871148..f23358069b 100644 --- a/src/authm/test/AuthManagerTest.cc +++ b/src/authm/test/AuthManagerTest.cc @@ -220,14 +220,14 @@ public: cout << endl << "ar.result: " << ar.result << endl; } - if ( ar.message != astr ) + if ( ar.message.find(astr) == ar.message.npos ) { cout << endl << "ar.message: " << ar.message; cout << endl << "expected: " << astr << endl; } //*/ CPPUNIT_ASSERT(ar.result==false); - CPPUNIT_ASSERT(ar.message==astr); + CPPUNIT_ASSERT(ar.message.find(astr) != ar.message.npos); AuthRequest ar1(2, 2); @@ -248,14 +248,14 @@ public: cout << endl << "ar.result: " << ar1.result << endl; } - if ( ar1.message != astr1 ) + if ( ar1.message.find(astr1) == ar1.message.npos ) { cout << endl << "ar.message: " << ar1.message; cout << endl << "expected: " << astr1 << endl; } //*/ CPPUNIT_ASSERT(ar1.result==false); - CPPUNIT_ASSERT(ar1.message==astr1); + CPPUNIT_ASSERT(ar1.message.find(astr1) != ar1.message.npos); AuthRequest ar2(2, 2); From dfac4dcba1d116d61693f638256319e9eb89bbe1 Mon Sep 17 00:00:00 2001 From: Javi Fontan Date: Tue, 13 Sep 2011 16:31:43 +0200 Subject: [PATCH 26/31] nokogiri and xmlparser dependencies swapped in install_gems (cherry picked from commit 90cbbd621518d46160705c8b09d8ccc6da99ea51) --- share/install_gems/install_gems | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/share/install_gems/install_gems b/share/install_gems/install_gems index 3a9219d4be..0574ec5760 100755 --- a/share/install_gems/install_gems +++ b/share/install_gems/install_gems @@ -36,8 +36,8 @@ DISTRIBUTIONS={ SQLITE => ['gcc', 'libsqlite3-dev'], 'mysql' => ['gcc', 'libmysqlclient-dev'], 'curb' => ['gcc', 'libcurl4-openssl-dev'], - 'nokogiri' => ['gcc', 'libexpat1-dev'], - 'xmlparser' => %w{gcc rake libxml2-dev libxslt1-dev}, + 'nokogiri' => %w{gcc rake libxml2-dev libxslt1-dev}, + 'xmlparser' => ['gcc', 'libexpat1-dev'], 'thin' => ['g++'] }, :install_command => 'apt-get install' @@ -48,8 +48,8 @@ DISTRIBUTIONS={ SQLITE => ['gcc', 'sqlite-devel'], 'mysql' => ['gcc', 'mysql-devel'], 'curb' => ['gcc', 'curl-devel'], - 'nokogiri' => ['gcc', 'expat-devel'], - 'xmlparser' => %w{gcc rubygem-rake libxml2-devel libxslt-devel}, + 'nokogiri' => %w{gcc rubygem-rake libxml2-devel libxslt-devel}, + 'xmlparser' => ['gcc', 'expat-devel'], 'thin' => ['gcc-c++'] }, :install_command => 'yum install' @@ -60,8 +60,8 @@ DISTRIBUTIONS={ SQLITE => ['gcc', 'sqlite3-devel'], 'mysql' => ['gcc', 'libmysqlclient-devel'], 'curb' => ['gcc', 'libcurl-devel'], - 'nokogiri' => ['gcc', 'libexpat-devel'], - 'xmlparser' => %w{rubygem-rake gcc rubygem-rake libxml2-devel libxslt-devel}, + 'nokogiri' => %w{rubygem-rake gcc rubygem-rake libxml2-devel libxslt-devel}, + 'xmlparser' => ['gcc', 'libexpat-devel'], 'thin' => ['rubygem-rake', 'gcc-c++'] }, :install_command => 'zypper install' From 60584602847a53c87d3d81a5897ef7d4469b5a6a Mon Sep 17 00:00:00 2001 From: Javi Fontan Date: Tue, 13 Sep 2011 16:33:15 +0200 Subject: [PATCH 27/31] bug #800: added rake path in debian based distros (cherry picked from commit 404844786c3731d41cc98e4f56598402949aa1c7) --- share/install_gems/install_gems | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/share/install_gems/install_gems b/share/install_gems/install_gems index 0574ec5760..8b6758a803 100755 --- a/share/install_gems/install_gems +++ b/share/install_gems/install_gems @@ -40,7 +40,10 @@ DISTRIBUTIONS={ 'xmlparser' => ['gcc', 'libexpat1-dev'], 'thin' => ['g++'] }, - :install_command => 'apt-get install' + :install_command => 'apt-get install', + :gem_env => { + 'rake' => '/usr/bin/rake' + } }, :redhat => { :id => ['CentOS', /^RedHat/], @@ -235,8 +238,15 @@ install_dependencies(gems_list, dist) packages_string=gems_list.join(' ') +prefix="" -command_string = "gem install --no-ri --no-rdoc" +if dist.last[:gem_env] + prefix=dist.last[:gem_env].collect do |name, value| + "#{name}=\"#{value}\"" + end.join(' ')+' ' +end + +command_string = "#{prefix}gem install --no-ri --no-rdoc" install_warning(packages) From f2a45ed13988a6f00fb42c878d5414610da978ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn?= Date: Tue, 13 Sep 2011 17:50:45 +0200 Subject: [PATCH 28/31] Bugs #797, #485: Add invalid character checks to user names, add invalid char ':' --- include/User.h | 37 ++++++++++++++++++++++++++++-------- src/rm/RequestManagerUser.cc | 6 +----- src/um/User.cc | 2 +- src/um/UserPool.cc | 8 ++++---- src/um/test/UserPoolTest.cc | 8 ++++---- 5 files changed, 39 insertions(+), 22 deletions(-) diff --git a/include/User.h b/include/User.h index 35050850f3..c78ed283f6 100644 --- a/include/User.h +++ b/include/User.h @@ -34,7 +34,7 @@ public: /** * Characters that can not be in a password */ - static const string NO_PASSWD_CHARS; + static const string INVALID_CHARS; /** * Function to print the User object into a string in XML format @@ -78,31 +78,52 @@ public: }; /** - * Checks if a password is valid. - * @param passwd to be checked - * @return true if the password is valid + * Checks if a name or password is valid, i.e. it is not empty and does not + * contain invalid characters. + * @param str Name or password to be checked + * @param error_str Returns the error reason, if any + * @return true if the string is valid */ - static bool is_valid_password(const string& passwd) + static bool is_valid(const string& str, string& error_str) { - return passwd.find_first_of(NO_PASSWD_CHARS) == string::npos; + if ( str.empty() ) + { + error_str = "cannot be empty"; + return false; + } + + size_t pos = str.find_first_of(INVALID_CHARS); + + if ( pos != string::npos ) + { + ostringstream oss; + oss << "character '" << str.at(pos) << "' is not allowed"; + + error_str = oss.str(); + return false; + } + + return true; } /** * Sets user password. It checks that the new password does not contain * forbidden chars. * @param _password the new pass + * @param error_str Returns the error reason, if any * @returns -1 if the password is not valid */ - int set_password(const string& passwd) + int set_password(const string& passwd, string& error_str) { int rc = 0; - if (is_valid_password(passwd)) + if (is_valid(passwd, error_str)) { password = passwd; } else { + error_str = string("Invalid password: ").append(error_str); rc = -1; } diff --git a/src/rm/RequestManagerUser.cc b/src/rm/RequestManagerUser.cc index 663a091c41..2dcb17401d 100644 --- a/src/rm/RequestManagerUser.cc +++ b/src/rm/RequestManagerUser.cc @@ -61,16 +61,12 @@ int UserChangePassword::user_action(User * user, string new_pass = xmlrpc_c::value_string(paramList.getString(2)); - int rc = user->set_password(new_pass); + int rc = user->set_password(new_pass, error_str); if ( rc == 0 ) { pool->update(user); } - else - { - error_str = "Invalid password, it can not contain spaces."; - } user->unlock(); diff --git a/src/um/User.cc b/src/um/User.cc index 71837e68de..71b2d4cd28 100644 --- a/src/um/User.cc +++ b/src/um/User.cc @@ -27,7 +27,7 @@ #include "Group.h" -const string User::NO_PASSWD_CHARS = " \t\n\v\f\r"; +const string User::INVALID_CHARS = " :\t\n\v\f\r"; /* ************************************************************************** */ /* User :: Database Access Functions */ diff --git a/src/um/UserPool.cc b/src/um/UserPool.cc index 73bf9ddb98..f2ba70a7a7 100644 --- a/src/um/UserPool.cc +++ b/src/um/UserPool.cc @@ -136,12 +136,12 @@ int UserPool::allocate ( ostringstream oss; - if (password.empty() || !User::is_valid_password(password)) + if ( !User::is_valid(password, error_str) ) { goto error_pass; } - if ( uname.empty() ) + if ( !User::is_valid(uname, error_str) ) { goto error_name; } @@ -182,11 +182,11 @@ int UserPool::allocate ( return *oid; error_pass: - oss << "Invalid password, it can not contain spaces."; + oss << "Invalid password, " << error_str << "."; goto error_common; error_name: - oss << "NAME cannot be empty."; + oss << "Invalid NAME, " << error_str << "."; goto error_common; error_duplicated: diff --git a/src/um/test/UserPoolTest.cc b/src/um/test/UserPoolTest.cc index 8012cbacdc..09be4b1588 100644 --- a/src/um/test/UserPoolTest.cc +++ b/src/um/test/UserPoolTest.cc @@ -31,10 +31,10 @@ const string usernames[] = { "A_user", "B_user", "C_user", "D_user", "E_user" }; const string passwords[] = { "A_pass", "B_pass", "C_pass", "D_pass", "E_pass" }; const string dump_result = - "00oneadminone_user_test5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8110oneadminap120oneadmina namepass130oneadmina_namepassword140oneadminanother namesecret150oneadminuser12341"; + "00oneadminone_user_test5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8110oneadminap120oneadmina_namepass130oneadmina_name_2password140oneadminanother_namesecret150oneadminuser12341"; const string dump_where_result = - "10oneadminap120oneadmina namepass130oneadmina_namepassword140oneadminanother namesecret1"; + "10oneadminap120oneadmina_namepass130oneadmina_name_2password140oneadminanother_namesecret1"; #include "NebulaTest.h" @@ -313,7 +313,7 @@ public: void dump() { - string d_names[] = {"a", "a name", "a_name", "another name", "user"}; + string d_names[] = {"a", "a_name", "a_name_2", "another_name", "user"}; string d_pass[] = {"p", "pass", "password", "secret", "1234"}; int oid; @@ -340,7 +340,7 @@ public: void dump_where() { - string d_names[] = {"a", "a name", "a_name", "another name", "user"}; + string d_names[] = {"a", "a_name", "a_name_2", "another_name", "user"}; string d_pass[] = {"p", "pass", "password", "secret", "1234"}; int oid; From 1ff5ae0f0ec836f0afb362da6717c62703b841f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn?= Date: Tue, 13 Sep 2011 19:17:12 +0200 Subject: [PATCH 29/31] Bug #806: Fix rc variable initialization in ImagePool::disk_attribute --- src/image/ImagePool.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/image/ImagePool.cc b/src/image/ImagePool.cc index bafdfd4abb..69931e6798 100644 --- a/src/image/ImagePool.cc +++ b/src/image/ImagePool.cc @@ -135,7 +135,7 @@ int ImagePool::disk_attribute(VectorAttribute * disk, { string source; Image * img = 0; - int rc; + int rc = 0; ostringstream oss; From 1a864ef3f13397e4a7938e34bc3c0ce520c1f5f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn?= Date: Wed, 14 Sep 2011 12:27:08 +0200 Subject: [PATCH 30/31] Fix oca incompatibility with ruby 1.8.5 --- src/oca/ruby/OpenNebula/Group.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/oca/ruby/OpenNebula/Group.rb b/src/oca/ruby/OpenNebula/Group.rb index 5ec9c2f1e7..98c359ed3a 100644 --- a/src/oca/ruby/OpenNebula/Group.rb +++ b/src/oca/ruby/OpenNebula/Group.rb @@ -127,7 +127,11 @@ module OpenNebula # Returns whether or not the user with id 'uid' is part of this group def contains(uid) - return self["USERS/ID[.=#{uid}]"] != nil + # This doesn't work in ruby 1.8.5 +# return self["USERS/ID[.=#{uid}]"] != nil + + id_array = retrieve_elements('USERS/ID') + return id_array != nil && id_array.include?(uid.to_s) end # Returns an array with the numeric user ids From d37f19638e6cc1dd3262868d8b30f4ffb7da8b6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn?= Date: Wed, 14 Sep 2011 17:05:27 +0200 Subject: [PATCH 31/31] Add new Image unit test, and fix segfault problems --- src/image/test/ImagePoolTest.cc | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/image/test/ImagePoolTest.cc b/src/image/test/ImagePoolTest.cc index 002736709a..6ec2480186 100644 --- a/src/image/test/ImagePoolTest.cc +++ b/src/image/test/ImagePoolTest.cc @@ -146,10 +146,7 @@ class ImagePoolTest : public PoolTest CPPUNIT_TEST ( bus_source_assignment ); CPPUNIT_TEST ( public_attribute ); CPPUNIT_TEST ( persistence ); - -// Requires ImageManger, and NebulaTest -// CPPUNIT_TEST ( imagepool_disk_attribute ); - + CPPUNIT_TEST ( imagepool_disk_attribute ); CPPUNIT_TEST ( dump ); CPPUNIT_TEST ( dump_where ); @@ -159,6 +156,7 @@ protected: NebulaTestImage * tester; ImagePool * ipool; + ImageManager * imagem; void bootstrap(SqlDB* db) { @@ -217,12 +215,23 @@ public: neb.start(); ipool = neb.get_ipool(); + imagem = neb.get_imagem(); pool = ipool; }; void tearDown() { + // ----------------------------------------------------------- + // Stop the managers & free resources + // ----------------------------------------------------------- + + imagem->finalize(); + pthread_join(imagem->get_thread_id(),0); + + //XML Library + xmlCleanupParser(); + delete_db(); delete tester; @@ -614,7 +623,7 @@ public: // Disk using image 0 disk = new VectorAttribute("DISK"); - disk->replace("IMAGE", "Image 0"); + disk->replace("IMAGE_ID", "0"); ((ImagePool*)imp)->disk_attribute(disk, 0, &index, &img_type,0); @@ -622,9 +631,6 @@ public: value = disk->vector_value("TARGET"); CPPUNIT_ASSERT( value == "hda" ); - value = ""; - value = disk->vector_value("IMAGE_ID"); - CPPUNIT_ASSERT( value == "0" ); delete disk;
\
\ diff --git a/src/sunstone/public/js/plugins/hosts-tab.js b/src/sunstone/public/js/plugins/hosts-tab.js index cbe5aa87c2..497e585f61 100644 --- a/src/sunstone/public/js/plugins/hosts-tab.js +++ b/src/sunstone/public/js/plugins/hosts-tab.js @@ -594,6 +594,7 @@ $(document).ready(function(){ { "bSortable": false, "aTargets": ["check"] }, { "sWidth": "60px", "aTargets": [0,3] }, { "sWidth": "35px", "aTargets": [1] }, + { "sWidth": "100px", "aTargets": [6] }, { "sWidth": "200px", "aTargets": [4,5] } ] }); diff --git a/src/sunstone/public/js/plugins/images-tab.js b/src/sunstone/public/js/plugins/images-tab.js index 158e8a97e7..d47357002e 100644 --- a/src/sunstone/public/js/plugins/images-tab.js +++ b/src/sunstone/public/js/plugins/images-tab.js @@ -32,7 +32,7 @@ var images_tab_content =
Registration timePublicPersistentStateStatus#VMS
NameTypeBridgePublic?PublicTotal Leases