Class: OpenNebula::Acl

Inherits:
PoolElement show all
Defined in:
lib/OpenNebula/Acl.rb

Overview

Abstract rules of the type USER RESOURCE RIGHTS which are: USER -> # @ ALL RESOURCE -> + separated list and "/#,@|ALL" VM, HOST NET IMAGE USER TEMPLATE GROUP ACL RIGHTS -> + separated list USE MANAGE ADMIN CREATE

Constant Summary

USERS =
{
    "UID"           => 0x100000000,
    "GID"           => 0x200000000,
    "ALL"           => 0x400000000
}
RESOURCES =
{
    "VM"            => 0x1000000000,
    "HOST"          => 0x2000000000,
    "NET"           => 0x4000000000,
    "IMAGE"         => 0x8000000000,
    "USER"          => 0x10000000000,
    "TEMPLATE"      => 0x20000000000,
    "GROUP"         => 0x40000000000
}
RIGHTS =
{
    "USE"           => 0x1,  # Auth. to use an object
    "MANAGE"        => 0x2,  # Auth. to perform management actions
    "ADMIN"         => 0x4,  # Auth. to perform administrative actions
    "CREATE"        => 0x8   # Auth. to create an object
}

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from PoolElement

#id, #name, new_with_id, #to_str

Methods inherited from XMLElement

#[], #attr, #each, #each_xpath, #has_elements?, #initialize_xml, #name, #retrieve_elements, #template_like_str, #template_str, #text, #to_hash, #to_xml

Constructor Details

#initialize(xml, client) ⇒ Acl

Constructor



70
71
72
# File 'lib/OpenNebula/Acl.rb', line 70

def initialize(xml, client)
    super(xml,client)
end

Class Method Details

.build_xml(pe_id = nil) ⇒ String

Creates an empty XML representation. It contains the id, if it is specified.



81
82
83
84
85
86
87
88
89
# File 'lib/OpenNebula/Acl.rb', line 81

def self.build_xml(pe_id=nil)
    if pe_id
        acl_xml = "<ACL><ID>#{pe_id}</ID></ACL>"
    else
        acl_xml = "<ACL></ACL>"
    end

    XMLElement.build_xml(acl_xml,'ACL')
end

.parse_rule(rule_str) ⇒ Array

Parses a rule string, e.g. "#5 HOST+VM/@12 INFO+CREATE+DELETE"

or OpenNebula::Error objects



131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# File 'lib/OpenNebula/Acl.rb', line 131

def self.parse_rule(rule_str)
    ret = Array.new

    rule_str = rule_str.split(" ")

    if rule_str.length != 3
        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

Instance Method Details

#allocate(user, resource, rights) ⇒ nil, OpenNebula::Error

Creates a new ACL rule.



102
103
104
105
106
107
# File 'lib/OpenNebula/Acl.rb', line 102

def allocate(user, resource, rights)
    return super( AclPool::ACL_POOL_METHODS[:addrule],
                  user,
                  resource,
                  rights )
end

#deletenil, OpenNebula::Error

Deletes the Acl rule



113
114
115
# File 'lib/OpenNebula/Acl.rb', line 113

def delete()
    super(AclPool::ACL_POOL_METHODS[:delrule])
end

#infonil

Does nothing, individual ACL rules info can't be retrieved from OpenNebula



121
122
123
# File 'lib/OpenNebula/Acl.rb', line 121

def info()
    return nil
end