From f46a01b21632fecaad8ee1540d13aa7cf36c89bc Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Thu, 1 Sep 2011 14:06:19 +0200 Subject: [PATCH] bug #785: Moved ACL creation to Group class in OCA --- src/cli/one_helper/onegroup_helper.rb | 34 +------------- src/oca/ruby/OpenNebula/Group.rb | 44 +++++++++++++++++++ .../models/OpenNebulaJSON/GroupJSON.rb | 31 ++----------- 3 files changed, 49 insertions(+), 60 deletions(-) diff --git a/src/cli/one_helper/onegroup_helper.rb b/src/cli/one_helper/onegroup_helper.rb index 592132a6c5..24775b28ad 100644 --- a/src/cli/one_helper/onegroup_helper.rb +++ b/src/cli/one_helper/onegroup_helper.rb @@ -16,12 +16,6 @@ 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" @@ -41,35 +35,11 @@ class OneGroupHelper < OpenNebulaHelper::OneHelper 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 + exit_code , msg = group.create_acls - 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 - } + puts msg exit_code end diff --git a/src/oca/ruby/OpenNebula/Group.rb b/src/oca/ruby/OpenNebula/Group.rb index 64c751dc67..5ec9c2f1e7 100644 --- a/src/oca/ruby/OpenNebula/Group.rb +++ b/src/oca/ruby/OpenNebula/Group.rb @@ -30,6 +30,13 @@ module OpenNebula # Flag for requesting connected user's group info SELF = -1 + #Default location for group ACL's + if ENV['ONE_LOCATION'] + GROUP_DEFAULT = ENV['ONE_LOCATION'] + "/etc/group.default" + else + GROUP_DEFAULT = "/etc/one/group.default" + end + # Creates a Group description with just its identifier # this method should be used to create plain Group objects. # +id+ the id of the user @@ -55,6 +62,43 @@ module OpenNebula @client = client end + + # -------------------------------------------------------------------- + # Group utils + # -------------------------------------------------------------------- + + # Creates ACLs for the group. The ACL rules are described in a file + def create_acls(filename = GROUP_DEFAULT) + if !File.readable?(filename) + return -1, "Can not read deafult ACL file for group" + end + + msg = String.new + + File.open(filename).each_line{ |l| + next if l.match(/^#/) + + rule = "@#{@pe_id} #{l}" + parse = OpenNebula::Acl.parse_rule(rule) + + if OpenNebula.is_error?(parse) + return -1, "Error parsing rule #{rule}: #{parse.message}" + end + + xml = OpenNebula::Acl.build_xml + acl = OpenNebula::Acl.new(xml, @client) + + rc = acl.allocate(*parse) + + if OpenNebula.is_error?(rc) + return -1, "Error creating rule #{rule}: #{rc.message}" + else + msg << "ACL_ID: #{acl.id}\n" + end + } + + return 0, msg + end # --------------------------------------------------------------------- # XML-RPC Methods for the Group Object diff --git a/src/sunstone/models/OpenNebulaJSON/GroupJSON.rb b/src/sunstone/models/OpenNebulaJSON/GroupJSON.rb index 0b5f68c6c5..2050ec2699 100644 --- a/src/sunstone/models/OpenNebulaJSON/GroupJSON.rb +++ b/src/sunstone/models/OpenNebulaJSON/GroupJSON.rb @@ -16,12 +16,6 @@ require 'OpenNebulaJSON/JSONUtils' -if ONE_LOCATION - GROUP_DEFAULT=ONE_LOCATION+"/etc/group.default" -else - GROUP_DEFAULT="/etc/one/group.default" -end - module OpenNebulaJSON class GroupJSON < OpenNebula::Group include JSONUtils @@ -34,30 +28,11 @@ module OpenNebulaJSON rc_alloc = self.allocate(group_hash['name']) - #if group allocation was successful + #create default ACL rules if !OpenNebula.is_error?(rc_alloc) - #create default ACL rules - inspired by cli's onegroup_helper.rb + rc_acl, msg = self.create_acls - File.open(GROUP_DEFAULT).each_line{ |l| - next if l.match(/^#/) - - rule = "@#{self.id} #{l}" - parse = OpenNebula::Acl.parse_rule(rule) - if OpenNebula.is_error?(parse) - puts "Error parsing rule #{rule}" - puts "Error message" << parse.message - 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 - next - end - } + puts msg if rc_acl == -1 end return rc_alloc