diff --git a/install.sh b/install.sh index fa23e51d8b..684b69caba 100755 --- a/install.sh +++ b/install.sh @@ -245,7 +245,7 @@ CONF_CLI_DIRS="$CONF_LOCATION/cli" if [ "$CLIENT" = "yes" ]; then MAKE_DIRS="$MAKE_DIRS $LIB_ECO_CLIENT_DIRS $LIB_OCCI_CLIENT_DIRS \ - $LIB_OCA_CLIENT_DIRS $LIB_CLI_CLIENT_DIRS $CONF_CLI_DIRS" + $LIB_OCA_CLIENT_DIRS $LIB_CLI_CLIENT_DIRS $CONF_CLI_DIRS $ETC_LOCATION" elif [ "$SUNSTONE" = "yes" ]; then MAKE_DIRS="$MAKE_DIRS $SUNSTONE_DIRS $LIB_OCA_CLIENT_DIRS" else @@ -313,6 +313,7 @@ INSTALL_CLIENT_FILES=( CLI_BIN_FILES:$BIN_LOCATION CLI_LIB_FILES:$LIB_LOCATION/ruby/cli ONE_CLI_LIB_FILES:$LIB_LOCATION/ruby/cli/one_helper + ETC_CLIENT_FILES:$ETC_LOCATION CLI_CONF_FILES:$CONF_LOCATION/cli OCA_LIB_FILES:$LIB_LOCATION/ruby RUBY_OPENNEBULA_LIB_FILES:$LIB_LOCATION/ruby/OpenNebula @@ -556,7 +557,8 @@ ONEDB_MIGRATOR_FILES="src/onedb/2.0_to_2.9.80.rb \ #------------------------------------------------------------------------------- ETC_FILES="share/etc/oned.conf \ - share/etc/defaultrc" + share/etc/defaultrc \ + src/cli/etc/group.default" #------------------------------------------------------------------------------- # Virtualization drivers config. files, to be installed under $ETC_LOCATION @@ -793,6 +795,8 @@ CLI_CONF_FILES="src/cli/etc/onegroup.yaml \ src/cli/etc/onevnet.yaml \ src/cli/etc/oneacl.yaml" +ETC_CLIENT_FILES="src/cli/etc/group.default" + #----------------------------------------------------------------------------- # Sunstone files #----------------------------------------------------------------------------- diff --git a/src/cli/one_helper/onegroup_helper.rb b/src/cli/one_helper/onegroup_helper.rb index 867020c6d0..2ad7c8990d 100644 --- a/src/cli/one_helper/onegroup_helper.rb +++ b/src/cli/one_helper/onegroup_helper.rb @@ -16,6 +16,12 @@ require 'one_helper' +if ONE_LOCATION + GROUP_DEFAULT=ONE_LOCATION+"/etc/group.default" +else + GROUP_DEFAULT="/etc/one/group.default" +end + class OneGroupHelper < OpenNebulaHelper::OneHelper def self.rname "GROUP" @@ -25,6 +31,49 @@ class OneGroupHelper < OpenNebulaHelper::OneHelper "onegroup.yaml" end + def create_resource(options, &block) + group = factory + + rc = block.call(group) + if OpenNebula.is_error?(rc) + return -1, rc.message + else + puts "ID: #{group.id.to_s}" + end + + exit_code = 0 + + puts "Creating default ACL rules from #{GROUP_DEFAULT}" if options[:verbose] + File.open(GROUP_DEFAULT).each_line{ |l| + next if l.match(/^#/) + + rule = "@#{group.id} #{l}" + parse = OpenNebula::Acl.parse_rule(rule) + if OpenNebula.is_error?(parse) + puts "Error parsing rule #{rule}" + puts "Error message" << parse.message + exit_code = -1 + next + end + + xml = OpenNebula::Acl.build_xml + acl = OpenNebula::Acl.new(xml, @client) + rc = acl.allocate(*parse) + if OpenNebula.is_error?(rc) + puts "Error creating rule #{rule}" + puts "Error message" << rc.message + exit_code = -1 + next + else + msg = "ACL_ID: #{acl.id.to_s}" + msg << " RULE: #{rule.strip}" if options[:verbose] + puts msg + end + } + + exit_code + end + private def factory(id=nil) diff --git a/src/cli/oneacl b/src/cli/oneacl index a797eb43c4..66ee5adacc 100755 --- a/src/cli/oneacl +++ b/src/cli/oneacl @@ -60,27 +60,17 @@ cmd = CommandParser::CmdParser.new(ARGV) do [:rights, nil] do case args.length when 1 - new_args=Acl.parse_rule(args[0]) + new_args = Acl.parse_rule(args[0]) + + if OpenNebula.is_error?(new_args) + next -1, new_args.message + end when 3 new_args=args else next -1, "Wrong number of arguments, must be 1 or 3" end - errors=new_args.map do |arg| - if OpenNebula.is_error?(arg) - arg.message - else - nil - end - end - - errors.compact! - - if errors.length>0 - next -1, errors.join(', ') - end - helper.create_resource(options) do |rule| rule.allocate(*new_args) end diff --git a/src/oca/ruby/OpenNebula/Acl.rb b/src/oca/ruby/OpenNebula/Acl.rb index 8759037507..8a1e7bb95d 100644 --- a/src/oca/ruby/OpenNebula/Acl.rb +++ b/src/oca/ruby/OpenNebula/Acl.rb @@ -142,14 +142,28 @@ module OpenNebula rule_str = rule_str.split(" ") if rule_str.length != 3 - return [OpenNebula::Error.new( - "String needs three components: User, Resource, Rights")] + return OpenNebula::Error.new( + "String needs three components: User, Resource, Rights") end ret << parse_users(rule_str[0]) ret << parse_resources(rule_str[1]) ret << parse_rights(rule_str[2]) + errors=ret.map do |arg| + if OpenNebula.is_error?(arg) + arg.message + else + nil + end + end + + errors.compact! + + if errors.length>0 + return OpenNebula::Error.new(errors.join(', ')) + end + return ret end @@ -184,7 +198,7 @@ private resources[0].split("+").each{ |resource| if !RESOURCES[resource.upcase] - raise "Resource '#{resource}' does not exist" + raise "Resource '#{resource}' does not exist" end ret += RESOURCES[resource.upcase] } @@ -226,7 +240,7 @@ private # # @return [Integer] the numeric value for the given id_str def self.calculate_ids(id_str) - raise "ID string '#{id_str}' malformed" if + raise "ID string '#{id_str}' malformed" if !id_str.match(/^([\#@]\d+|\*)$/) value = 0