oca 3.0.1 → 3.2.1
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.
- data/lib/OpenNebula.rb +28 -35
- data/lib/OpenNebula/Acl.rb +9 -19
- data/lib/OpenNebula/AclPool.rb +4 -3
- data/lib/OpenNebula/Group.rb +14 -15
- data/lib/OpenNebula/GroupPool.rb +10 -8
- data/lib/OpenNebula/Host.rb +12 -11
- data/lib/OpenNebula/HostPool.rb +5 -2
- data/lib/OpenNebula/Image.rb +53 -11
- data/lib/OpenNebula/ImagePool.rb +5 -3
- data/lib/OpenNebula/Pool.rb +46 -6
- data/lib/OpenNebula/Template.rb +42 -15
- data/lib/OpenNebula/TemplatePool.rb +10 -7
- data/lib/OpenNebula/User.rb +53 -13
- data/lib/OpenNebula/UserPool.rb +9 -8
- data/lib/OpenNebula/VirtualMachine.rb +39 -9
- data/lib/OpenNebula/VirtualMachinePool.rb +8 -5
- data/lib/OpenNebula/VirtualNetwork.rb +77 -14
- data/lib/OpenNebula/VirtualNetworkPool.rb +5 -3
- data/lib/OpenNebula/XMLUtils.rb +4 -7
- metadata +1 -1
@@ -1,5 +1,5 @@
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
2
|
-
# Copyright 2002-
|
2
|
+
# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org) #
|
3
3
|
# #
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
@@ -14,6 +14,7 @@
|
|
14
14
|
# limitations under the License. #
|
15
15
|
#--------------------------------------------------------------------------- #
|
16
16
|
|
17
|
+
|
17
18
|
require 'OpenNebula/Pool'
|
18
19
|
|
19
20
|
module OpenNebula
|
@@ -21,6 +22,8 @@ module OpenNebula
|
|
21
22
|
#######################################################################
|
22
23
|
# Constants and Class Methods
|
23
24
|
#######################################################################
|
25
|
+
|
26
|
+
|
24
27
|
VM_METHODS = {
|
25
28
|
:info => "vm.info",
|
26
29
|
:allocate => "vm.allocate",
|
@@ -28,7 +31,8 @@ module OpenNebula
|
|
28
31
|
:migrate => "vm.migrate",
|
29
32
|
:deploy => "vm.deploy",
|
30
33
|
:savedisk => "vm.savedisk",
|
31
|
-
:chown => "vm.chown"
|
34
|
+
:chown => "vm.chown",
|
35
|
+
:chmod => "vm.chmod",
|
32
36
|
}
|
33
37
|
|
34
38
|
VM_STATE=%w{INIT PENDING HOLD ACTIVE STOPPED SUSPENDED DONE FAILED}
|
@@ -101,14 +105,9 @@ module OpenNebula
|
|
101
105
|
reason_str
|
102
106
|
end
|
103
107
|
|
104
|
-
#######################################################################
|
105
108
|
# Class constructor
|
106
|
-
#######################################################################
|
107
109
|
def initialize(xml, client)
|
108
110
|
super(xml,client)
|
109
|
-
|
110
|
-
@element_name = "VM"
|
111
|
-
@client = client
|
112
111
|
end
|
113
112
|
|
114
113
|
#######################################################################
|
@@ -145,6 +144,11 @@ module OpenNebula
|
|
145
144
|
action('shutdown')
|
146
145
|
end
|
147
146
|
|
147
|
+
# Shutdowns an already deployed VM
|
148
|
+
def reboot
|
149
|
+
action('reboot')
|
150
|
+
end
|
151
|
+
|
148
152
|
# Cancels a running VM
|
149
153
|
def cancel
|
150
154
|
action('cancel')
|
@@ -216,13 +220,19 @@ module OpenNebula
|
|
216
220
|
# @param disk_id [Integer] ID of the disk to be saved
|
217
221
|
# @param image_name [String] Name for the new image where the
|
218
222
|
# disk will be saved
|
223
|
+
# @param image_type [String] Type of the new image. Set to empty string
|
224
|
+
# to use the default type
|
219
225
|
#
|
220
226
|
# @return [Integer, OpenNebula::Error] the new Image ID in case of
|
221
227
|
# success, error otherwise
|
222
|
-
def save_as(disk_id, image_name)
|
228
|
+
def save_as(disk_id, image_name, image_type="")
|
223
229
|
return Error.new('ID not defined') if !@pe_id
|
224
230
|
|
225
|
-
rc = @client.call(VM_METHODS[:savedisk],
|
231
|
+
rc = @client.call(VM_METHODS[:savedisk],
|
232
|
+
@pe_id,
|
233
|
+
disk_id,
|
234
|
+
image_name,
|
235
|
+
image_type)
|
226
236
|
|
227
237
|
return rc
|
228
238
|
end
|
@@ -235,6 +245,26 @@ module OpenNebula
|
|
235
245
|
super(VM_METHODS[:chown], uid, gid)
|
236
246
|
end
|
237
247
|
|
248
|
+
# Changes the permissions.
|
249
|
+
#
|
250
|
+
# @param octet [String] Permissions octed , e.g. 640
|
251
|
+
# @return [nil, OpenNebula::Error] nil in case of success, Error
|
252
|
+
# otherwise
|
253
|
+
def chmod_octet(octet)
|
254
|
+
super(VM_METHODS[:chmod], octet)
|
255
|
+
end
|
256
|
+
|
257
|
+
# Changes the permissions.
|
258
|
+
# Each [Integer] argument must be 1 to allow, 0 deny, -1 do not change
|
259
|
+
#
|
260
|
+
# @return [nil, OpenNebula::Error] nil in case of success, Error
|
261
|
+
# otherwise
|
262
|
+
def chmod(owner_u, owner_m, owner_a, group_u, group_m, group_a, other_u,
|
263
|
+
other_m, other_a)
|
264
|
+
super(VM_METHODS[:chmod], owner_u, owner_m, owner_a, group_u,
|
265
|
+
group_m, group_a, other_u, other_m, other_a)
|
266
|
+
end
|
267
|
+
|
238
268
|
#######################################################################
|
239
269
|
# Helpers to get VirtualMachine information
|
240
270
|
#######################################################################
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
2
|
-
# Copyright 2002-
|
2
|
+
# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org) #
|
3
3
|
# #
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
@@ -14,6 +14,7 @@
|
|
14
14
|
# limitations under the License. #
|
15
15
|
#--------------------------------------------------------------------------- #
|
16
16
|
|
17
|
+
|
17
18
|
require 'OpenNebula/Pool'
|
18
19
|
|
19
20
|
module OpenNebula
|
@@ -22,6 +23,7 @@ module OpenNebula
|
|
22
23
|
# Constants and Class attribute accessors
|
23
24
|
#######################################################################
|
24
25
|
|
26
|
+
|
25
27
|
VM_POOL_METHODS = {
|
26
28
|
:info => "vmpool.info"
|
27
29
|
}
|
@@ -33,7 +35,8 @@ module OpenNebula
|
|
33
35
|
#######################################################################
|
34
36
|
# Class constructor & Pool Methods
|
35
37
|
#######################################################################
|
36
|
-
|
38
|
+
|
39
|
+
|
37
40
|
# +client+ a Client object that represents a XML-RPC connection
|
38
41
|
# +user_id+ is to refer to a Pool with VirtualMachines from that user
|
39
42
|
def initialize(client, user_id=0)
|
@@ -50,7 +53,7 @@ module OpenNebula
|
|
50
53
|
#######################################################################
|
51
54
|
# XML-RPC Methods for the Virtual Network Object
|
52
55
|
#######################################################################
|
53
|
-
|
56
|
+
|
54
57
|
# Retrieves all or part of the VirtualMachines in the pool.
|
55
58
|
# No arguments, returns the not-in-done VMs for the user
|
56
59
|
# [user_id, start_id, end_id]
|
@@ -107,9 +110,9 @@ module OpenNebula
|
|
107
110
|
-1,
|
108
111
|
INFO_NOT_DONE)
|
109
112
|
end
|
110
|
-
|
113
|
+
|
111
114
|
private
|
112
|
-
|
115
|
+
|
113
116
|
def info_filter(xml_method, who, start_id, end_id, state)
|
114
117
|
return xmlrpc_info(xml_method, who, start_id, end_id, state)
|
115
118
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
2
|
-
# Copyright 2002-
|
2
|
+
# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org) #
|
3
3
|
# #
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
@@ -14,13 +14,16 @@
|
|
14
14
|
# limitations under the License. #
|
15
15
|
#--------------------------------------------------------------------------- #
|
16
16
|
|
17
|
+
|
17
18
|
require 'OpenNebula/Pool'
|
18
19
|
|
19
20
|
module OpenNebula
|
20
21
|
class VirtualNetwork < PoolElement
|
21
|
-
|
22
|
+
#######################################################################
|
22
23
|
# Constants and Class Methods
|
23
|
-
|
24
|
+
#######################################################################
|
25
|
+
|
26
|
+
|
24
27
|
VN_METHODS = {
|
25
28
|
:info => "vn.info",
|
26
29
|
:allocate => "vn.allocate",
|
@@ -28,7 +31,11 @@ module OpenNebula
|
|
28
31
|
:delete => "vn.delete",
|
29
32
|
:addleases => "vn.addleases",
|
30
33
|
:rmleases => "vn.rmleases",
|
31
|
-
:chown => "vn.chown"
|
34
|
+
:chown => "vn.chown",
|
35
|
+
:chmod => "vn.chmod",
|
36
|
+
:update => "vn.update",
|
37
|
+
:hold => "vn.hold",
|
38
|
+
:release => "vn.release"
|
32
39
|
}
|
33
40
|
|
34
41
|
VN_TYPES=%w{RANGED FIXED}
|
@@ -58,8 +65,6 @@ module OpenNebula
|
|
58
65
|
# Class constructor
|
59
66
|
def initialize(xml, client)
|
60
67
|
super(xml,client)
|
61
|
-
|
62
|
-
@client = client
|
63
68
|
end
|
64
69
|
|
65
70
|
#######################################################################
|
@@ -77,7 +82,14 @@ module OpenNebula
|
|
77
82
|
def allocate(description)
|
78
83
|
super(VN_METHODS[:allocate],description)
|
79
84
|
end
|
80
|
-
|
85
|
+
|
86
|
+
# Replaces the template contents
|
87
|
+
#
|
88
|
+
# +new_template+ New template contents
|
89
|
+
def update(new_template)
|
90
|
+
super(VN_METHODS[:update], new_template)
|
91
|
+
end
|
92
|
+
|
81
93
|
# Publishes the VirtualNetwork, to be used by other users
|
82
94
|
def publish
|
83
95
|
set_publish(true)
|
@@ -119,6 +131,32 @@ module OpenNebula
|
|
119
131
|
return rc
|
120
132
|
end
|
121
133
|
|
134
|
+
# Holds a virtual network Lease as used
|
135
|
+
# @param ip [String] IP to hold
|
136
|
+
def hold(ip)
|
137
|
+
return Error.new('ID not defined') if !@pe_id
|
138
|
+
|
139
|
+
lease_template = "LEASES = [ IP = #{ip} ]"
|
140
|
+
|
141
|
+
rc = @client.call(VN_METHODS[:hold], @pe_id, lease_template)
|
142
|
+
rc = nil if !OpenNebula.is_error?(rc)
|
143
|
+
|
144
|
+
return rc
|
145
|
+
end
|
146
|
+
|
147
|
+
# Releases a virtual network Lease on hold
|
148
|
+
# @param ip [String] IP to release
|
149
|
+
def release(ip)
|
150
|
+
return Error.new('ID not defined') if !@pe_id
|
151
|
+
|
152
|
+
lease_template = "LEASES = [ IP = #{ip} ]"
|
153
|
+
|
154
|
+
rc = @client.call(VN_METHODS[:release], @pe_id, lease_template)
|
155
|
+
rc = nil if !OpenNebula.is_error?(rc)
|
156
|
+
|
157
|
+
return rc
|
158
|
+
end
|
159
|
+
|
122
160
|
# Changes the owner/group
|
123
161
|
# uid:: _Integer_ the new owner id. Set to -1 to leave the current one
|
124
162
|
# gid:: _Integer_ the new group id. Set to -1 to leave the current one
|
@@ -127,9 +165,29 @@ module OpenNebula
|
|
127
165
|
super(VN_METHODS[:chown], uid, gid)
|
128
166
|
end
|
129
167
|
|
130
|
-
#
|
168
|
+
# Changes the virtual network permissions.
|
169
|
+
#
|
170
|
+
# @param octet [String] Permissions octed , e.g. 640
|
171
|
+
# @return [nil, OpenNebula::Error] nil in case of success, Error
|
172
|
+
# otherwise
|
173
|
+
def chmod_octet(octet)
|
174
|
+
super(VN_METHODS[:chmod], octet)
|
175
|
+
end
|
176
|
+
|
177
|
+
# Changes the virtual network permissions.
|
178
|
+
# Each [Integer] argument must be 1 to allow, 0 deny, -1 do not change
|
179
|
+
#
|
180
|
+
# @return [nil, OpenNebula::Error] nil in case of success, Error
|
181
|
+
# otherwise
|
182
|
+
def chmod(owner_u, owner_m, owner_a, group_u, group_m, group_a, other_u,
|
183
|
+
other_m, other_a)
|
184
|
+
super(VN_METHODS[:chmod], owner_u, owner_m, owner_a, group_u,
|
185
|
+
group_m, group_a, other_u, other_m, other_a)
|
186
|
+
end
|
187
|
+
|
188
|
+
#######################################################################
|
131
189
|
# Helpers to get VirtualNetwork information
|
132
|
-
|
190
|
+
#######################################################################
|
133
191
|
|
134
192
|
# Returns the group identifier
|
135
193
|
# [return] _Integer_ the element's group ID
|
@@ -152,14 +210,19 @@ module OpenNebula
|
|
152
210
|
SHORT_VN_TYPES[type_str]
|
153
211
|
end
|
154
212
|
|
213
|
+
def public?
|
214
|
+
if self['PERMISSIONS/GROUP_U'] == "1" || self['PERMISSIONS/OTHER_U'] == "1"
|
215
|
+
true
|
216
|
+
else
|
217
|
+
false
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
155
221
|
private
|
156
222
|
def set_publish(published)
|
157
|
-
|
223
|
+
group_u = published ? 1 : 0
|
158
224
|
|
159
|
-
|
160
|
-
rc = nil if !OpenNebula.is_error?(rc)
|
161
|
-
|
162
|
-
return rc
|
225
|
+
chmod(-1, -1, -1, group_u, -1, -1, -1, -1, -1)
|
163
226
|
end
|
164
227
|
|
165
228
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
2
|
-
# Copyright 2002-
|
2
|
+
# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org) #
|
3
3
|
# #
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
@@ -14,6 +14,7 @@
|
|
14
14
|
# limitations under the License. #
|
15
15
|
#--------------------------------------------------------------------------- #
|
16
16
|
|
17
|
+
|
17
18
|
require 'OpenNebula/Pool'
|
18
19
|
|
19
20
|
module OpenNebula
|
@@ -21,7 +22,8 @@ module OpenNebula
|
|
21
22
|
#######################################################################
|
22
23
|
# Constants and Class attribute accessors
|
23
24
|
#######################################################################
|
24
|
-
|
25
|
+
|
26
|
+
|
25
27
|
VN_POOL_METHODS = {
|
26
28
|
:info => "vnpool.info"
|
27
29
|
}
|
@@ -29,7 +31,7 @@ module OpenNebula
|
|
29
31
|
#######################################################################
|
30
32
|
# Class constructor & Pool Methods
|
31
33
|
#######################################################################
|
32
|
-
|
34
|
+
|
33
35
|
# +client+ a Client object that represents a XML-RPC connection
|
34
36
|
# +user_id+ is to refer to a Pool with VirtualNetworks from that user
|
35
37
|
def initialize(client, user_id=0)
|
data/lib/OpenNebula/XMLUtils.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
2
|
-
# Copyright 2002-
|
2
|
+
# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org) #
|
3
3
|
# #
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
@@ -14,6 +14,7 @@
|
|
14
14
|
# limitations under the License. #
|
15
15
|
#--------------------------------------------------------------------------- #
|
16
16
|
|
17
|
+
|
17
18
|
module OpenNebula
|
18
19
|
|
19
20
|
begin
|
@@ -30,11 +31,9 @@ module OpenNebula
|
|
30
31
|
REXML_FORMATTERS=false
|
31
32
|
end
|
32
33
|
|
33
|
-
###########################################################################
|
34
34
|
# The XMLElement class provides an abstraction of the underlying
|
35
35
|
# XML parser engine. It provides XML-related methods for the Pool and
|
36
36
|
# PoolElement classes
|
37
|
-
###########################################################################
|
38
37
|
class XMLElement
|
39
38
|
|
40
39
|
# xml:: _opaque xml object_ an xml object as returned by build_xml
|
@@ -202,7 +201,7 @@ module OpenNebula
|
|
202
201
|
template_like_str('TEMPLATE', indent)
|
203
202
|
end
|
204
203
|
|
205
|
-
def template_like_str(root_element, indent=true)
|
204
|
+
def template_like_str(root_element, indent=true, xpath_exp=nil)
|
206
205
|
if NOKOGIRI
|
207
206
|
xml_template=@xml.xpath(root_element).to_s
|
208
207
|
rexml=REXML::Document.new(xml_template).root
|
@@ -218,7 +217,7 @@ module OpenNebula
|
|
218
217
|
ind_tab=' '
|
219
218
|
end
|
220
219
|
|
221
|
-
str=rexml.collect {|n|
|
220
|
+
str=rexml.elements.collect(xpath_exp) {|n|
|
222
221
|
if n.class==REXML::Element
|
223
222
|
str_line=""
|
224
223
|
if n.has_elements?
|
@@ -310,10 +309,8 @@ module OpenNebula
|
|
310
309
|
end
|
311
310
|
end
|
312
311
|
|
313
|
-
###########################################################################
|
314
312
|
# The XMLUtilsPool module provides an abstraction of the underlying
|
315
313
|
# XML parser engine. It provides XML-related methods for the Pools
|
316
|
-
###########################################################################
|
317
314
|
class XMLPool < XMLElement
|
318
315
|
|
319
316
|
def initialize(xml=nil)
|