opennebula 4.6.1 → 4.7.80.beta

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 94b0a4e8af842368b4a10db1eb29973da9ef60fd
4
+ data.tar.gz: 2a601e7dc101041b02e8cd0203acd4f9cecd42fd
5
+ SHA512:
6
+ metadata.gz: 27e3c88db54a97371e89d48ccfc4f4b6c82edb48dfcc915cf75d74f0c48bd568dd36f7342588fdbe493f885480682391733c54071ecde5567d73366cfc108514
7
+ data.tar.gz: 84a799f0f7a394e524dfe52e2c4ab7172bdcd3570cdac35b6c23689af89c81af7d8d86eec5cba85db0b768ca85e4143909f0073db7835810c1adbde2310c51b5
@@ -85,6 +85,10 @@ module OpenNebula
85
85
  # group_hash[:resource_providers]
86
86
  # group_hash[:resource_providers][:zone_id]
87
87
  # group_hash[:resource_providers][:cluster_id]
88
+ # group_hash[:views] Array of sunstone view names, to be stored
89
+ # in SUNSTONE_VIEWS
90
+ # group_hash[:default_view] Default sunstone view name, to be stored
91
+ # in DEFAULT_VIEW
88
92
  #
89
93
  def create(group_hash)
90
94
  # Check arguments
@@ -123,18 +127,45 @@ module OpenNebula
123
127
  return OpenNebula::Error.new(error_msg)
124
128
  end
125
129
 
130
+ # Set group ACLs to share resources
131
+ if group_hash[:shared_resources]
132
+ acls = Array.new
133
+ acls << "@#{self.id} #{group_hash[:shared_resources]}/@#{self.id} USE"
134
+
135
+ rc, msg = create_group_acls(acls)
136
+
137
+ if OpenNebula.is_error?(rc)
138
+ self.delete
139
+ error_msg = "Error creating group ACL's: #{rc.message}"
140
+ return OpenNebula::Error.new(error_msg)
141
+ end
142
+ end
143
+
126
144
  # Create associated group admin if needed
127
145
  rc = create_admin_user(group_hash)
128
146
 
129
147
  if OpenNebula.is_error?(rc)
130
148
  self.delete
131
- error_msg = "Error creating admin group: #{rc.message}"
149
+ error_msg = "Error creating admin user: #{rc.message}"
132
150
  return OpenNebula::Error.new(error_msg)
133
151
  end
134
152
 
135
- # Add default Sunstone views for the group
153
+ str = ""
154
+ update = false
155
+
156
+ # Add Sunstone views for the group
136
157
  if group_hash[:views]
137
- str = "SUNSTONE_VIEWS=\"#{group_hash[:views].join(",")}\"\n"
158
+ str += "SUNSTONE_VIEWS=\"#{group_hash[:views].join(",")}\"\n"
159
+ update = true
160
+ end
161
+
162
+ # Add Sunstone views for the group
163
+ if group_hash[:default_view]
164
+ str += "DEFAULT_VIEW=\"#{group_hash[:default_view]}\"\n"
165
+ update = true
166
+ end
167
+
168
+ if update
138
169
  self.update(str, true)
139
170
  end
140
171
 
@@ -305,6 +336,9 @@ module OpenNebula
305
336
  return rc
306
337
  end
307
338
 
339
+ # Set the default admin view to vdcadmin
340
+ group_admin.update("DEFAULT_VIEW=#{GROUP_ADMIN_SUNSTONE_VIEWS}", true)
341
+
308
342
  #Create admin group acls
309
343
  acls = Array.new
310
344
 
@@ -206,10 +206,10 @@ module OpenNebula
206
206
  #
207
207
  # @return [Integer, OpenNebula::Error] The new Image ID in case
208
208
  # of success, Error otherwise
209
- def clone(name)
209
+ def clone(name, target_ds=-1)
210
210
  return Error.new('ID not defined') if !@pe_id
211
211
 
212
- rc = @client.call(IMAGE_METHODS[:clone], @pe_id, name)
212
+ rc = @client.call(IMAGE_METHODS[:clone], @pe_id, name, target_ds)
213
213
 
214
214
  return rc
215
215
  end
@@ -101,6 +101,7 @@ module OpenNebula
101
101
  return Error.new('ID not defined') if !@pe_id
102
102
 
103
103
  name ||= ""
104
+ hold = false if hold.nil?
104
105
  template ||= ""
105
106
 
106
107
  rc = @client.call(
@@ -23,26 +23,21 @@ module OpenNebula
23
23
  # Constants and Class Methods
24
24
  #######################################################################
25
25
 
26
-
27
26
  VN_METHODS = {
28
27
  :info => "vn.info",
29
28
  :allocate => "vn.allocate",
30
29
  :delete => "vn.delete",
31
- :addleases => "vn.addleases",
32
- :rmleases => "vn.rmleases",
30
+ :add_ar => "vn.add_ar",
31
+ :rm_ar => "vn.rm_ar",
32
+ :update_ar => "vn.update_ar",
33
33
  :chown => "vn.chown",
34
34
  :chmod => "vn.chmod",
35
35
  :update => "vn.update",
36
36
  :hold => "vn.hold",
37
37
  :release => "vn.release",
38
- :rename => "vn.rename"
39
- }
40
-
41
- VN_TYPES=%w{RANGED FIXED}
42
-
43
- SHORT_VN_TYPES={
44
- "RANGED" => "R",
45
- "FIXED" => "F"
38
+ :rename => "vn.rename",
39
+ :reserve => "vn.reserve",
40
+ :free_ar => "vn.free_ar"
46
41
  }
47
42
 
48
43
  # Creates a VirtualNetwork description with just its identifier
@@ -116,38 +111,52 @@ module OpenNebula
116
111
  super(VN_METHODS[:delete])
117
112
  end
118
113
 
119
- # Adds a lease to the VirtualNetwork
120
- def addleases(ip, mac = nil)
114
+ # Adds Address Ranges to the VirtualNetwork
115
+ def add_ar(ar_template)
121
116
  return Error.new('ID not defined') if !@pe_id
122
117
 
123
- lease_template = "LEASES = [ IP = #{ip}"
124
- lease_template << ", MAC = #{mac}" if mac
125
- lease_template << " ]"
126
-
127
- rc = @client.call(VN_METHODS[:addleases], @pe_id, lease_template)
118
+ rc = @client.call(VN_METHODS[:add_ar], @pe_id, ar_template)
128
119
  rc = nil if !OpenNebula.is_error?(rc)
129
120
 
130
121
  return rc
131
122
  end
132
123
 
133
- # Removes a lease from the VirtualNetwork
134
- def rmleases(ip)
124
+ # Removes an Address Range from the VirtualNetwork
125
+ def rm_ar(ar_id)
135
126
  return Error.new('ID not defined') if !@pe_id
136
127
 
137
- lease_template = "LEASES = [ IP = #{ip} ]"
128
+ rc = @client.call(VN_METHODS[:rm_ar], @pe_id, ar_id.to_i)
129
+ rc = nil if !OpenNebula.is_error?(rc)
130
+
131
+ return rc
132
+ end
133
+
134
+ # Updates Address Ranges from the VirtualNetwork
135
+ def update_ar(ar_template)
136
+ return Error.new('ID not defined') if !@pe_id
138
137
 
139
- rc = @client.call(VN_METHODS[:rmleases], @pe_id, lease_template)
138
+ rc = @client.call(VN_METHODS[:update_ar], @pe_id, ar_template)
140
139
  rc = nil if !OpenNebula.is_error?(rc)
141
140
 
142
141
  return rc
143
142
  end
144
143
 
145
- # Holds a virtual network Lease as used
146
- # @param ip [String] IP to hold
147
- def hold(ip)
144
+ # Holds a virtual network address
145
+ # @param ip [String] address to hold, if contains ":" a MAC address is assumed
146
+ # @param ar_id [Integer] The address range to hold the lease. If not set
147
+ # the lease will be held from all possible address ranges
148
+ def hold(ip, ar_id=-1)
148
149
  return Error.new('ID not defined') if !@pe_id
149
150
 
150
- lease_template = "LEASES = [ IP = #{ip} ]"
151
+ if ip.include?':'
152
+ addr_name = "MAC"
153
+ else
154
+ addr_name = "IP"
155
+ end
156
+
157
+ lease_template = "LEASES = [ #{addr_name} = #{ip}"
158
+ lease_template << ", AR_ID = #{ar_id}" if ar_id != -1
159
+ lease_template << "]"
151
160
 
152
161
  rc = @client.call(VN_METHODS[:hold], @pe_id, lease_template)
153
162
  rc = nil if !OpenNebula.is_error?(rc)
@@ -155,12 +164,22 @@ module OpenNebula
155
164
  return rc
156
165
  end
157
166
 
158
- # Releases a virtual network Lease on hold
159
- # @param ip [String] IP to release
160
- def release(ip)
167
+ # Releases an address on hold
168
+ # @param ip [String] IP to release, if contains ":" a MAC address is assumed
169
+ # @param ar_id [Integer] The address range to release the lease. If not
170
+ # set the lease will be freed from all possible address ranges
171
+ def release(ip, ar_id=-1)
161
172
  return Error.new('ID not defined') if !@pe_id
162
173
 
163
- lease_template = "LEASES = [ IP = #{ip} ]"
174
+ if ip.include?':'
175
+ addr_name = "MAC"
176
+ else
177
+ addr_name = "IP"
178
+ end
179
+
180
+ lease_template = "LEASES = [ #{addr_name} = #{ip}"
181
+ lease_template << ", AR_ID = #{ar_id}" if ar_id != -1
182
+ lease_template << "]"
164
183
 
165
184
  rc = @client.call(VN_METHODS[:release], @pe_id, lease_template)
166
185
  rc = nil if !OpenNebula.is_error?(rc)
@@ -168,6 +187,49 @@ module OpenNebula
168
187
  return rc
169
188
  end
170
189
 
190
+ # Reserve a set of addresses from this virtual network
191
+ # @param name [String] of the reservation
192
+ # @param rsize[String] number of addresses to reserve
193
+ # @param ar_id[String] the ar_id to make the reservation. If set to nil
194
+ # any address range will be used
195
+ # @param addr [String] the first address in the reservation. If set to
196
+ # nil the first free address will be used
197
+ # @param vnet [String] ID of the VNET to add the reservation to. If not
198
+ # set a new VNET will be created.
199
+ def reserve(rname, rsize, ar_id, addr, vnet)
200
+ return Error.new('ID not defined') if !@pe_id
201
+
202
+ rtmpl = "SIZE = #{rsize}\n"
203
+ rtmpl << "NAME = #{rname}\n" if !rname.nil?
204
+ rtmpl << "AR_ID = #{ar_id}\n" if !ar_id.nil?
205
+ rtmpl << "NETWORK_ID = #{vnet}\n" if !vnet.nil?
206
+
207
+ if !addr.nil?
208
+ if addr.include?':'
209
+ addr_name = "MAC"
210
+ else
211
+ addr_name = "IP"
212
+ end
213
+
214
+ rtmpl << "#{addr_name} = #{addr}\n"
215
+ end
216
+
217
+ rc = @client.call(VN_METHODS[:reserve], @pe_id, rtmpl)
218
+ rc = nil if !OpenNebula.is_error?(rc)
219
+
220
+ return rc
221
+ end
222
+
223
+ # Removes an Address Range from the VirtualNetwork
224
+ def free(ar_id)
225
+ return Error.new('ID not defined') if !@pe_id
226
+
227
+ rc = @client.call(VN_METHODS[:free_ar], @pe_id, ar_id.to_i)
228
+ rc = nil if !OpenNebula.is_error?(rc)
229
+
230
+ return rc
231
+ end
232
+
171
233
  # Changes the owner/group
172
234
  #
173
235
  # @param uid [Integer] the new owner id. Set to -1 to leave the current one
@@ -198,7 +260,7 @@ module OpenNebula
198
260
  super(VN_METHODS[:chmod], owner_u, owner_m, owner_a, group_u,
199
261
  group_m, group_a, other_u, other_m, other_a)
200
262
  end
201
-
263
+
202
264
  # Renames this virtual network
203
265
  #
204
266
  # @param name [String] New name for the virtual network.
@@ -219,21 +281,6 @@ module OpenNebula
219
281
  self['GID'].to_i
220
282
  end
221
283
 
222
- # Returns the type of the Virtual Network (numeric value)
223
- def type
224
- self['TYPE'].to_i
225
- end
226
-
227
- # Returns the type of the Virtual Network (string value)
228
- def type_str
229
- VN_TYPES[type]
230
- end
231
-
232
- # Returns the state of the Virtual Network (string value)
233
- def short_type_str
234
- SHORT_VN_TYPES[type_str]
235
- end
236
-
237
284
  def public?
238
285
  if self['PERMISSIONS/GROUP_U'] == "1" || self['PERMISSIONS/OTHER_U'] == "1"
239
286
  true
data/lib/opennebula.rb CHANGED
@@ -56,5 +56,5 @@ require 'opennebula/system'
56
56
  module OpenNebula
57
57
 
58
58
  # OpenNebula version
59
- VERSION = '4.6.1'
59
+ VERSION = '4.7.80'
60
60
  end
metadata CHANGED
@@ -1,46 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opennebula
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.6.1
5
- prerelease:
4
+ version: 4.7.80.beta
6
5
  platform: ruby
7
6
  authors:
8
7
  - OpenNebula
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-05-16 00:00:00.000000000 Z
11
+ date: 2014-07-17 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: nokogiri
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: json
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  description: Libraries needed to talk to OpenNebula
@@ -49,73 +44,72 @@ executables: []
49
44
  extensions: []
50
45
  extra_rdoc_files: []
51
46
  files:
47
+ - LICENSE
48
+ - NOTICE
52
49
  - lib/opennebula.rb
53
- - lib/opennebula/document_json.rb
54
- - lib/opennebula/host.rb
55
- - lib/opennebula/group_pool.rb
56
- - lib/opennebula/user_pool.rb
57
- - lib/opennebula/pool.rb
50
+ - lib/opennebula/acl.rb
51
+ - lib/opennebula/acl_pool.rb
52
+ - lib/opennebula/client.rb
53
+ - lib/opennebula/cluster.rb
58
54
  - lib/opennebula/cluster_pool.rb
59
- - lib/opennebula/template_pool.rb
60
- - lib/opennebula/document_pool.rb
61
55
  - lib/opennebula/datastore.rb
62
56
  - lib/opennebula/datastore_pool.rb
63
- - lib/opennebula/xml_pool.rb
64
- - lib/opennebula/xml_utils.rb
57
+ - lib/opennebula/document.rb
58
+ - lib/opennebula/document_json.rb
59
+ - lib/opennebula/document_pool.rb
65
60
  - lib/opennebula/document_pool_json.rb
66
- - lib/opennebula/acl_pool.rb
67
- - lib/opennebula/template.rb
68
- - lib/opennebula/zone.rb
69
- - lib/opennebula/client.rb
70
- - lib/opennebula/cluster.rb
71
- - lib/opennebula/pool_element.rb
72
- - lib/opennebula/virtual_machine.rb
73
- - lib/opennebula/user.rb
74
61
  - lib/opennebula/error.rb
75
- - lib/opennebula/image.rb
62
+ - lib/opennebula/group.rb
63
+ - lib/opennebula/group_pool.rb
64
+ - lib/opennebula/host.rb
76
65
  - lib/opennebula/host_pool.rb
77
- - lib/opennebula/document.rb
78
- - lib/opennebula/xml_element.rb
79
- - lib/opennebula/oneflow_client.rb
80
- - lib/opennebula/virtual_network.rb
66
+ - lib/opennebula/image.rb
81
67
  - lib/opennebula/image_pool.rb
82
- - lib/opennebula/virtual_network_pool.rb
83
- - lib/opennebula/zone_pool.rb
84
- - lib/opennebula/group.rb
85
- - lib/opennebula/system.rb
86
- - lib/opennebula/virtual_machine_pool.rb
87
- - lib/opennebula/acl.rb
88
68
  - lib/opennebula/ldap_auth.rb
89
69
  - lib/opennebula/ldap_auth_spec.rb
90
- - lib/opennebula/x509_auth.rb
91
- - lib/opennebula/ssh_auth.rb
92
- - lib/opennebula/server_x509_auth.rb
70
+ - lib/opennebula/oneflow_client.rb
71
+ - lib/opennebula/pool.rb
72
+ - lib/opennebula/pool_element.rb
93
73
  - lib/opennebula/server_cipher_auth.rb
94
- - NOTICE
95
- - LICENSE
74
+ - lib/opennebula/server_x509_auth.rb
75
+ - lib/opennebula/ssh_auth.rb
76
+ - lib/opennebula/system.rb
77
+ - lib/opennebula/template.rb
78
+ - lib/opennebula/template_pool.rb
79
+ - lib/opennebula/user.rb
80
+ - lib/opennebula/user_pool.rb
81
+ - lib/opennebula/virtual_machine.rb
82
+ - lib/opennebula/virtual_machine_pool.rb
83
+ - lib/opennebula/virtual_network.rb
84
+ - lib/opennebula/virtual_network_pool.rb
85
+ - lib/opennebula/x509_auth.rb
86
+ - lib/opennebula/xml_element.rb
87
+ - lib/opennebula/xml_pool.rb
88
+ - lib/opennebula/xml_utils.rb
89
+ - lib/opennebula/zone.rb
90
+ - lib/opennebula/zone_pool.rb
96
91
  homepage: http://opennebula.org
97
92
  licenses: []
93
+ metadata: {}
98
94
  post_install_message:
99
95
  rdoc_options: []
100
96
  require_paths:
101
97
  - lib
102
98
  required_ruby_version: !ruby/object:Gem::Requirement
103
- none: false
104
99
  requirements:
105
- - - ! '>='
100
+ - - ">="
106
101
  - !ruby/object:Gem::Version
107
102
  version: '0'
108
103
  required_rubygems_version: !ruby/object:Gem::Requirement
109
- none: false
110
104
  requirements:
111
- - - ! '>='
105
+ - - ">"
112
106
  - !ruby/object:Gem::Version
113
- version: '0'
107
+ version: 1.3.1
114
108
  requirements: []
115
109
  rubyforge_project:
116
- rubygems_version: 1.8.23
110
+ rubygems_version: 2.2.2
117
111
  signing_key:
118
- specification_version: 3
112
+ specification_version: 4
119
113
  summary: OpenNebula Client API
120
114
  test_files: []
121
115
  has_rdoc: