1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-16 22:50:10 +03:00

bug #785: Moved ACL creation to Group class in OCA

This commit is contained in:
Ruben S. Montero 2011-09-01 14:06:19 +02:00
parent 4342caac1e
commit f46a01b216
3 changed files with 49 additions and 60 deletions

View File

@ -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

View File

@ -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

View File

@ -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