opennebula 3.9.80.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. data/LICENSE +202 -0
  2. data/NOTICE +47 -0
  3. data/lib/opennebula.rb +58 -0
  4. data/lib/opennebula/acl.rb +266 -0
  5. data/lib/opennebula/acl_pool.rb +55 -0
  6. data/lib/opennebula/client.rb +119 -0
  7. data/lib/opennebula/cluster.rb +249 -0
  8. data/lib/opennebula/cluster_pool.rb +58 -0
  9. data/lib/opennebula/datastore.rb +171 -0
  10. data/lib/opennebula/datastore_pool.rb +55 -0
  11. data/lib/opennebula/document.rb +261 -0
  12. data/lib/opennebula/document_json.rb +131 -0
  13. data/lib/opennebula/document_pool.rb +102 -0
  14. data/lib/opennebula/document_pool_json.rb +58 -0
  15. data/lib/opennebula/error.rb +52 -0
  16. data/lib/opennebula/group.rb +163 -0
  17. data/lib/opennebula/group_pool.rb +56 -0
  18. data/lib/opennebula/host.rb +201 -0
  19. data/lib/opennebula/host_pool.rb +93 -0
  20. data/lib/opennebula/image.rb +297 -0
  21. data/lib/opennebula/image_pool.rb +79 -0
  22. data/lib/opennebula/ldap_auth.rb +99 -0
  23. data/lib/opennebula/ldap_auth_spec.rb +70 -0
  24. data/lib/opennebula/pool.rb +160 -0
  25. data/lib/opennebula/pool_element.rb +269 -0
  26. data/lib/opennebula/server_cipher_auth.rb +148 -0
  27. data/lib/opennebula/server_x509_auth.rb +104 -0
  28. data/lib/opennebula/ssh_auth.rb +139 -0
  29. data/lib/opennebula/system.rb +141 -0
  30. data/lib/opennebula/template.rb +213 -0
  31. data/lib/opennebula/template_pool.rb +79 -0
  32. data/lib/opennebula/user.rb +174 -0
  33. data/lib/opennebula/user_pool.rb +55 -0
  34. data/lib/opennebula/virtual_machine.rb +560 -0
  35. data/lib/opennebula/virtual_machine_pool.rb +323 -0
  36. data/lib/opennebula/virtual_network.rb +249 -0
  37. data/lib/opennebula/virtual_network_pool.rb +79 -0
  38. data/lib/opennebula/x509_auth.rb +288 -0
  39. data/lib/opennebula/xml_element.rb +427 -0
  40. data/lib/opennebula/xml_pool.rb +45 -0
  41. data/lib/opennebula/xml_utils.rb +34 -0
  42. metadata +118 -0
@@ -0,0 +1,56 @@
1
+ # -------------------------------------------------------------------------- #
2
+ # Copyright 2002-2013, OpenNebula Project (OpenNebula.org), C12G Labs #
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 GroupPool < Pool
22
+ #######################################################################
23
+ # Constants and Class attribute accessors
24
+ #######################################################################
25
+
26
+
27
+ GROUP_POOL_METHODS = {
28
+ :info => "grouppool.info"
29
+ }
30
+
31
+ #######################################################################
32
+ # Class constructor & Pool Methods
33
+ #######################################################################
34
+
35
+ # +client+ a Client object that represents a XML-RPC connection
36
+ def initialize(client)
37
+ super('GROUP_POOL','GROUP',client)
38
+ end
39
+
40
+ # Factory method to create User objects
41
+ def factory(element_xml)
42
+ OpenNebula::Group.new(element_xml,@client)
43
+ end
44
+
45
+ #######################################################################
46
+ # XML-RPC Methods for the User Object
47
+ #######################################################################
48
+
49
+ # Retrieves all the Groups in the pool.
50
+ def info()
51
+ super(GROUP_POOL_METHODS[:info])
52
+ end
53
+
54
+ alias_method :info!, :info
55
+ end
56
+ end
@@ -0,0 +1,201 @@
1
+ # -------------------------------------------------------------------------- #
2
+ # Copyright 2002-2013, OpenNebula Project (OpenNebula.org), C12G Labs #
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_element'
19
+
20
+ module OpenNebula
21
+ class Host < PoolElement
22
+ #######################################################################
23
+ # Constants and Class Methods
24
+ #######################################################################
25
+
26
+
27
+ HOST_METHODS = {
28
+ :info => "host.info",
29
+ :allocate => "host.allocate",
30
+ :delete => "host.delete",
31
+ :enable => "host.enable",
32
+ :update => "host.update",
33
+ :monitoring => "host.monitoring"
34
+ }
35
+
36
+ HOST_STATES=%w{INIT MONITORING_MONITORED MONITORED ERROR DISABLED MONITORING_ERROR}
37
+
38
+ SHORT_HOST_STATES={
39
+ "INIT" => "init",
40
+ "MONITORING_MONITORED" => "update",
41
+ "MONITORED" => "on",
42
+ "ERROR" => "err",
43
+ "DISABLED" => "off",
44
+ "MONITORING_ERROR" => "retry",
45
+ }
46
+
47
+ # Creates a Host description with just its identifier
48
+ # this method should be used to create plain Host objects.
49
+ # +id+ the id of the host
50
+ #
51
+ # Example:
52
+ # host = Host.new(Host.build_xml(3),rpc_client)
53
+ #
54
+ def Host.build_xml(pe_id=nil)
55
+ if pe_id
56
+ host_xml = "<HOST><ID>#{pe_id}</ID></HOST>"
57
+ else
58
+ host_xml = "<HOST></HOST>"
59
+ end
60
+
61
+ XMLElement.build_xml(host_xml, 'HOST')
62
+ end
63
+
64
+ # Class constructor
65
+ def initialize(xml, client)
66
+ super(xml,client)
67
+
68
+ @client = client
69
+ @pe_id = self['ID'].to_i if self['ID']
70
+ end
71
+
72
+ #######################################################################
73
+ # XML-RPC Methods for the Host
74
+ #######################################################################
75
+
76
+ # Retrieves the information of the given Host.
77
+ def info()
78
+ super(HOST_METHODS[:info], 'HOST')
79
+ end
80
+
81
+ alias_method :info!, :info
82
+
83
+ # Allocates a new Host in OpenNebula
84
+ #
85
+ # @param hostname [String] Name of the new Host.
86
+ # @param im [String] Name of the im_driver (information/monitoring)
87
+ # @param vmm [String] Name of the vmm_driver (hypervisor)
88
+ # @param tm [String] Name of the vnm_driver (networking)
89
+ # @param cluster_id [String] Id of the cluster
90
+ #
91
+ # @return [Integer, OpenNebula::Error] the new ID in case of
92
+ # success, error otherwise
93
+ def allocate(hostname,im,vmm,vnm,cluster_id=ClusterPool::NONE_CLUSTER_ID)
94
+ super(HOST_METHODS[:allocate],hostname,im,vmm,vnm,cluster_id)
95
+ end
96
+
97
+ # Deletes the Host
98
+ def delete()
99
+ super(HOST_METHODS[:delete])
100
+ end
101
+
102
+ # Enables the Host
103
+ def enable()
104
+ set_enabled(true)
105
+ end
106
+
107
+ # Disables the Host
108
+ def disable()
109
+ set_enabled(false)
110
+ end
111
+
112
+ def flush()
113
+ self.disable
114
+
115
+ vm_pool = OpenNebula::VirtualMachinePool.new(@client,
116
+ VirtualMachinePool::INFO_ALL_VM)
117
+
118
+ rc = vm_pool.info
119
+ if OpenNebula.is_error?(rc)
120
+ puts rc.message
121
+ exit -1
122
+ end
123
+
124
+ vm_pool.each do |vm|
125
+ hid = vm['HISTORY_RECORDS/HISTORY[last()]/HID']
126
+ if hid == self['ID']
127
+ vm.resched
128
+ end
129
+ end
130
+ end
131
+
132
+ # Replaces the template contents
133
+ #
134
+ # +new_template+ New template contents
135
+ def update(new_template)
136
+ super(HOST_METHODS[:update], new_template)
137
+ end
138
+
139
+ # Retrieves this Host's monitoring data from OpenNebula
140
+ #
141
+ # @param [Array<String>] xpath_expressions Elements to retrieve.
142
+ #
143
+ # @return [Hash<String, Array<Array<int>>>, OpenNebula::Error] Hash with
144
+ # the requested xpath expressions, and an Array of 'timestamp, value'.
145
+ #
146
+ # @example
147
+ # host.monitoring( ['HOST_SHARE/FREE_CPU', 'HOST_SHARE/RUNNING_VMS'] )
148
+ #
149
+ # { "HOST_SHARE/RUNNING_VMS" =>
150
+ # [["1337266000", "1"],
151
+ # ["1337266044", "1"],
152
+ # ["1337266088", "3"]],
153
+ # "HOST_SHARE/FREE_CPU" =>
154
+ # [["1337266000", "800"],
155
+ # ["1337266044", "800"],
156
+ # ["1337266088", "800"]]
157
+ # }
158
+ def monitoring(xpath_expressions)
159
+ return super(HOST_METHODS[:monitoring], 'HOST',
160
+ 'LAST_MON_TIME', xpath_expressions)
161
+ end
162
+
163
+ # Retrieves this Host's monitoring data from OpenNebula, in XML
164
+ #
165
+ # @return [String] Monitoring data, in XML
166
+ def monitoring_xml()
167
+ return Error.new('ID not defined') if !@pe_id
168
+
169
+ return @client.call(HOST_METHODS[:monitoring], @pe_id)
170
+ end
171
+
172
+ #######################################################################
173
+ # Helpers to get Host information
174
+ #######################################################################
175
+
176
+ # Returns the state of the Host (numeric value)
177
+ def state
178
+ self['STATE'].to_i
179
+ end
180
+
181
+ # Returns the state of the Host (string value)
182
+ def state_str
183
+ HOST_STATES[state]
184
+ end
185
+
186
+ # Returns the state of the Host (string value)
187
+ def short_state_str
188
+ SHORT_HOST_STATES[state_str]
189
+ end
190
+
191
+ private
192
+ def set_enabled(enabled)
193
+ return Error.new('ID not defined') if !@pe_id
194
+
195
+ rc = @client.call(HOST_METHODS[:enable], @pe_id, enabled)
196
+ rc = nil if !OpenNebula.is_error?(rc)
197
+
198
+ return rc
199
+ end
200
+ end
201
+ end
@@ -0,0 +1,93 @@
1
+ # -------------------------------------------------------------------------- #
2
+ # Copyright 2002-2013, OpenNebula Project (OpenNebula.org), C12G Labs #
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 HostPool < Pool
22
+ #######################################################################
23
+ # Constants and Class attribute accessors
24
+ #######################################################################
25
+
26
+
27
+ HOST_POOL_METHODS = {
28
+ :info => "hostpool.info",
29
+ :monitoring => "hostpool.monitoring"
30
+ }
31
+
32
+ #######################################################################
33
+ # Class constructor & Pool Methods
34
+ #######################################################################
35
+
36
+
37
+ # +client+ a Client object that represents a XML-RPC connection
38
+ def initialize(client)
39
+ super('HOST_POOL','HOST',client)
40
+ end
41
+
42
+ # Factory Method for the Host Pool
43
+ def factory(element_xml)
44
+ OpenNebula::Host.new(element_xml,@client)
45
+ end
46
+
47
+ #######################################################################
48
+ # XML-RPC Methods for the Host Pool
49
+ #######################################################################
50
+
51
+ # Retrieves all the Hosts in the pool.
52
+ def info()
53
+ super(HOST_POOL_METHODS[:info])
54
+ end
55
+
56
+ alias_method :info!, :info
57
+
58
+ # Retrieves the monitoring data for all the Hosts in the pool
59
+ #
60
+ # @param [Array<String>] xpath_expressions Elements to retrieve.
61
+ #
62
+ # @return [Hash<String, <Hash<String, Array<Array<int>>>>>,
63
+ # OpenNebula::Error] The first level hash uses the Host ID as keys,
64
+ # and as value a Hash with the requested xpath expressions,
65
+ # and an Array of 'timestamp, value'.
66
+ #
67
+ # @example
68
+ # host_pool.monitoring(
69
+ # ['HOST_SHARE/FREE_CPU',
70
+ # 'HOST_SHARE/RUNNING_VMS',
71
+ # 'TEMPLATE/CUSTOM_PROBE'] )
72
+ #
73
+ # {"1"=>
74
+ # {"TEMPLATE/CUSTOM_PROBE"=>[],
75
+ # "HOST_SHARE/FREE_CPU"=>[["1337609673", "800"]],
76
+ # "HOST_SHARE/RUNNING_VMS"=>[["1337609673", "3"]]},
77
+ # "0"=>
78
+ # {"TEMPLATE/CUSTOM_PROBE"=>[],
79
+ # "HOST_SHARE/FREE_CPU"=>[["1337609673", "800"]],
80
+ # "HOST_SHARE/RUNNING_VMS"=>[["1337609673", "3"]]}}
81
+ def monitoring(xpath_expressions)
82
+ return super(HOST_POOL_METHODS[:monitoring],
83
+ 'HOST', 'LAST_MON_TIME', xpath_expressions)
84
+ end
85
+
86
+ # Retrieves the monitoring data for all the Hosts in the pool, in XML
87
+ #
88
+ # @return [String] VM monitoring data, in XML
89
+ def monitoring_xml()
90
+ return @client.call(HOST_POOL_METHODS[:monitoring])
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,297 @@
1
+ # -------------------------------------------------------------------------- #
2
+ # Copyright 2002-2013, OpenNebula Project (OpenNebula.org), C12G Labs #
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_element'
19
+ require 'fileutils'
20
+
21
+ module OpenNebula
22
+ class Image < PoolElement
23
+ #######################################################################
24
+ # Constants and Class Methods
25
+ #######################################################################
26
+
27
+
28
+ IMAGE_METHODS = {
29
+ :info => "image.info",
30
+ :allocate => "image.allocate",
31
+ :update => "image.update",
32
+ :enable => "image.enable",
33
+ :persistent => "image.persistent",
34
+ :delete => "image.delete",
35
+ :chown => "image.chown",
36
+ :chmod => "image.chmod",
37
+ :chtype => "image.chtype",
38
+ :clone => "image.clone",
39
+ :rename => "image.rename"
40
+ }
41
+
42
+ IMAGE_STATES=%w{INIT READY USED DISABLED LOCKED ERROR CLONE DELETE USED_PERS}
43
+
44
+ SHORT_IMAGE_STATES={
45
+ "INIT" => "init",
46
+ "READY" => "rdy",
47
+ "USED" => "used",
48
+ "DISABLED" => "disa",
49
+ "LOCKED" => "lock",
50
+ "ERROR" => "err",
51
+ "CLONE" => "clon",
52
+ "DELETE" => "dele",
53
+ "USED_PERS" => "used"
54
+ }
55
+
56
+ IMAGE_TYPES=%w{OS CDROM DATABLOCK KERNEL RAMDISK CONTEXT}
57
+
58
+ SHORT_IMAGE_TYPES={
59
+ "OS" => "OS",
60
+ "CDROM" => "CD",
61
+ "DATABLOCK" => "DB",
62
+ "KERNEL" => "KL",
63
+ "RAMDISK" => "RD",
64
+ "CONTEXT" => "CX"
65
+ }
66
+
67
+ DISK_TYPES=%w{FILE CD_ROM BLOCK RBD}
68
+
69
+ # Creates an Image description with just its identifier
70
+ # this method should be used to create plain Image objects.
71
+ # +id+ the id of the image
72
+ #
73
+ # Example:
74
+ # image = Image.new(Image.build_xml(3),rpc_client)
75
+ #
76
+ def Image.build_xml(pe_id=nil)
77
+ if pe_id
78
+ image_xml = "<IMAGE><ID>#{pe_id}</ID></IMAGE>"
79
+ else
80
+ image_xml = "<IMAGE></IMAGE>"
81
+ end
82
+
83
+ XMLElement.build_xml(image_xml,'IMAGE')
84
+ end
85
+
86
+ # Class constructor
87
+ def initialize(xml, client)
88
+ super(xml,client)
89
+
90
+ @client = client
91
+ end
92
+
93
+ #######################################################################
94
+ # XML-RPC Methods for the Image Object
95
+ #######################################################################
96
+
97
+ # Retrieves the information of the given Image.
98
+ def info()
99
+ super(IMAGE_METHODS[:info], 'IMAGE')
100
+ end
101
+
102
+ alias_method :info!, :info
103
+
104
+ # Allocates a new Image in OpenNebula
105
+ #
106
+ # @param description [String] A string containing the template of the Image.
107
+ # @param ds_id [Integer] the target datastore ID
108
+ #
109
+ # @return [nil, OpenNebula::Error] nil in case of success, Error
110
+ # otherwise
111
+ def allocate(description, ds_id)
112
+ super(IMAGE_METHODS[:allocate],description, ds_id)
113
+ end
114
+
115
+ # Replaces the template contents
116
+ #
117
+ # +new_template+ New template contents. If no argument is provided
118
+ # the object will be updated using the @xml variable
119
+ def update(new_template=nil)
120
+ super(IMAGE_METHODS[:update], new_template)
121
+ end
122
+
123
+ # Enables an Image
124
+ def enable
125
+ set_enabled(true)
126
+ end
127
+
128
+ # Disables an Image
129
+ def disable
130
+ set_enabled(false)
131
+ end
132
+
133
+ # Publishes the Image, to be used by other users
134
+ def publish
135
+ set_publish(true)
136
+ end
137
+
138
+ # Unplubishes the Image
139
+ def unpublish
140
+ set_publish(false)
141
+ end
142
+
143
+ # Makes the Image persistent
144
+ def persistent
145
+ set_persistent(true)
146
+ end
147
+
148
+ # Makes the Image non persistent
149
+ def nonpersistent
150
+ set_persistent(false)
151
+ end
152
+
153
+ # Deletes the Image
154
+ def delete()
155
+ super(IMAGE_METHODS[:delete])
156
+ end
157
+
158
+ # Changes the owner/group
159
+ # uid:: _Integer_ the new owner id. Set to -1 to leave the current one
160
+ # gid:: _Integer_ the new group id. Set to -1 to leave the current one
161
+ # [return] nil in case of success or an Error object
162
+ def chown(uid, gid)
163
+ super(IMAGE_METHODS[:chown], uid, gid)
164
+ end
165
+
166
+ # Changes the Image permissions.
167
+ #
168
+ # @param octet [String] Permissions octed , e.g. 640
169
+ # @return [nil, OpenNebula::Error] nil in case of success, Error
170
+ # otherwise
171
+ def chmod_octet(octet)
172
+ super(IMAGE_METHODS[:chmod], octet)
173
+ end
174
+
175
+ # Changes the Image permissions.
176
+ # Each [Integer] argument must be 1 to allow, 0 deny, -1 do not change
177
+ #
178
+ # @return [nil, OpenNebula::Error] nil in case of success, Error
179
+ # otherwise
180
+ def chmod(owner_u, owner_m, owner_a, group_u, group_m, group_a, other_u,
181
+ other_m, other_a)
182
+ super(IMAGE_METHODS[:chmod], owner_u, owner_m, owner_a, group_u,
183
+ group_m, group_a, other_u, other_m, other_a)
184
+ end
185
+
186
+ # Changes the Image type
187
+ # @param type [String] new Image type
188
+ # @return [nil, OpenNebula::Error] nil in case of success, Error
189
+ # otherwise
190
+ def chtype(type)
191
+ return Error.new('ID not defined') if !@pe_id
192
+
193
+ rc = @client.call(IMAGE_METHODS[:chtype], @pe_id, type)
194
+ rc = nil if !OpenNebula.is_error?(rc)
195
+
196
+ return rc
197
+ end
198
+
199
+ # Clones this Image into a new one
200
+ #
201
+ # @param [String] name for the new Image.
202
+ #
203
+ # @return [Integer, OpenNebula::Error] The new Image ID in case
204
+ # of success, Error otherwise
205
+ def clone(name)
206
+ return Error.new('ID not defined') if !@pe_id
207
+
208
+ rc = @client.call(IMAGE_METHODS[:clone], @pe_id, name)
209
+
210
+ return rc
211
+ end
212
+
213
+ # Renames this Image
214
+ #
215
+ # @param name [String] New name for the Image.
216
+ #
217
+ # @return [nil, OpenNebula::Error] nil in case of success, Error
218
+ # otherwise
219
+ def rename(name)
220
+ return call(IMAGE_METHODS[:rename], @pe_id, name)
221
+ end
222
+
223
+ #######################################################################
224
+ # Helpers to get Image information
225
+ #######################################################################
226
+
227
+ # Returns the state of the Image (numeric value)
228
+ def state
229
+ self['STATE'].to_i
230
+ end
231
+
232
+ # Returns the state of the Image (string value)
233
+ def state_str
234
+ IMAGE_STATES[state]
235
+ end
236
+
237
+ # Returns the state of the Image (string value)
238
+ def short_state_str
239
+ SHORT_IMAGE_STATES[state_str]
240
+ end
241
+
242
+ # Returns the type of the Image (numeric value)
243
+ def type
244
+ self['TYPE'].to_i
245
+ end
246
+
247
+ # Returns the type of the Image (string value)
248
+ def type_str
249
+ IMAGE_TYPES[type]
250
+ end
251
+
252
+ # Returns the state of the Image (string value)
253
+ def short_type_str
254
+ SHORT_IMAGE_TYPES[type_str]
255
+ end
256
+
257
+ # Returns the group identifier
258
+ # [return] _Integer_ the element's group ID
259
+ def gid
260
+ self['GID'].to_i
261
+ end
262
+
263
+ def public?
264
+ if self['PERMISSIONS/GROUP_U'] == "1" || self['PERMISSIONS/OTHER_U'] == "1"
265
+ true
266
+ else
267
+ false
268
+ end
269
+ end
270
+
271
+ private
272
+
273
+ def set_enabled(enabled)
274
+ return Error.new('ID not defined') if !@pe_id
275
+
276
+ rc = @client.call(IMAGE_METHODS[:enable], @pe_id, enabled)
277
+ rc = nil if !OpenNebula.is_error?(rc)
278
+
279
+ return rc
280
+ end
281
+
282
+ def set_publish(published)
283
+ group_u = published ? 1 : 0
284
+
285
+ chmod(-1, -1, -1, group_u, -1, -1, -1, -1, -1)
286
+ end
287
+
288
+ def set_persistent(persistence)
289
+ return Error.new('ID not defined') if !@pe_id
290
+
291
+ rc = @client.call(IMAGE_METHODS[:persistent], @pe_id, persistence)
292
+ rc = nil if !OpenNebula.is_error?(rc)
293
+
294
+ return rc
295
+ end
296
+ end
297
+ end