occi 2.0.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml CHANGED
@@ -1,5 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 1.8.7
3
4
  - 1.9.2
4
5
  - 1.9.3
5
6
 
data/README.md CHANGED
@@ -8,25 +8,14 @@ Requirements
8
8
 
9
9
  The following setup is recommended
10
10
 
11
- * usage of the Ruby Version Manger
11
+ * usage of the Ruby Version Manger recommended
12
12
  * Ruby 1.9.3
13
- * Bundler gem installed (use ```gem install bundler```)
13
+ * RubyGems installed
14
14
 
15
15
  Installation
16
16
  ------------
17
17
 
18
- ### Stable version
19
-
20
- Download the latest version from http://dev.opennebula.org/projects/ogf-occi/files
21
-
22
- Extract file
23
-
24
- tar xzf rOCCI-*.tar.bz
25
- unzip rOCCI-*.zip
26
-
27
- Install dependencies
28
-
29
- bundle install --deployment
18
+ gem install occi
30
19
 
31
20
  ### Latest version
32
21
 
@@ -42,29 +31,6 @@ Install dependencies for deployment
42
31
 
43
32
  bundle install --deployment
44
33
 
45
- Configure
46
- ---------
47
-
48
- Edit etc/occi-server.conf and adapt to your setting.
49
-
50
- The default templates for the OpenNebula template are located at etc/one_templates .
51
-
52
- The default templates for EC2 are located at etc/ec2_templates .
53
-
54
- Usage
55
- -----
56
-
57
- Run Passenger
58
-
59
- passenger start
60
-
61
- Testing
62
- -------
63
-
64
- Use curl to request all categories
65
-
66
- curl -X GET http://localhost:3000/-/
67
-
68
34
  Development
69
35
  -----------
70
36
 
data/lib/occi/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module OCCI
2
- VERSION = "2.0.0" unless defined?(::OCCI::VERSION)
2
+ VERSION = "2.0.1" unless defined?(::OCCI::VERSION)
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: occi
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -32,25 +32,6 @@ files:
32
32
  - LICENSE
33
33
  - README.md
34
34
  - Rakefile
35
- - lib/OpenNebula/Acl.rb
36
- - lib/OpenNebula/AclPool.rb
37
- - lib/OpenNebula/Group.rb
38
- - lib/OpenNebula/GroupPool.rb
39
- - lib/OpenNebula/Host.rb
40
- - lib/OpenNebula/HostPool.rb
41
- - lib/OpenNebula/Image.rb
42
- - lib/OpenNebula/ImagePool.rb
43
- - lib/OpenNebula/OpenNebula.rb
44
- - lib/OpenNebula/Pool.rb
45
- - lib/OpenNebula/Template.rb
46
- - lib/OpenNebula/TemplatePool.rb
47
- - lib/OpenNebula/User.rb
48
- - lib/OpenNebula/UserPool.rb
49
- - lib/OpenNebula/VirtualMachine.rb
50
- - lib/OpenNebula/VirtualMachinePool.rb
51
- - lib/OpenNebula/VirtualNetwork.rb
52
- - lib/OpenNebula/VirtualNetworkPool.rb
53
- - lib/OpenNebula/XMLUtils.rb
54
35
  - lib/occi/antlr/.gitignore
55
36
  - lib/occi/antlr/OCCI.g
56
37
  - lib/occi/antlr/OCCI.tokens
@@ -66,7 +47,6 @@ files:
66
47
  - lib/occi/backend/opennebula/network.rb
67
48
  - lib/occi/backend/opennebula/opennebula.rb
68
49
  - lib/occi/backend/opennebula/storage.rb
69
- - lib/occi/configuration.rb
70
50
  - lib/occi/core/action.rb
71
51
  - lib/occi/core/attribute_properties.rb
72
52
  - lib/occi/core/attributes.rb
@@ -88,7 +68,6 @@ files:
88
68
  - lib/occi/log.rb
89
69
  - lib/occi/parse.rb
90
70
  - lib/occi/registry.rb
91
- - lib/occi/server.rb
92
71
  - lib/occi/version.rb
93
72
  - occi.gemspec
94
73
  - spec/occi/antlr/parser_spec.rb
@@ -1,256 +0,0 @@
1
- # -------------------------------------------------------------------------- #
2
- # Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org) #
3
- # #
4
- # Licensed under the Apache License, Version 2.0 (the "License"); you may #
5
- # not use this file except in compliance with the License. You may obtain #
6
- # a copy of the License at #
7
- # #
8
- # http://www.apache.org/licenses/LICENSE-2.0 #
9
- # #
10
- # Unless required by applicable law or agreed to in writing, software #
11
- # distributed under the License is distributed on an "AS IS" BASIS, #
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
13
- # See the License for the specific language governing permissions and #
14
- # limitations under the License. #
15
- #--------------------------------------------------------------------------- #
16
-
17
-
18
- module OpenNebula
19
-
20
- # Abstract rules of the type USER RESOURCE RIGHTS
21
- # which are:
22
- # USER -> #<num>
23
- # @<num>
24
- # ALL
25
- # RESOURCE -> + separated list and "/{#,@}<num>|ALL"
26
- # VM,
27
- # HOST
28
- # NET
29
- # IMAGE
30
- # USER
31
- # TEMPLATE
32
- # GROUP
33
- # ACL
34
- # RIGHTS -> + separated list
35
- # USE
36
- # MANAGE
37
- # ADMIN
38
- # CREATE
39
- class Acl < PoolElement
40
-
41
- USERS = {
42
- "UID" => 0x100000000,
43
- "GID" => 0x200000000,
44
- "ALL" => 0x400000000
45
- }
46
-
47
- RESOURCES =
48
- {
49
- "VM" => 0x1000000000,
50
- "HOST" => 0x2000000000,
51
- "NET" => 0x4000000000,
52
- "IMAGE" => 0x8000000000,
53
- "USER" => 0x10000000000,
54
- "TEMPLATE" => 0x20000000000,
55
- "GROUP" => 0x40000000000
56
- }
57
-
58
- RIGHTS =
59
- {
60
- "USE" => 0x1, # Auth. to use an object
61
- "MANAGE" => 0x2, # Auth. to perform management actions
62
- "ADMIN" => 0x4, # Auth. to perform administrative actions
63
- "CREATE" => 0x8 # Auth. to create an object
64
- }
65
-
66
- # Constructor
67
- #
68
- # @param xml [String] must be an xml built with {#build_xml}
69
- # @param client [Client] represents an XML-RPC connection
70
- def initialize(xml, client)
71
- super(xml,client)
72
- end
73
-
74
- # Creates an empty XML representation. It contains the id, if it is
75
- # specified.
76
- #
77
- # @param pe_id [Integer] rule ID
78
- # @param client [Client] represents an XML-RPC connection
79
- #
80
- # @return [String] an empty XML representation
81
- def self.build_xml(pe_id=nil)
82
- if pe_id
83
- acl_xml = "<ACL><ID>#{pe_id}</ID></ACL>"
84
- else
85
- acl_xml = "<ACL></ACL>"
86
- end
87
-
88
- XMLElement.build_xml(acl_xml,'ACL')
89
- end
90
-
91
- # Creates a new ACL rule.
92
- #
93
- # @param user [String]
94
- # A string containing a hex number, e.g. 0x100000001
95
- # @param resource [String]
96
- # A string containing a hex number, e.g. 0x2100000001
97
- # @param rights [String]
98
- # A string containing a hex number, e.g. 0x10
99
- #
100
- # @return [nil, OpenNebula::Error] nil in case of success, Error
101
- # otherwise
102
- def allocate(user, resource, rights)
103
- return super( AclPool::ACL_POOL_METHODS[:addrule],
104
- user,
105
- resource,
106
- rights )
107
- end
108
-
109
- # Deletes the Acl rule
110
- #
111
- # @return [nil, OpenNebula::Error] nil in case of success, Error
112
- # otherwise
113
- def delete()
114
- super(AclPool::ACL_POOL_METHODS[:delrule])
115
- end
116
-
117
- # Does nothing, individual ACL rules info can't be retrieved from
118
- # OpenNebula
119
- #
120
- # @return [nil] nil
121
- def info()
122
- return nil
123
- end
124
-
125
- # Parses a rule string, e.g. "#5 HOST+VM/@12 INFO+CREATE+DELETE"
126
- #
127
- # @param rule_str [String] an ACL rule in string format
128
- #
129
- # @return [Array] an Array containing 3 strings (hex 64b numbers),
130
- # or OpenNebula::Error objects
131
- def self.parse_rule(rule_str)
132
- ret = Array.new
133
-
134
- rule_str = rule_str.split(" ")
135
-
136
- if rule_str.length != 3
137
- return OpenNebula::Error.new(
138
- "String needs three components: User, Resource, Rights")
139
- end
140
-
141
- ret << parse_users(rule_str[0])
142
- ret << parse_resources(rule_str[1])
143
- ret << parse_rights(rule_str[2])
144
-
145
- errors=ret.map do |arg|
146
- if OpenNebula.is_error?(arg)
147
- arg.message
148
- else
149
- nil
150
- end
151
- end
152
-
153
- errors.compact!
154
-
155
- if errors.length>0
156
- return OpenNebula::Error.new(errors.join(', '))
157
- end
158
-
159
- return ret
160
- end
161
-
162
- private
163
-
164
- # Converts a string in the form [#<id>, @<id>, *] to a hex. number
165
- #
166
- # @param users [String] Users component string
167
- #
168
- # @return [String] A string containing a hex number
169
- def self.parse_users(users)
170
- begin
171
- return calculate_ids(users).to_i.to_s(16)
172
- rescue Exception => e
173
- return OpenNebula::Error.new(e.message)
174
- end
175
- end
176
-
177
- # Converts a resources string to a hex. number
178
- #
179
- # @param resources [String] Resources component string
180
- #
181
- # @return [String] A string containing a hex number
182
- def self.parse_resources(resources)
183
- begin
184
- ret = 0
185
- resources = resources.split("/")
186
-
187
- if resources.size != 2
188
- raise "Resource '#{resources}' malformed"
189
- end
190
-
191
- resources[0].split("+").each{ |resource|
192
- if !RESOURCES[resource.upcase]
193
- raise "Resource '#{resource}' does not exist"
194
- end
195
- ret += RESOURCES[resource.upcase]
196
- }
197
-
198
- ret += calculate_ids(resources[1])
199
-
200
- return ret.to_i.to_s(16)
201
- rescue Exception => e
202
- return OpenNebula::Error.new(e.message)
203
- end
204
- end
205
-
206
- # Converts a rights string to a hex. number
207
- #
208
- # @param rights [String] Rights component string
209
- #
210
- # @return [String] A string containing a hex number
211
- def self.parse_rights(rights)
212
- begin
213
- ret = 0
214
- rights = rights.split("+")
215
-
216
- rights.each{ |right|
217
- raise "Right '#{right}' does not exist" if !RIGHTS[right.upcase]
218
-
219
- ret += RIGHTS[right.upcase]
220
- }
221
-
222
- return ret.to_i.to_s(16)
223
- rescue Exception => e
224
- return OpenNebula::Error.new(e.message)
225
- end
226
- end
227
-
228
- # Calculates the numeric value for a String containing an individual
229
- # (#<id>), group (@<id>) or all (*) ID component
230
- #
231
- # @param id_str [String] Rule Id string
232
- #
233
- # @return [Integer] the numeric value for the given id_str
234
- def self.calculate_ids(id_str)
235
- raise "ID string '#{id_str}' malformed" if
236
- !id_str.match(/^([\#@]\d+|\*)$/)
237
-
238
- value = 0
239
-
240
- case id_str[0..0]
241
- when "#"
242
- value = USERS["UID"]
243
- users_value = id_str[1..-1].to_i + value
244
-
245
- when "@"
246
- value = USERS["GID"]
247
- users_value = id_str[1..-1].to_i + value
248
-
249
- when "*"
250
- users_value = USERS["ALL"]
251
- end
252
-
253
- return users_value
254
- end
255
- end
256
- end
@@ -1,53 +0,0 @@
1
- # -------------------------------------------------------------------------- #
2
- # Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org) #
3
- # #
4
- # Licensed under the Apache License, Version 2.0 (the "License"); you may #
5
- # not use this file except in compliance with the License. You may obtain #
6
- # a copy of the License at #
7
- # #
8
- # http://www.apache.org/licenses/LICENSE-2.0 #
9
- # #
10
- # Unless required by applicable law or agreed to in writing, software #
11
- # distributed under the License is distributed on an "AS IS" BASIS, #
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
13
- # See the License for the specific language governing permissions and #
14
- # limitations under the License. #
15
- #--------------------------------------------------------------------------- #
16
-
17
-
18
- require 'OpenNebula/Pool'
19
-
20
- module OpenNebula
21
- class AclPool < Pool
22
-
23
- #######################################################################
24
- # Constants and Class Methods
25
- #######################################################################
26
-
27
-
28
- ACL_POOL_METHODS = {
29
- :info => "acl.info",
30
- :addrule => "acl.addrule",
31
- :delrule => "acl.delrule"
32
- }
33
-
34
- # Class constructor
35
- def initialize(client)
36
- super('ACL_POOL','ACL',client)
37
- end
38
-
39
- def factory(element_xml)
40
- OpenNebula::Acl.new(element_xml, @client)
41
- end
42
-
43
- #######################################################################
44
- # XML-RPC Methods
45
- #######################################################################
46
-
47
- # Retrieves the ACL Pool
48
- def info()
49
- # Retrieves all the Acls in the pool.
50
- super(ACL_POOL_METHODS[:info])
51
- end
52
- end
53
- end
@@ -1,147 +0,0 @@
1
- # -------------------------------------------------------------------------- #
2
- # Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org) #
3
- # #
4
- # Licensed under the Apache License, Version 2.0 (the "License"); you may #
5
- # not use this file except in compliance with the License. You may obtain #
6
- # a copy of the License at #
7
- # #
8
- # http://www.apache.org/licenses/LICENSE-2.0 #
9
- # #
10
- # Unless required by applicable law or agreed to in writing, software #
11
- # distributed under the License is distributed on an "AS IS" BASIS, #
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
13
- # See the License for the specific language governing permissions and #
14
- # limitations under the License. #
15
- #--------------------------------------------------------------------------- #
16
-
17
-
18
- require 'OpenNebula/Pool'
19
-
20
- module OpenNebula
21
- class Group < PoolElement
22
- #######################################################################
23
- # Constants and Class Methods
24
- #######################################################################
25
-
26
-
27
- GROUP_METHODS = {
28
- :info => "group.info",
29
- :allocate => "group.allocate",
30
- :delete => "group.delete"
31
- }
32
-
33
- # Flag for requesting connected user's group info
34
- SELF = -1
35
-
36
- #Default location for group ACL's
37
- if ENV['ONE_LOCATION']
38
- GROUP_DEFAULT = ENV['ONE_LOCATION'] + "/etc/group.default"
39
- else
40
- GROUP_DEFAULT = "/etc/one/group.default"
41
- end
42
-
43
- # Creates a Group description with just its identifier
44
- # this method should be used to create plain Group objects.
45
- # +id+ the id of the user
46
- #
47
- # Example:
48
- # group = Group.new(Group.build_xml(3),rpc_client)
49
- #
50
- def Group.build_xml(pe_id=nil)
51
- if pe_id
52
- group_xml = "<GROUP><ID>#{pe_id}</ID></GROUP>"
53
- else
54
- group_xml = "<GROUP></GROUP>"
55
- end
56
-
57
- XMLElement.build_xml(group_xml,'GROUP')
58
- end
59
-
60
- # Class constructor
61
- def initialize(xml, client)
62
- super(xml,client)
63
- end
64
-
65
- #######################################################################
66
- # Group utils
67
- #######################################################################
68
-
69
- # Creates ACLs for the group. The ACL rules are described in a file
70
- def create_acls(filename = GROUP_DEFAULT)
71
- if !File.readable?(filename)
72
- return -1, "Can not read deafult ACL file for group"
73
- end
74
-
75
- msg = String.new
76
-
77
- File.open(filename).each_line{ |l|
78
- next if l.match(/^#/)
79
-
80
- rule = "@#{@pe_id} #{l}"
81
- parse = OpenNebula::Acl.parse_rule(rule)
82
-
83
- if OpenNebula.is_error?(parse)
84
- return -1, "Error parsing rule #{rule}: #{parse.message}"
85
- end
86
-
87
- xml = OpenNebula::Acl.build_xml
88
- acl = OpenNebula::Acl.new(xml, @client)
89
-
90
- rc = acl.allocate(*parse)
91
-
92
- if OpenNebula.is_error?(rc)
93
- return -1, "Error creating rule #{rule}: #{rc.message}"
94
- else
95
- msg << "ACL_ID: #{acl.id}\n"
96
- end
97
- }
98
-
99
- return 0, msg
100
- end
101
-
102
- #######################################################################
103
- # XML-RPC Methods for the Group Object
104
- #######################################################################
105
-
106
- # Retrieves the information of the given Group.
107
- def info()
108
- super(GROUP_METHODS[:info], 'GROUP')
109
- end
110
-
111
- # Allocates a new Group in OpenNebula
112
- #
113
- # +groupname+ A string containing the name of the Group.
114
- def allocate(groupname)
115
- super(GROUP_METHODS[:allocate], groupname)
116
- end
117
-
118
- # Deletes the Group
119
- def delete()
120
- super(GROUP_METHODS[:delete])
121
- end
122
-
123
- # ---------------------------------------------------------------------
124
- # Helpers to get information
125
- # ---------------------------------------------------------------------
126
-
127
- # Returns whether or not the user with id 'uid' is part of this group
128
- def contains(uid)
129
- #This doesn't work in ruby 1.8.5
130
- #return self["USERS/ID[.=#{uid}]"] != nil
131
-
132
- id_array = retrieve_elements('USERS/ID')
133
- return id_array != nil && id_array.include?(uid.to_s)
134
- end
135
-
136
- # Returns an array with the numeric user ids
137
- def user_ids
138
- array = Array.new
139
-
140
- self.each("USERS/ID") do |id|
141
- array << id.text.to_i
142
- end
143
-
144
- return array
145
- end
146
- end
147
- end