From fb58d090d080503c6677425456691f7b2a71b427 Mon Sep 17 00:00:00 2001 From: Javi Fontan Date: Mon, 26 Jul 2010 15:00:25 +0200 Subject: [PATCH 1/5] made CLI option parsing more modular --- src/cli/command_parse.rb | 104 +++++++++++++++++++++++++-------------- 1 file changed, 66 insertions(+), 38 deletions(-) diff --git a/src/cli/command_parse.rb b/src/cli/command_parse.rb index b86f5a1685..f3f55ee4cd 100644 --- a/src/cli/command_parse.rb +++ b/src/cli/command_parse.rb @@ -35,53 +35,25 @@ OpenNebula 1.5.0 Copyright 2002-2010, OpenNebula Project Leads (OpenNebula.org) EOT - def initialize + def initialize(standard_options=nil) @options=Hash.new - + if standard_options + @standard_options=standard_options + else + @standard_options=[:list, :top, :xml] + end + @cmdparse=OptionParser.new do |opts| opts.banner=text_banner - opts.on("-l x,y,z", "--list x,y,z", Array, - "Selects columns to display with list", "command") do |o| - @options[:list]=o.collect {|c| c.to_sym } - end + execute_standard_options(opts, @options) + special_options(opts, @options) - opts.on("--list-columns", "Information about the columns available", - "to display, order or filter") do |o| - puts list_options - exit - end - - opts.on("-o x,y,z", "--order x,y,z", Array, - "Order by these columns, column starting", - "with - means decreasing order") do |o| - @options[:order]=o - end - - opts.on("-f x,y,z", "--filter x,y,z", Array, - "Filter data. An array is specified", "with column=value pairs.") do |o| - @options[:filter]=Hash.new - o.each {|i| - k,v=i.split('=') - @options[:filter][k]=v - } - end - - opts.on("-d seconds", "--delay seconds", Integer, - "Sets the delay in seconds for top", "command") do |o| - @options[:delay]=o - end - - opts.on("-v", "--verbose", + opts.on("-v", "--verbose", "Tells more information if the command", "is successful") do |o| @options[:verbose]=true end - - opts.on("-x", "--xml", - "Returns xml instead of human readable text") do |o| - @options[:xml]=true - end opts.on_tail("-h", "--help", "Shows this help message") do |o| print_help @@ -105,6 +77,62 @@ EOT end end + def opts_list(opts, options) + opts.on("-l x,y,z", "--list x,y,z", Array, + "Selects columns to display with list", "command") do |o| + options[:list]=o.collect {|c| c.to_sym } + end + + opts.on("--list-columns", "Information about the columns available", + "to display, order or filter") do |o| + puts list_options + exit + end + + opts.on("-o x,y,z", "--order x,y,z", Array, + "Order by these columns, column starting", + "with - means decreasing order") do |o| + options[:order]=o + end + + opts.on("-f x,y,z", "--filter x,y,z", Array, + "Filter data. An array is specified", "with column=value pairs.") do |o| + options[:filter]=Hash.new + o.each {|i| + k,v=i.split('=') + options[:filter][k]=v + } + end + end + + def opts_top(opts, options) + opts.on("-d seconds", "--delay seconds", Integer, + "Sets the delay in seconds for top", "command") do |o| + options[:delay]=o + end + end + + def opts_xml(opts, options) + opts.on("-x", "--xml", + "Returns xml instead of human readable text") do |o| + options[:xml]=true + end + end + + def set_standard_options(options) + @standard_options=options + end + + def execute_standard_options(opts, options) + @standard_options.each do |op| + sym="opts_#{op}".to_sym + self.send(sym, opts, options) if self.respond_to?(sym) + end + end + + def special_options(opts, options) + end + def options @options end From 239ed2493c3393dd205df574be77289e5577426e Mon Sep 17 00:00:00 2001 From: Javi Fontan Date: Mon, 26 Jul 2010 15:02:36 +0200 Subject: [PATCH 2/5] cleaned options and added --no-hash to oneuser --- src/cli/oneuser | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/cli/oneuser b/src/cli/oneuser index 576a5ee918..5802dac6b6 100755 --- a/src/cli/oneuser +++ b/src/cli/oneuser @@ -120,10 +120,16 @@ EOT table=ShowTable.new(ShowTableUP) table.print_help end - + + def special_options(opts, options) + opts.on_tail("-n", "--no-hash", "Store plain password "<< + "into the database") do |o| + options[:no_hash]=true + end + end end -oneup_opts=OneUPParse.new +oneup_opts=OneUPParse.new([:list]) oneup_opts.parse(ARGV) ops=oneup_opts.options @@ -136,8 +142,12 @@ when "create" check_parameters("create", 2) user=OpenNebula::User.new( OpenNebula::User.build_xml, get_one_client) - sha_password = Digest::SHA1.hexdigest(ARGV[1]) - result=user.allocate(ARGV[0],sha_password) + if ops[:no_hash] + sha_password = ARGV[1] + else + sha_password = Digest::SHA1.hexdigest(ARGV[1]) + end + result=user.allocate(ARGV[0], sha_password) if !OpenNebula.is_error?(result) puts "ID: " + user.id.to_s if ops[:verbose] exit 0 From e62649ade4615b94c1d2409b39ed5566fb2aac99 Mon Sep 17 00:00:00 2001 From: Jaime Melis Date: Mon, 26 Jul 2010 15:05:18 +0200 Subject: [PATCH 3/5] Removed save command in onevm --- src/cli/onevm | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/src/cli/onevm b/src/cli/onevm index 73b49d3efe..fe65eb59f9 100755 --- a/src/cli/onevm +++ b/src/cli/onevm @@ -347,10 +347,6 @@ Commands: when the vm shutdowns) onevm saveas -* save (Set the specified vm's disk to be saved, overwriting the original image - when the vm shutdowns) - onevm save - * delete (Deletes a VM from the pool and DB) onevm delete @@ -733,26 +729,6 @@ when "saveas" result = vm.save_as(disk_id.to_i, image.id) -when "save" - check_parameters("save", 2) - vm_id = get_vm_id(ARGV[0]) - disk_id = ARGV[1] - - # Get the Image ID for this disk - vm = OpenNebula::VirtualMachine.new( - OpenNebula::VirtualMachine.build_xml(vm_id), - get_one_client) - - result = vm.info - if !is_successful?(result) - puts result.message - exit -1 - end - - image_id = vm["TEMPLATE/DISK[DISK_ID=\"#{disk_id}\"]/IMAGE_ID"] - - result = vm.save_as(disk_id.to_i, image_id.to_i) - when "show" check_parameters("get_info", 1) args=expand_args(ARGV) From fa440daec269c70543183de3b6b5e29ba4ef67ec Mon Sep 17 00:00:00 2001 From: Javi Fontan Date: Mon, 26 Jul 2010 15:12:36 +0200 Subject: [PATCH 4/5] clean options for onecluster and onevnet --- src/cli/onecluster | 2 +- src/cli/onevnet | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cli/onecluster b/src/cli/onecluster index ac829ab454..933073bb4f 100755 --- a/src/cli/onecluster +++ b/src/cli/onecluster @@ -122,7 +122,7 @@ EOT end -oneup_opts=OneUPParse.new +oneup_opts=OneUPParse.new([:list, :xml]) oneup_opts.parse(ARGV) ops=oneup_opts.options diff --git a/src/cli/onevnet b/src/cli/onevnet index 8dcdf17d54..403db47135 100755 --- a/src/cli/onevnet +++ b/src/cli/onevnet @@ -180,7 +180,7 @@ EOT end -onevn_opts=OneVNParse.new +onevn_opts=OneVNParse.new([:list, :xml]) onevn_opts.parse(ARGV) ops=onevn_opts.options From 947bcd74750e73ca0ef5af6bc466c474061d1400 Mon Sep 17 00:00:00 2001 From: Javi Fontan Date: Mon, 26 Jul 2010 15:27:23 +0200 Subject: [PATCH 5/5] oneuser passwd should also be aware of --no-hash --- src/cli/oneuser | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/cli/oneuser b/src/cli/oneuser index 5802dac6b6..292016b99f 100755 --- a/src/cli/oneuser +++ b/src/cli/oneuser @@ -143,11 +143,11 @@ when "create" user=OpenNebula::User.new( OpenNebula::User.build_xml, get_one_client) if ops[:no_hash] - sha_password = ARGV[1] + password = ARGV[1] else - sha_password = Digest::SHA1.hexdigest(ARGV[1]) + password = Digest::SHA1.hexdigest(ARGV[1]) end - result=user.allocate(ARGV[0], sha_password) + result=user.allocate(ARGV[0], password) if !OpenNebula.is_error?(result) puts "ID: " + user.id.to_s if ops[:verbose] exit 0 @@ -202,8 +202,12 @@ when "passwd" user=OpenNebula::User.new_with_id(user_id, get_one_client) - sha_password = Digest::SHA1.hexdigest(ARGV[1]) - result=user.passwd(sha_password) + if ops[:no_hash] + password = ARGV[1] + else + password = Digest::SHA1.hexdigest(ARGV[1]) + end + result=user.passwd(password) if !OpenNebula.is_error?(result) puts "Password changed" if ops[:verbose]