diff --git a/src/cli/one_helper.rb b/src/cli/one_helper.rb index c1df997153..385ff926a6 100644 --- a/src/cli/one_helper.rb +++ b/src/cli/one_helper.rb @@ -67,6 +67,13 @@ EOT :description => "Describe list columns" } + APPEND = { + :name => "append", + :short => "-a", + :large => "--append", + :description => "Append new attributes to the current template" + } + # Command line VM template options TEMPLATE_NAME_VM={ :name => 'name', @@ -655,22 +662,32 @@ EOT end def OpenNebulaHelper.update_template(id, resource, path=nil, xpath='TEMPLATE') + return update_template_helper(false, id, resource, path=nil, xpath='TEMPLATE') + end + + def OpenNebulaHelper.append_template(id, resource, path=nil, xpath='TEMPLATE') + return update_template_helper(true, id, resource, path=nil, xpath='TEMPLATE') + end + + def OpenNebulaHelper.update_template_helper(append, id, resource, path=nil, xpath='TEMPLATE') unless path require 'tempfile' tmp = Tempfile.new(id.to_s) path = tmp.path - rc = resource.info + if !append + rc = resource.info - if OpenNebula.is_error?(rc) - puts rc.message - exit -1 + if OpenNebula.is_error?(rc) + puts rc.message + exit -1 + end + + tmp << resource.template_like_str(xpath) + tmp.flush end - tmp << resource.template_like_str(xpath) - tmp.flush - editor_path = ENV["EDITOR"] ? ENV["EDITOR"] : EDITOR_PATH system("#{editor_path} #{path}") diff --git a/src/cli/onecluster b/src/cli/onecluster index 11ddb04bd9..4e61e09e09 100755 --- a/src/cli/onecluster +++ b/src/cli/onecluster @@ -185,10 +185,16 @@ cmd=CommandParser::CmdParser.new(ARGV) do be launched to modify the current content. EOT - command :update, update_desc, :clusterid, [:file, nil] do + command :update, update_desc, :clusterid, [:file, nil], + :options=>OpenNebulaHelper::APPEND do helper.perform_action(args[0],options,"modified") do |obj| - str = OpenNebulaHelper.update_template(args[0], obj, args[1]) - obj.update(str) + if options[:append] + str = OpenNebulaHelper.append_template(args[0], obj, args[1]) + else + str = OpenNebulaHelper.update_template(args[0], obj, args[1]) + end + + obj.update(str, options[:append]) end end end diff --git a/src/cli/onedatastore b/src/cli/onedatastore index 5f23224acf..77e4c4b2c2 100755 --- a/src/cli/onedatastore +++ b/src/cli/onedatastore @@ -162,10 +162,16 @@ cmd=CommandParser::CmdParser.new(ARGV) do be launched to modify the current content. EOT - command :update, update_desc, :datastoreid, [:file, nil] do + command :update, update_desc, :datastoreid, [:file, nil], + :options=>OpenNebulaHelper::APPEND do helper.perform_action(args[0],options,"modified") do |obj| - str = OpenNebulaHelper.update_template(args[0], obj, args[1]) - obj.update(str) + if options[:append] + str = OpenNebulaHelper.append_template(args[0], obj, args[1]) + else + str = OpenNebulaHelper.update_template(args[0], obj, args[1]) + end + + obj.update(str, options[:append]) end end end diff --git a/src/cli/onehost b/src/cli/onehost index b49ad5ed39..9c9a4d9463 100755 --- a/src/cli/onehost +++ b/src/cli/onehost @@ -148,10 +148,16 @@ cmd=CommandParser::CmdParser.new(ARGV) do be launched to modify the current content. EOT - command :update, update_desc, :hostid, [:file, nil] do - helper.perform_action(args[0],options,"updated") do |host| - str = OpenNebulaHelper.update_template(args[0], host, args[1]) - host.update(str) + command :update, update_desc, :hostid, [:file, nil], + :options=>OpenNebulaHelper::APPEND do + helper.perform_action(args[0],options,"updated") do |obj| + if options[:append] + str = OpenNebulaHelper.append_template(args[0], obj, args[1]) + else + str = OpenNebulaHelper.update_template(args[0], obj, args[1]) + end + + obj.update(str, options[:append]) end end diff --git a/src/cli/oneimage b/src/cli/oneimage index 59a19b56c8..838abb9bd4 100755 --- a/src/cli/oneimage +++ b/src/cli/oneimage @@ -212,10 +212,16 @@ cmd=CommandParser::CmdParser.new(ARGV) do be launched to modify the current content. EOT - command :update, update_desc, :imageid, [:file, nil] do - helper.perform_action(args[0],options,"modified") do |image| - str = OpenNebulaHelper.update_template(args[0], image, args[1]) - image.update(str) + command :update, update_desc, :imageid, [:file, nil], + :options=>OpenNebulaHelper::APPEND do + helper.perform_action(args[0],options,"modified") do |obj| + if options[:append] + str = OpenNebulaHelper.append_template(args[0], obj, args[1]) + else + str = OpenNebulaHelper.update_template(args[0], obj, args[1]) + end + + obj.update(str, options[:append]) end end diff --git a/src/cli/onetemplate b/src/cli/onetemplate index db7153058a..e887cf9882 100755 --- a/src/cli/onetemplate +++ b/src/cli/onetemplate @@ -259,10 +259,16 @@ cmd=CommandParser::CmdParser.new(ARGV) do be launched to modify the current content. EOT - command :update, update_desc, :templateid, [:file, nil] do - helper.perform_action(args[0],options,"modified") do |template| - str = OpenNebulaHelper.update_template(args[0], template, args[1]) - template.update(str) + command :update, update_desc, :templateid, [:file, nil], + :options=>OpenNebulaHelper::APPEND do + helper.perform_action(args[0],options,"modified") do |obj| + if options[:append] + str = OpenNebulaHelper.append_template(args[0], obj, args[1]) + else + str = OpenNebulaHelper.update_template(args[0], obj, args[1]) + end + + obj.update(str, options[:append]) end end diff --git a/src/cli/oneuser b/src/cli/oneuser index 1e929d3492..96aa91f0e5 100755 --- a/src/cli/oneuser +++ b/src/cli/oneuser @@ -192,10 +192,16 @@ cmd=CommandParser::CmdParser.new(ARGV) do be launched to modify the current content. EOT - command :update, update_desc, :userid, [:file, nil] do - helper.perform_action(args[0],options,"modified") do |user| - str = OpenNebulaHelper.update_template(args[0], user, args[1]) - user.update(str) + command :update, update_desc, :userid, [:file, nil], + :options=>OpenNebulaHelper::APPEND do + helper.perform_action(args[0],options,"modified") do |obj| + if options[:append] + str = OpenNebulaHelper.append_template(args[0], obj, args[1]) + else + str = OpenNebulaHelper.update_template(args[0], obj, args[1]) + end + + obj.update(str, options[:append]) end end diff --git a/src/cli/onevm b/src/cli/onevm index 1258d8a749..bf6c4dd074 100755 --- a/src/cli/onevm +++ b/src/cli/onevm @@ -208,11 +208,16 @@ cmd=CommandParser::CmdParser.new(ARGV) do editor will be launched to modify the current content. EOT - command :update, update_desc, :vmid, [:file, nil] do - helper.perform_action(args[0],options,"modified") do |vm| - str = OpenNebulaHelper.update_template(args[0], vm, args[1], - 'USER_TEMPLATE') - vm.update(str) + command :update, update_desc, :vmid, [:file, nil], + :options=>OpenNebulaHelper::APPEND do + helper.perform_action(args[0],options,"modified") do |obj| + if options[:append] + str = OpenNebulaHelper.append_template(args[0], obj, args[1], 'USER_TEMPLATE') + else + str = OpenNebulaHelper.update_template(args[0], obj, args[1], 'USER_TEMPLATE') + end + + obj.update(str, options[:append]) end end diff --git a/src/cli/onevnet b/src/cli/onevnet index 84d64ea7b8..d7e4ce017a 100755 --- a/src/cli/onevnet +++ b/src/cli/onevnet @@ -199,10 +199,16 @@ cmd=CommandParser::CmdParser.new(ARGV) do be launched to modify the current content. EOT - command :update, update_desc, :vnetid, [:file, nil] do - helper.perform_action(args[0],options,"modified") do |vnet| - str = OpenNebulaHelper.update_template(args[0], vnet, args[1]) - vnet.update(str) + command :update, update_desc, :vnetid, [:file, nil], + :options=>OpenNebulaHelper::APPEND do + helper.perform_action(args[0],options,"modified") do |obj| + if options[:append] + str = OpenNebulaHelper.append_template(args[0], obj, args[1]) + else + str = OpenNebulaHelper.update_template(args[0], obj, args[1]) + end + + obj.update(str, options[:append]) end end