From f5b2a173607e2f045ce3de95755828cef4bcca5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Czern=C3=BD?= Date: Tue, 5 Nov 2024 16:26:33 +0100 Subject: [PATCH] B #6726: Fix CLI paramters converted wrongly to 0 id (#3287) These parameters were fixed: * schedid in onebackupjob * execid in onehook * snapshot_id in oneimage * nicid, pciid, sched_id and sgid in onevm * nicid in onevrouter * serverid in onezone For all those parameters the string used as ID: * if possible the name is converted is converted to int ID * fails if the resource doesn't have name --- src/cli/command_parser.rb | 2 +- src/cli/one_helper/oneimage_helper.rb | 16 ++++++++++++++++ src/cli/one_helper/onevm_helper.rb | 13 +++++++++++++ src/cli/one_helper/onezone_helper.rb | 16 ++++++++++++++++ src/cli/onebackupjob | 4 ++++ src/cli/onehook | 4 ++++ src/cli/oneimage | 8 +++++++- src/cli/onevm | 22 +++++++++++++++++++--- src/cli/onevmgroup | 2 +- src/cli/onevnet | 2 +- src/cli/onevrouter | 4 ++++ src/cli/onezone | 8 +++++++- 12 files changed, 93 insertions(+), 8 deletions(-) diff --git a/src/cli/command_parser.rb b/src/cli/command_parser.rb index ce1bdbea8d..164a1e702c 100644 --- a/src/cli/command_parser.rb +++ b/src/cli/command_parser.rb @@ -828,7 +828,7 @@ module CommandParser end def format_int(arg) - arg.match(/^\d+$/) ? [0,arg] : [-1] + arg.match(/^\d+$/) ? [0,arg] : [-1, "Argument '#{arg}' is not a valid ID"] end def format_file(arg) diff --git a/src/cli/one_helper/oneimage_helper.rb b/src/cli/one_helper/oneimage_helper.rb index c3de8b1fd1..aba9a80a87 100644 --- a/src/cli/one_helper/oneimage_helper.rb +++ b/src/cli/one_helper/oneimage_helper.rb @@ -201,6 +201,22 @@ class OneImageHelper < OpenNebulaHelper::OneHelper Image::SHORT_IMAGE_TYPES[type_str] end + def retrieve_snapshot_id(image_id, id) + return [0, id.to_i] if id =~ /\A\d+\z/ + + image = retrieve_resource(image_id) + image.info + + ids = image.retrieve_elements( + "/IMAGE/SNAPSHOTS/SNAPSHOT[NAME='#{id}']/ID" + ) + + return [-1, "#{id} not found or duplicated"] \ + if ids.nil? || ids.size > 1 + + [0, ids[0].to_i] + end + def format_pool(options) config_file = self.class.table_conf diff --git a/src/cli/one_helper/onevm_helper.rb b/src/cli/one_helper/onevm_helper.rb index dcd10bd9c8..6ad9d75bf8 100644 --- a/src/cli/one_helper/onevm_helper.rb +++ b/src/cli/one_helper/onevm_helper.rb @@ -252,6 +252,19 @@ class OneVMHelper < OpenNebulaHelper::OneHelper [0, ids[0].to_i] end + def retrieve_nic_id(vm_id, id) + return [0, id.to_i] if id =~ /\A\d+\z/ + + vm = retrieve_resource(vm_id) + vm.info + ids = vm.retrieve_elements("/VM/TEMPLATE/NIC[NAME='#{id}']/NIC_ID") + + return [-1, "NIC #{id} not found or duplicated"] \ + if ids.nil? || ids.size > 1 + + [0, ids[0].to_i] + end + def format_pool(options) config_file = self.class.table_conf diff --git a/src/cli/one_helper/onezone_helper.rb b/src/cli/one_helper/onezone_helper.rb index b1125fc240..8cee96ad01 100644 --- a/src/cli/one_helper/onezone_helper.rb +++ b/src/cli/one_helper/onezone_helper.rb @@ -506,6 +506,22 @@ class OneZoneHelper < OpenNebulaHelper::OneHelper Zone::SHORT_ZONE_STATES[state_str] end + def retrieve_server_id(zone_id, id) + return [0, id.to_i] if id =~ /\A\d+\z/ + + zone = retrieve_resource(zone_id) + zone.info + + ids = zone.retrieve_elements( + "/ZONE/SERVER_POOL/SERVER[NAME='#{id}']/ID" + ) + + return [-1, "#{id} not found or duplicated"] \ + if ids.nil? || ids.size > 1 + + [0, ids[0].to_i] + end + def format_pool(options) config_file = self.class.table_conf diff --git a/src/cli/onebackupjob b/src/cli/onebackupjob index c9509417b7..155c3c062d 100755 --- a/src/cli/onebackupjob +++ b/src/cli/onebackupjob @@ -120,6 +120,10 @@ CommandParser::CmdParser.new(ARGV) do helper.filterflag_to_i(arg) end + set :format, :schedid, 'Scheduled Action id' do |arg| + format_int(arg) + end + ######################################################################## # Commands ######################################################################## diff --git a/src/cli/onehook b/src/cli/onehook index 124e20eb21..935415d2b7 100755 --- a/src/cli/onehook +++ b/src/cli/onehook @@ -103,6 +103,10 @@ CommandParser::CmdParser.new(ARGV) do helper.list_to_id(arg) end + set :format, :execid, 'Hook execution id' do |arg| + format_int(arg) + end + ######################################################################## # Hook log Options ######################################################################## diff --git a/src/cli/oneimage b/src/cli/oneimage index 5aa7e4cfc5..5800122d4f 100755 --- a/src/cli/oneimage +++ b/src/cli/oneimage @@ -149,7 +149,9 @@ CommandParser::CmdParser.new(ARGV) do end set :format, :imageid, OneImageHelper.to_id_desc do |arg| - helper.to_id(arg) + tmp = helper.to_id(arg) + @current_image = tmp[1] + tmp end set :format, :imageid_list, OneImageHelper.list_to_id_desc do |arg| @@ -170,6 +172,10 @@ CommandParser::CmdParser.new(ARGV) do end end + set :format, :snapshot_id, 'Snapshot name or id' do |arg| + helper.retrieve_snapshot_id(@current_image, arg) + end + ######################################################################## # Commands ######################################################################## diff --git a/src/cli/onevm b/src/cli/onevm index 2a30456384..aa42a4d977 100755 --- a/src/cli/onevm +++ b/src/cli/onevm @@ -320,7 +320,7 @@ CommandParser::CmdParser.new(ARGV) do helper.filterflag_to_i(arg) end - set :format, :diskid, 'Integer' do |arg| + set :format, :diskid, 'Disk id' do |arg| format_int(arg) end @@ -328,14 +328,30 @@ CommandParser::CmdParser.new(ARGV) do OpenNebulaHelper.size_in_mb(arg) end - format :snapshot_id, 'Snapshot identifier' do |arg| + set :format, :snapshot_id, 'Snapshot name or id' do |arg| helper.retrieve_snapshot_id(@current_vm, arg) end - format :disk_snapshot_id, 'Disk_snapshot identifier' do |arg| + set :format, :disk_snapshot_id, 'Disk_snapshot name or id' do |arg| helper.retrieve_disk_snapshot_id(@current_vm, arg) end + set :format, :nicid, 'NIC name or id' do |arg| + helper.retrieve_nic_id(@current_vm, arg) + end + + set :format, :pciid, 'PCI id' do |arg| + format_int(arg) + end + + set :format, :sched_id, 'Scheduled Action id' do |arg| + format_int(arg) + end + + set :format, :sgid, 'Security Group id' do |arg| + format_int(arg) + end + ######################################################################## # Commands ######################################################################## diff --git a/src/cli/onevmgroup b/src/cli/onevmgroup index 2656047236..6076af338f 100755 --- a/src/cli/onevmgroup +++ b/src/cli/onevmgroup @@ -121,7 +121,7 @@ CommandParser::CmdParser.new(ARGV) do helper.filterflag_to_i(arg) end - format :roleid, 'Role identifier' do |arg| + set :format, :roleid, 'Role identifier' do |arg| helper.retrieve_role_id(@current_vmg, arg) end diff --git a/src/cli/onevnet b/src/cli/onevnet index 36cb5dc62a..816192206f 100755 --- a/src/cli/onevnet +++ b/src/cli/onevnet @@ -152,7 +152,7 @@ CommandParser::CmdParser.new(ARGV) do helper.filterflag_to_i(arg) end - set :format, :ar_id, 'Integer' do |arg| + set :format, :ar_id, 'Address Range id' do |arg| format_int(arg) end diff --git a/src/cli/onevrouter b/src/cli/onevrouter index 6755b8a463..f62b5cb6a4 100755 --- a/src/cli/onevrouter +++ b/src/cli/onevrouter @@ -128,6 +128,10 @@ CommandParser::CmdParser.new(ARGV) do OpenNebulaHelper.rname_to_id(arg, 'VMTEMPLATE') end + set :format, :nicid, 'NIC id' do |arg| + format_int(arg) + end + ######################################################################## # Commands ######################################################################## diff --git a/src/cli/onezone b/src/cli/onezone index 9794b2a884..8c61e1a33a 100755 --- a/src/cli/onezone +++ b/src/cli/onezone @@ -91,13 +91,19 @@ CommandParser::CmdParser.new(ARGV) do # Formatters for arguments ######################################################################## set :format, :zoneid, OneZoneHelper.to_id_desc do |arg| - helper.to_id(arg) + tmp = helper.to_id(arg) + @current_zone = tmp[1] + tmp end set :format, :zoneid_list, OneZoneHelper.list_to_id_desc do |arg| helper.list_to_id(arg) end + set :format, :serverid, 'Server name or id' do |arg| + helper.retrieve_server_id(@current_zone, arg) + end + ######################################################################## # Commands ########################################################################