opennebula 4.6.1 → 4.7.80.beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: