From 5b35eb79467a17c154cbccf6df809adea785b002 Mon Sep 17 00:00:00 2001 From: Alejandro Huertas Herrero Date: Wed, 18 May 2022 14:51:51 +0200 Subject: [PATCH] F #5356: add CLI chmod support /u/g/o (#2054) --- src/cli/one_helper.rb | 42 ++++++++++++++++++++++++++++++++++++++++ src/cli/onedatastore | 2 +- src/cli/oneflow | 2 +- src/cli/oneflow-template | 2 +- src/cli/oneimage | 2 +- src/cli/onemarket | 2 +- src/cli/onemarketapp | 2 +- src/cli/oneprovider | 2 +- src/cli/onesecgroup | 2 +- src/cli/onetemplate | 2 +- src/cli/onevm | 2 +- src/cli/onevmgroup | 2 +- src/cli/onevnet | 2 +- src/cli/onevntemplate | 2 +- src/cli/onevrouter | 2 +- 15 files changed, 56 insertions(+), 14 deletions(-) diff --git a/src/cli/one_helper.rb b/src/cli/one_helper.rb index ac41245030..fdd9cb1c31 100644 --- a/src/cli/one_helper.rb +++ b/src/cli/one_helper.rb @@ -2305,4 +2305,46 @@ EOT end end + # Convert u=rwx,g=rx,o=r to octet + # + # @param perm [String] Permissions in human readbale format + # + # @return [String] Permissions in octet format + def OpenNebulaHelper.to_octet(perm) + begin + Integer(perm).to_s + rescue StandardError + perm = perm.split(',') + ret = 0 + + perm.each do |p| + p = p.split('=') + + next unless p.size == 2 + + r = p[1].count('r') + w = p[1].count('w') + x = p[1].count('x') + + rwx = (2 ** 0) * x + (2 ** 1) * w + (2 ** 2) * r + + case p[0] + when 'u' + ret += rwx * 100 + when 'g' + ret += rwx * 10 + else + ret += rwx * 1 + end + end + + if ret == 0 + STDERR.puts 'Error in permissions format' + exit(-1) + else + ret.to_s + end + end + end + end diff --git a/src/cli/onedatastore b/src/cli/onedatastore index bcc26fc4da..68a7819f80 100755 --- a/src/cli/onedatastore +++ b/src/cli/onedatastore @@ -158,7 +158,7 @@ CommandParser::CmdParser.new(ARGV) do command :chmod, chmod_desc, [:range, :datastoreid_list], :octet do helper.perform_actions(args[0], options, 'Permissions changed') do |obj| - obj.chmod_octet(args[1]) + obj.chmod_octet(OpenNebulaHelper.to_octet(args[1])) end end diff --git a/src/cli/oneflow b/src/cli/oneflow index 7819156c07..699280cd38 100755 --- a/src/cli/oneflow +++ b/src/cli/oneflow @@ -285,7 +285,7 @@ CommandParser::CmdParser.new(ARGV) do Service.perform_actions(args[0]) do |service_id| params = {} - params['octet'] = args[1] + params['octet'] = OpenNebulaHelper.to_octet(args[1]) json = Service.build_json_action('chmod', params) diff --git a/src/cli/oneflow-template b/src/cli/oneflow-template index 03f33cf690..efc3ad164c 100755 --- a/src/cli/oneflow-template +++ b/src/cli/oneflow-template @@ -346,7 +346,7 @@ CommandParser::CmdParser.new(ARGV) do Service.perform_actions(args[0]) do |service_id| params = {} - params['octet'] = args[1] + params['octet'] = OpenNebulaHelper.to_octet(args[1]) json = Service.build_json_action('chmod', params) diff --git a/src/cli/oneimage b/src/cli/oneimage index 4b20e77452..3b89ddae64 100755 --- a/src/cli/oneimage +++ b/src/cli/oneimage @@ -363,7 +363,7 @@ CommandParser::CmdParser.new(ARGV) do command :chmod, chmod_desc, [:range, :imageid_list], :octet do helper.perform_actions(args[0], options, 'Permissions changed') do |image| - image.chmod_octet(args[1]) + image.chmod_octet(OpenNebulaHelper.to_octet(args[1])) end end diff --git a/src/cli/onemarket b/src/cli/onemarket index 3eaa023a21..2b2e872654 100755 --- a/src/cli/onemarket +++ b/src/cli/onemarket @@ -151,7 +151,7 @@ CommandParser::CmdParser.new(ARGV) do command :chmod, chmod_desc, [:range, :marketplaceid_list], :octet do helper.perform_actions(args[0], options, 'Permissions changed') do |obj| - obj.chmod_octet(args[1]) + obj.chmod_octet(OpenNebulaHelper.to_octet(args[1])) end end diff --git a/src/cli/onemarketapp b/src/cli/onemarketapp index f2d30dd0cd..5e72eaa00b 100755 --- a/src/cli/onemarketapp +++ b/src/cli/onemarketapp @@ -388,7 +388,7 @@ CommandParser::CmdParser.new(ARGV) do command :chmod, chmod_desc, [:range, :appid_list], :octet do helper.perform_actions(args[0], options, 'Permissions changed') do |app| - app.chmod_octet(args[1]) + app.chmod_octet(OpenNebulaHelper.to_octet(args[1])) end end diff --git a/src/cli/oneprovider b/src/cli/oneprovider index 679eae1ae0..f4a17fca52 100755 --- a/src/cli/oneprovider +++ b/src/cli/oneprovider @@ -220,7 +220,7 @@ CommandParser::CmdParser.new(ARGV) do command :chmod, chmod_desc, [:range, :providerid_list], :octet do helper.perform_actions(args[0], options, 'Permissions changed') do |p| - p.chmod_octet(args[1]) + p.chmod_octet(OpenNebulaHelper.to_octet(args[1])) end end end diff --git a/src/cli/onesecgroup b/src/cli/onesecgroup index 7e949d977a..8020a49241 100755 --- a/src/cli/onesecgroup +++ b/src/cli/onesecgroup @@ -174,7 +174,7 @@ CommandParser::CmdParser.new(ARGV) do command :chmod, chmod_desc, [:range, :secgroupid_list], :octet do helper.perform_actions(args[0], options, 'Permissions changed') do |t| - t.chmod_octet(args[1]) + t.chmod_octet(OpenNebulaHelper.to_octet(args[1])) end end diff --git a/src/cli/onetemplate b/src/cli/onetemplate index 5ece5998df..209999fba2 100755 --- a/src/cli/onetemplate +++ b/src/cli/onetemplate @@ -378,7 +378,7 @@ CommandParser::CmdParser.new(ARGV) do recursive = (options[:recursive] == true) helper.perform_actions(args[0], options, 'Permissions changed') do |t| - t.chmod_octet(args[1], recursive) + t.chmod_octet(OpenNebulaHelper.to_octet(args[1]), recursive) end end diff --git a/src/cli/onevm b/src/cli/onevm index 5a14c2e912..05255a1d31 100755 --- a/src/cli/onevm +++ b/src/cli/onevm @@ -981,7 +981,7 @@ CommandParser::CmdParser.new(ARGV) do command :chmod, chmod_desc, [:range, :vmid_list], :octet do helper.perform_actions(args[0], options, 'Permissions changed') do |vm| - vm.chmod_octet(args[1]) + vm.chmod_octet(OpenNebulaHelper.to_octet(args[1])) end end diff --git a/src/cli/onevmgroup b/src/cli/onevmgroup index 5d5f478c06..fb85dbe889 100755 --- a/src/cli/onevmgroup +++ b/src/cli/onevmgroup @@ -197,7 +197,7 @@ CommandParser::CmdParser.new(ARGV) do command :chmod, chmod_desc, [:range, :vmgroupid_list], :octet do helper.perform_actions(args[0], options, 'Permissions changed') do |t| - t.chmod_octet(args[1]) + t.chmod_octet(OpenNebulaHelper.to_octet(args[1])) end end diff --git a/src/cli/onevnet b/src/cli/onevnet index 73f989585d..33dc16fcd0 100755 --- a/src/cli/onevnet +++ b/src/cli/onevnet @@ -335,7 +335,7 @@ CommandParser::CmdParser.new(ARGV) do command :chmod, chmod_desc, [:range, :vnetid_list], :octet do helper.perform_actions(args[0], options, 'Permissions changed') do |vn| - vn.chmod_octet(args[1]) + vn.chmod_octet(OpenNebulaHelper.to_octet(args[1])) end end diff --git a/src/cli/onevntemplate b/src/cli/onevntemplate index 9aeb809780..4979747325 100755 --- a/src/cli/onevntemplate +++ b/src/cli/onevntemplate @@ -314,7 +314,7 @@ CommandParser::CmdParser.new(ARGV) do recursive = (options[:recursive] == true) helper.perform_actions(args[0], options, 'Permissions changed') do |t| - t.chmod_octet(args[1], recursive) + t.chmod_octet(OpenNebulaHelper.to_octet(args[1]), recursive) end end diff --git a/src/cli/onevrouter b/src/cli/onevrouter index 9c0e1b8918..77c9f124bb 100755 --- a/src/cli/onevrouter +++ b/src/cli/onevrouter @@ -251,7 +251,7 @@ CommandParser::CmdParser.new(ARGV) do command :chmod, chmod_desc, [:range, :vrouterid_list], :octet do helper.perform_actions(args[0], options, 'Permissions changed') do |obj| - obj.chmod_octet(args[1]) + obj.chmod_octet(OpenNebulaHelper.to_octet(args[1])) end end