ovirt 0.1.0
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 +15 -0
- data/.rspec +3 -0
- data/LICENSE.txt +13 -0
- data/README.md +35 -0
- data/lib/ovirt/api.rb +31 -0
- data/lib/ovirt/cdrom.rb +12 -0
- data/lib/ovirt/cluster.rb +27 -0
- data/lib/ovirt/data_center.rb +24 -0
- data/lib/ovirt/disk.rb +30 -0
- data/lib/ovirt/domain.rb +12 -0
- data/lib/ovirt/event.rb +492 -0
- data/lib/ovirt/event_monitor.rb +36 -0
- data/lib/ovirt/exception.rb +13 -0
- data/lib/ovirt/file.rb +13 -0
- data/lib/ovirt/group.rb +12 -0
- data/lib/ovirt/host.rb +44 -0
- data/lib/ovirt/host_nic.rb +38 -0
- data/lib/ovirt/inventory.rb +177 -0
- data/lib/ovirt/network.rb +16 -0
- data/lib/ovirt/nic.rb +31 -0
- data/lib/ovirt/object.rb +315 -0
- data/lib/ovirt/permission.rb +20 -0
- data/lib/ovirt/permit.rb +14 -0
- data/lib/ovirt/role.rb +13 -0
- data/lib/ovirt/service.rb +332 -0
- data/lib/ovirt/snapshot.rb +28 -0
- data/lib/ovirt/statistic.rb +37 -0
- data/lib/ovirt/storage.rb +14 -0
- data/lib/ovirt/storage_domain.rb +48 -0
- data/lib/ovirt/tag.rb +23 -0
- data/lib/ovirt/template.rb +185 -0
- data/lib/ovirt/user.rb +15 -0
- data/lib/ovirt/version.rb +3 -0
- data/lib/ovirt/vm.rb +327 -0
- data/lib/ovirt/vmpool.rb +14 -0
- data/lib/ovirt.rb +35 -0
- data/spec/event_spec.rb +26 -0
- data/spec/object_spec.rb +12 -0
- data/spec/service_spec.rb +30 -0
- data/spec/spec_helper.rb +24 -0
- data/spec/template_spec.rb +141 -0
- data/spec/vm_spec.rb +189 -0
- metadata +224 -0
data/lib/ovirt/event.rb
ADDED
@@ -0,0 +1,492 @@
|
|
1
|
+
module Ovirt
|
2
|
+
class Event < Object
|
3
|
+
|
4
|
+
self.top_level_strings = [:description, :severity]
|
5
|
+
self.top_level_integers = [:code]
|
6
|
+
self.top_level_timestamps = [:time]
|
7
|
+
self.top_level_objects = [:cdrom, :cluster, :data_center, :disk, :domain, :file, :group, :host, :host_nic, :network, :nic, :permission, :permit, :role, :snapshot, :storage, :storage_domain, :tag, :template, :user, :vm, :vmpool]
|
8
|
+
|
9
|
+
def self.parse_xml(xml)
|
10
|
+
node, hash = xml_to_hash(xml)
|
11
|
+
set_event_name(hash)
|
12
|
+
hash
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.set_event_name(hash)
|
16
|
+
hash[:name] = EVENT_CODES[hash[:code]]
|
17
|
+
unless hash[:name]
|
18
|
+
hash[:name] = "UNKNOWN"
|
19
|
+
$rhevm_log.warn "MIQ(#{self.name}.#{__method__}) Unknown RHEVM event #{hash[:code]}: #{hash[:description]}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
private_class_method :set_event_name
|
23
|
+
|
24
|
+
def to_hash
|
25
|
+
self.attributes.dup
|
26
|
+
end
|
27
|
+
|
28
|
+
EVENT_CODES = {
|
29
|
+
# Code Description
|
30
|
+
0 => "UNASSIGNED",
|
31
|
+
1 => "VDC_START",
|
32
|
+
2 => "VDC_STOP",
|
33
|
+
12 => "HOST_FAILURE",
|
34
|
+
13 => "HOST_DETECTED",
|
35
|
+
14 => "HOST_RECOVER",
|
36
|
+
15 => "HOST_MAINTENANCE",
|
37
|
+
16 => "HOST_ACTIVATE",
|
38
|
+
17 => "HOST_MAINTENANCE_FAILED",
|
39
|
+
18 => "HOST_ACTIVATE_FAILED",
|
40
|
+
19 => "HOST_RECOVER_FAILED",
|
41
|
+
20 => "USER_HOST_START",
|
42
|
+
21 => "USER_HOST_STOP",
|
43
|
+
22 => "IRS_FAILURE",
|
44
|
+
26 => "IRS_DISK_SPACE_LOW",
|
45
|
+
30 => "USER_VDC_LOGIN",
|
46
|
+
31 => "USER_VDC_LOGOUT",
|
47
|
+
32 => "USER_RUN_VM",
|
48
|
+
33 => "USER_STOP_VM",
|
49
|
+
34 => "USER_ADD_VM",
|
50
|
+
35 => "USER_UPDATE_VM",
|
51
|
+
36 => "USER_REMOVE_VM",
|
52
|
+
37 => "USER_ADD_VM_STARTED",
|
53
|
+
38 => "USER_CHANGE_DISK_VM",
|
54
|
+
39 => "USER_PAUSE_VM",
|
55
|
+
40 => "USER_RESUME_VM",
|
56
|
+
41 => "USER_HOST_RESTART",
|
57
|
+
42 => "USER_ADD_HOST",
|
58
|
+
43 => "USER_UPDATE_HOST",
|
59
|
+
44 => "USER_REMOVE_HOST",
|
60
|
+
45 => "USER_CREATE_SNAPSHOT",
|
61
|
+
46 => "USER_TRY_BACK_TO_SNAPSHOT",
|
62
|
+
47 => "USER_RESTORE_FROM_SNAPSHOT",
|
63
|
+
48 => "USER_ADD_VM_TEMPLATE",
|
64
|
+
49 => "USER_UPDATE_VM_TEMPLATE",
|
65
|
+
50 => "USER_REMOVE_VM_TEMPLATE",
|
66
|
+
51 => "USER_ADD_VM_TEMPLATE_FINISHED_SUCCESS",
|
67
|
+
52 => "USER_ADD_VM_TEMPLATE_FINISHED_FAILURE",
|
68
|
+
53 => "USER_ADD_VM_FINISHED_SUCCESS",
|
69
|
+
54 => "USER_FAILED_RUN_VM",
|
70
|
+
55 => "USER_FAILED_PAUSE_VM",
|
71
|
+
56 => "USER_FAILED_STOP_VM",
|
72
|
+
57 => "USER_FAILED_ADD_VM",
|
73
|
+
58 => "USER_FAILED_UPDATE_VM",
|
74
|
+
59 => "USER_FAILED_REMOVE_VM",
|
75
|
+
60 => "USER_ADD_VM_FINISHED_FAILURE",
|
76
|
+
61 => "VM_DOWN",
|
77
|
+
62 => "VM_MIGRATION_START",
|
78
|
+
63 => "VM_MIGRATION_DONE",
|
79
|
+
64 => "VM_MIGRATION_ABORT",
|
80
|
+
65 => "VM_MIGRATION_FAILED",
|
81
|
+
66 => "VM_FAILURE",
|
82
|
+
68 => "USER_CREATE_SNAPSHOT_FINISHED_SUCCESS",
|
83
|
+
69 => "USER_CREATE_SNAPSHOT_FINISHED_FAILURE",
|
84
|
+
70 => "USER_RUN_VM_AS_STATELESS_FINISHED_FAILURE",
|
85
|
+
71 => "USER_TRY_BACK_TO_SNAPSHOT_FINISH_SUCCESS",
|
86
|
+
72 => "USER_CHANGE_FLOPPY_VM",
|
87
|
+
73 => "USER_INITIATED_SHUTDOWN_VM",
|
88
|
+
74 => "USER_FAILED_SHUTDOWN_VM",
|
89
|
+
75 => "USER_FAILED_CHANGE_FLOPPY_VM",
|
90
|
+
76 => "USER_STOPPED_VM_INSTEAD_OF_SHUTDOWN",
|
91
|
+
77 => "USER_FAILED_STOPPING_VM_INSTEAD_OF_SHUTDOWN",
|
92
|
+
78 => "USER_ADD_DISK_TO_VM",
|
93
|
+
79 => "USER_FAILED_ADD_DISK_TO_VM",
|
94
|
+
80 => "USER_REMOVE_DISK_FROM_VM",
|
95
|
+
81 => "USER_FAILED_REMOVE_DISK_FROM_VM",
|
96
|
+
82 => "USER_MOVED_VM",
|
97
|
+
83 => "USER_FAILED_MOVE_VM",
|
98
|
+
84 => "USER_MOVED_TEMPLATE",
|
99
|
+
85 => "USER_FAILED_MOVE_TEMPLATE",
|
100
|
+
86 => "USER_COPIED_TEMPLATE",
|
101
|
+
87 => "USER_FAILED_COPY_TEMPLATE",
|
102
|
+
88 => "USER_UPDATE_VM_DISK",
|
103
|
+
89 => "USER_FAILED_UPDATE_VM_DISK",
|
104
|
+
90 => "USER_HOST_SHUTDOWN",
|
105
|
+
91 => "USER_MOVED_VM_FINISHED_SUCCESS",
|
106
|
+
92 => "USER_MOVED_VM_FINISHED_FAILURE",
|
107
|
+
93 => "USER_MOVED_TEMPLATE_FINISHED_SUCCESS",
|
108
|
+
94 => "USER_MOVED_TEMPLATE_FINISHED_FAILURE",
|
109
|
+
95 => "USER_COPIED_TEMPLATE_FINISHED_SUCCESS",
|
110
|
+
96 => "USER_COPIED_TEMPLATE_FINISHED_FAILURE",
|
111
|
+
97 => "USER_ADD_DISK_TO_VM_FINISHED_SUCCESS",
|
112
|
+
98 => "USER_ADD_DISK_TO_VM_FINISHED_FAILURE",
|
113
|
+
99 => "USER_TRY_BACK_TO_SNAPSHOT_FINISH_FAILURE",
|
114
|
+
100 => "USER_RESTORE_FROM_SNAPSHOT_FINISH_SUCCESS",
|
115
|
+
101 => "USER_RESTORE_FROM_SNAPSHOT_FINISH_FAILURE",
|
116
|
+
102 => "USER_FAILED_CHANGE_DISK_VM",
|
117
|
+
103 => "USER_FAILED_RESUME_VM",
|
118
|
+
104 => "USER_FAILED_ADD_HOST",
|
119
|
+
105 => "USER_FAILED_UPDATE_HOST",
|
120
|
+
106 => "USER_FAILED_REMOVE_HOST",
|
121
|
+
107 => "USER_FAILED_HOST_RESTART",
|
122
|
+
108 => "USER_FAILED_ADD_VM_TEMPLATE",
|
123
|
+
109 => "USER_FAILED_UPDATE_VM_TEMPLATE",
|
124
|
+
110 => "USER_FAILED_REMOVE_VM_TEMPLATE",
|
125
|
+
111 => "USER_STOP_SUSPENDED_VM",
|
126
|
+
112 => "USER_STOP_SUSPENDED_VM_FAILED",
|
127
|
+
113 => "USER_REMOVE_VM_FINISHED",
|
128
|
+
114 => "USER_VDC_LOGIN_FAILED",
|
129
|
+
115 => "USER_FAILED_TRY_BACK_TO_SNAPSHOT",
|
130
|
+
116 => "USER_FAILED_RESTORE_FROM_SNAPSHOT",
|
131
|
+
117 => "USER_FAILED_CREATE_SNAPSHOT",
|
132
|
+
118 => "USER_FAILED_HOST_START",
|
133
|
+
119 => "VM_DOWN_ERROR",
|
134
|
+
120 => "VM_MIGRATION_FAILED_FROM_TO",
|
135
|
+
121 => "SYSTEM_HOST_RESTART",
|
136
|
+
122 => "SYSTEM_FAILED_HOST_RESTART",
|
137
|
+
123 => "HOST_SLOW_STORAGE_RESPONSE_TIME",
|
138
|
+
124 => "VM_IMPORT",
|
139
|
+
125 => "VM_IMPORT_FAILED",
|
140
|
+
126 => "VM_NOT_RESPONDING",
|
141
|
+
127 => "HOST_RUN_IN_NO_KVM_MODE",
|
142
|
+
128 => "VM_MIGRATION_TRYING_RERUN",
|
143
|
+
129 => "VM_CLEARED",
|
144
|
+
130 => "USER_FAILED_HOST_SHUTDOWN",
|
145
|
+
131 => "USER_EXPORT_VM",
|
146
|
+
132 => "USER_EXPORT_VM_FAILED",
|
147
|
+
133 => "USER_EXPORT_TEMPLATE",
|
148
|
+
134 => "USER_EXPORT_TEMPLATE_FAILED",
|
149
|
+
135 => "TEMPLATE_IMPORT",
|
150
|
+
136 => "TEMPLATE_IMPORT_FAILED",
|
151
|
+
137 => "USER_FAILED_HOST_STOP",
|
152
|
+
138 => "VM_PAUSED_ENOSPC",
|
153
|
+
139 => "VM_PAUSED_ERROR",
|
154
|
+
140 => "VM_MIGRATION_FAILED_DURING_MOVE_TO_MAINTANANCE",
|
155
|
+
141 => "HOST_VERSION_NOT_SUPPORTED_FOR_CLUSTER",
|
156
|
+
142 => "VM_SET_TO_UNKNOWN_STATUS",
|
157
|
+
143 => "VM_WAS_SET_DOWN_DUE_TO_HOST_REBOOT_OR_MANUAL_FENCE",
|
158
|
+
144 => "VM_IMPORT_INFO",
|
159
|
+
145 => "VM_BLK_VIRTIO_NO_CACHE",
|
160
|
+
147 => "VM_SHUTDOWN_FAILED",
|
161
|
+
149 => "USER_ADD",
|
162
|
+
150 => "USER_INITIATED_RUN_VM",
|
163
|
+
151 => "USER_INITIATED_RUN_VM_FAILED",
|
164
|
+
152 => "USER_RUN_VM_ON_NON_DEFAULT_HOST",
|
165
|
+
153 => "USER_STARTED_VM",
|
166
|
+
182 => "USER_FAILED_ATTACH_USER_TO_VM",
|
167
|
+
201 => "IRS_DISK_SPACE_LOW_ERROR",
|
168
|
+
204 => "IRS_HOSTED_ON_HOST",
|
169
|
+
250 => "USER_UPDATE_VM_CLUSTER_DEFAULT_HOST_CLEARED",
|
170
|
+
251 => "USER_REMOVE_VM_TEMPLATE_FINISHED",
|
171
|
+
300 => "USER_ADD_VM_POOL",
|
172
|
+
301 => "USER_ADD_VM_POOL_FAILED",
|
173
|
+
302 => "USER_ADD_VM_POOL_WITH_VMS",
|
174
|
+
303 => "USER_ADD_VM_POOL_WITH_VMS_FAILED",
|
175
|
+
304 => "USER_REMOVE_VM_POOL",
|
176
|
+
305 => "USER_REMOVE_VM_POOL_FAILED",
|
177
|
+
306 => "USER_ADD_VM_TO_POOL",
|
178
|
+
307 => "USER_ADD_VM_TO_POOL_FAILED",
|
179
|
+
308 => "USER_REMOVE_VM_FROM_POOL",
|
180
|
+
309 => "USER_REMOVE_VM_FROM_POOL_FAILED",
|
181
|
+
310 => "USER_ATTACH_USER_TO_POOL",
|
182
|
+
311 => "USER_ATTACH_USER_TO_POOL_FAILED",
|
183
|
+
312 => "USER_DETACH_USER_FROM_POOL",
|
184
|
+
313 => "USER_DETACH_USER_FROM_POOL_FAILED",
|
185
|
+
314 => "USER_UPDATE_VM_POOL",
|
186
|
+
315 => "USER_UPDATE_VM_POOL_FAILED",
|
187
|
+
316 => "USER_ATTACH_USER_TO_VM_FROM_POOL",
|
188
|
+
317 => "USER_ATTACH_USER_TO_VM_FROM_POOL_FAILED",
|
189
|
+
318 => "USER_ATTACH_USER_TO_VM_FROM_POOL_FINISHED_SUCCESS",
|
190
|
+
319 => "USER_ATTACH_USER_TO_VM_FROM_POOL_FINISHED_FAILURE",
|
191
|
+
320 => "USER_ADD_VM_POOL_WITH_VMS_ADD_HOST_FAILED",
|
192
|
+
325 => "USER_REMOVE_ADUSER",
|
193
|
+
326 => "USER_FAILED_REMOVE_ADUSER",
|
194
|
+
327 => "USER_FAILED_ADD_ADUSER",
|
195
|
+
328 => "USER_ATTACH_USER_TO_TIME_LEASED_POOL",
|
196
|
+
329 => "USER_ATTACH_USER_TO_TIME_LEASED_POOL_FAILED",
|
197
|
+
330 => "USER_DETACH_USER_FROM_TIME_LEASED_POOL",
|
198
|
+
331 => "USER_DETACH_USER_FROM_TIME_LEASED_POOL_FAILED",
|
199
|
+
332 => "USER_ATTACH_AD_GROUP_TO_TIME_LEASED_POOL",
|
200
|
+
333 => "USER_ATTACH_AD_GROUP_TO_TIME_LEASED_POOL_FAILED",
|
201
|
+
334 => "USER_DETACH_AD_GROUP_FROM_TIME_LEASED_POOL",
|
202
|
+
335 => "USER_DETACH_AD_GROUP_FROM_TIME_LEASED_POOL_FAILED",
|
203
|
+
336 => "USER_UPDATE_USER_TO_TIME_LEASED_POOL",
|
204
|
+
337 => "USER_UPDATE_USER_TO_TIME_LEASED_POOL_FAILED",
|
205
|
+
338 => "USER_UPDATE_AD_GROUP_TO_TIME_LEASED_POOL",
|
206
|
+
339 => "USER_UPDATE_AD_GROUP_TO_TIME_LEASED_POOL_FAILED",
|
207
|
+
342 => "USER_MERGE_SNAPSHOT",
|
208
|
+
343 => "USER_FAILED_MERGE_SNAPSHOT",
|
209
|
+
344 => "USER_UPDATE_VM_POOL_WITH_VMS",
|
210
|
+
345 => "USER_UPDATE_VM_POOL_WITH_VMS_FAILED",
|
211
|
+
346 => "USER_PASSWORD_CHANGED",
|
212
|
+
347 => "USER_PASSWORD_CHANGE_FAILED",
|
213
|
+
348 => "USER_CLEAR_UNKNOWN_VMS",
|
214
|
+
349 => "USER_FAILED_CLEAR_UNKNOWN_VMS",
|
215
|
+
350 => "USER_ADD_BOOKMARK",
|
216
|
+
351 => "USER_ADD_BOOKMARK_FAILED",
|
217
|
+
352 => "USER_UPDATE_BOOKMARK",
|
218
|
+
353 => "USER_UPDATE_BOOKMARK_FAILED",
|
219
|
+
354 => "USER_REMOVE_BOOKMARK",
|
220
|
+
355 => "USER_REMOVE_BOOKMARK_FAILED",
|
221
|
+
356 => "USER_MERGE_SNAPSHOT_FINISHED_SUCCESS",
|
222
|
+
357 => "USER_MERGE_SNAPSHOT_FINISHED_FAILURE",
|
223
|
+
360 => "USER_DETACH_USER_FROM_VM",
|
224
|
+
361 => "USER_FAILED_DETACH_USER_FROM_VM",
|
225
|
+
400 => "USER_ATTACH_VM_TO_AD_GROUP",
|
226
|
+
401 => "USER_ATTACH_VM_TO_AD_GROUP_FAILED",
|
227
|
+
402 => "USER_DETACH_VM_TO_AD_GROUP",
|
228
|
+
403 => "USER_DETACH_VM_TO_AD_GROUP_FAILED",
|
229
|
+
404 => "USER_ATTACH_VM_POOL_TO_AD_GROUP",
|
230
|
+
405 => "USER_ATTACH_VM_POOL_TO_AD_GROUP_FAILED",
|
231
|
+
406 => "USER_DETACH_VM_POOL_TO_AD_GROUP",
|
232
|
+
407 => "USER_DETACH_VM_POOL_TO_AD_GROUP_FAILED",
|
233
|
+
408 => "USER_REMOVE_AD_GROUP",
|
234
|
+
409 => "USER_REMOVE_AD_GROUP_FAILED",
|
235
|
+
430 => "USER_UPDATE_TAG",
|
236
|
+
431 => "USER_UPDATE_TAG_FAILED",
|
237
|
+
432 => "USER_ADD_TAG",
|
238
|
+
433 => "USER_ADD_TAG_FAILED",
|
239
|
+
434 => "USER_REMOVE_TAG",
|
240
|
+
435 => "USER_REMOVE_TAG_FAILED",
|
241
|
+
436 => "USER_ATTACH_TAG_TO_USER",
|
242
|
+
437 => "USER_ATTACH_TAG_TO_USER_FAILED",
|
243
|
+
438 => "USER_ATTACH_TAG_TO_USER_GROUP",
|
244
|
+
439 => "USER_ATTACH_TAG_TO_USER_GROUP_FAILED",
|
245
|
+
440 => "USER_ATTACH_TAG_TO_VM",
|
246
|
+
441 => "USER_ATTACH_TAG_TO_VM_FAILED",
|
247
|
+
442 => "USER_ATTACH_TAG_TO_HOST",
|
248
|
+
443 => "USER_ATTACH_TAG_TO_HOST_FAILED",
|
249
|
+
444 => "USER_DETACH_HOST_FROM_TAG",
|
250
|
+
445 => "USER_DETACH_HOST_FROM_TAG_FAILED",
|
251
|
+
446 => "USER_DETACH_VM_FROM_TAG",
|
252
|
+
447 => "USER_DETACH_VM_FROM_TAG_FAILED",
|
253
|
+
448 => "USER_DETACH_USER_FROM_TAG",
|
254
|
+
449 => "USER_DETACH_USER_FROM_TAG_FAILED",
|
255
|
+
450 => "USER_DETACH_USER_GROUP_FROM_TAG",
|
256
|
+
451 => "USER_DETACH_USER_GROUP_FROM_TAG_FAILED",
|
257
|
+
452 => "USER_ATTACH_TAG_TO_USER_EXISTS",
|
258
|
+
453 => "USER_ATTACH_TAG_TO_USER_GROUP_EXISTS",
|
259
|
+
454 => "USER_ATTACH_TAG_TO_VM_EXISTS",
|
260
|
+
455 => "USER_ATTACH_TAG_TO_HOST_EXISTS",
|
261
|
+
456 => "USER_LOGGED_IN_VM",
|
262
|
+
457 => "USER_LOGGED_OUT_VM",
|
263
|
+
458 => "USER_LOCKED_VM",
|
264
|
+
459 => "USER_UNLOCKED_VM",
|
265
|
+
460 => "USER_DETACH_USER_FROM_TIME_LEASED_POOL_INTERNAL",
|
266
|
+
461 => "USER_DETACH_USER_FROM_TIME_LEASED_POOL_FAILED_INTERNAL",
|
267
|
+
462 => "USER_DETACH_AD_GROUP_FROM_TIME_LEASED_POOL_INTERNAL",
|
268
|
+
463 => "USER_DETACH_AD_GROUP_FROM_TIME_LEASED_POOL_FAILED_INTERNAL",
|
269
|
+
467 => "UPDATE_TAGS_VM_DEFAULT_DISPLAY_TYPE",
|
270
|
+
468 => "UPDATE_TAGS_VM_DEFAULT_DISPLAY_TYPE_FAILED",
|
271
|
+
470 => "USER_ATTACH_VM_POOL_TO_AD_GROUP_INTERNAL",
|
272
|
+
471 => "USER_ATTACH_VM_POOL_TO_AD_GROUP_FAILED_INTERNAL",
|
273
|
+
472 => "USER_ATTACH_USER_TO_POOL_INTERNAL",
|
274
|
+
473 => "USER_ATTACH_USER_TO_POOL_FAILED_INTERNAL",
|
275
|
+
494 => "HOST_MANUAL_FENCE_STATUS",
|
276
|
+
495 => "HOST_MANUAL_FENCE_STATUS_FAILED",
|
277
|
+
496 => "HOST_FENCE_STATUS",
|
278
|
+
497 => "HOST_FENCE_STATUS_FAILED",
|
279
|
+
498 => "HOST_APPROVE",
|
280
|
+
499 => "HOST_APPROVE_FAILED",
|
281
|
+
500 => "HOST_FAILED_TO_RUN_VMS",
|
282
|
+
501 => "USER_SUSPEND_VM",
|
283
|
+
502 => "USER_FAILED_SUSPEND_VM",
|
284
|
+
503 => "USER_SUSPEND_VM_OK",
|
285
|
+
504 => "HOST_INSTALL",
|
286
|
+
505 => "HOST_INSTALL_FAILED",
|
287
|
+
506 => "HOST_INITIATED_RUN_VM",
|
288
|
+
507 => "HOST_INITIATED_RUN_VM_FAILED",
|
289
|
+
509 => "HOST_INSTALL_IN_PROGRESS",
|
290
|
+
510 => "HOST_INSTALL_IN_PROGRESS_WARNING",
|
291
|
+
511 => "HOST_INSTALL_IN_PROGRESS_ERROR",
|
292
|
+
512 => "USER_SUSPEND_VM_FINISH_SUCCESS",
|
293
|
+
513 => "HOST_RECOVER_FAILED_VMS_UNKNOWN",
|
294
|
+
514 => "HOST_INITIALIZING",
|
295
|
+
515 => "HOST_CPU_LOWER_THAN_CLUSTER",
|
296
|
+
516 => "HOST_CPU_RETRIEVE_FAILED",
|
297
|
+
517 => "HOST_SET_NONOPERATIONAL",
|
298
|
+
518 => "HOST_SET_NONOPERATIONAL_FAILED",
|
299
|
+
519 => "HOST_SET_NONOPERATIONAL_NETWORK",
|
300
|
+
520 => "USER_ATTACH_USER_TO_VM",
|
301
|
+
521 => "USER_SUSPEND_VM_FINISH_FAILURE",
|
302
|
+
522 => "HOST_SET_NONOPERATIONAL_DOMAIN",
|
303
|
+
523 => "HOST_SET_NONOPERATIONAL_DOMAIN_FAILED",
|
304
|
+
524 => "AUTO_SUSPEND_VM",
|
305
|
+
524 => "HOST_DOMAIN_DELAY_INTERVAL",
|
306
|
+
525 => "AUTO_SUSPEND_VM_FINISH_SUCCESS",
|
307
|
+
526 => "AUTO_SUSPEND_VM_FINISH_FAILURE",
|
308
|
+
527 => "AUTO_FAILED_SUSPEND_VM",
|
309
|
+
528 => "USER_EJECT_VM_DISK",
|
310
|
+
529 => "USER_EJECT_VM_FLOPPY",
|
311
|
+
530 => "HOST_MANUAL_FENCE_FAILED_CALL_FENCE_SPM",
|
312
|
+
531 => "HOST_LOW_MEM",
|
313
|
+
533 => "HOST_FAILED_CONNECTION_TO_DATA_CENTER",
|
314
|
+
555 => "USER_MOVE_TAG",
|
315
|
+
556 => "USER_MOVE_TAG_FAILED",
|
316
|
+
600 => "USER_HOST_MAINTENANCE",
|
317
|
+
601 => "CPU_FLAGS_NX_IS_MISSING",
|
318
|
+
602 => "USER_HOST_MAINTENANCE_MIGRATION_FAILED",
|
319
|
+
603 => "HOST_SET_NONOPERATIONAL_IFACE_DOWN",
|
320
|
+
605 => "HOST_USED_AS_PROXY",
|
321
|
+
800 => "IMAGES_SYNCRONIZER_DESKTOP_NOT_EXIST_IN_VDC",
|
322
|
+
801 => "IMAGES_SYNCRONIZER_TEMPLATE_NOT_EXIST_IMAGE_EXIST",
|
323
|
+
802 => "IMAGES_SYNCRONIZER_SNAPSHOT_NOT_EXIST_IN_VDC",
|
324
|
+
803 => "IMAGES_SYNCRONIZER_SNAPSHOTS_NOT_ATTACHED_TO_VM_IN_VDC",
|
325
|
+
804 => "IMAGES_SYNCRONIZER_TEMPLATE_NOT_EXIST_IN_VDC",
|
326
|
+
805 => "IMAGES_SYNCRONIZER_DESKTOP_NOT_EXIST_IN_IRS",
|
327
|
+
806 => "IMAGES_SYNCRONIZER_SNAPSHOT_NOT_EXIST_IN_IRS",
|
328
|
+
807 => "IMAGES_SYNCRONIZER_DESKTOP_WITHOUT_TEMPLATE_VDC",
|
329
|
+
808 => "IMAGES_SYNCRONIZER_IMAGE_TEMPLATE_NOT_EXIST",
|
330
|
+
809 => "USER_ADD_HOST_GROUP",
|
331
|
+
810 => "USER_ADD_HOST_GROUP_FAILED",
|
332
|
+
811 => "USER_UPDATE_HOST_GROUP",
|
333
|
+
812 => "USER_UPDATE_HOST_GROUP_FAILED",
|
334
|
+
813 => "USER_REMOVE_HOST_GROUP",
|
335
|
+
814 => "USER_REMOVE_HOST_GROUP_FAILED",
|
336
|
+
815 => "USER_VDC_LOGOUT_FAILED",
|
337
|
+
816 => "MAC_POOL_EMPTY",
|
338
|
+
817 => "CERTIFICATE_FILE_NOT_FOUND",
|
339
|
+
818 => "RUN_VM_FAILED",
|
340
|
+
819 => "HOST_REGISTER_ERROR_UPDATING_HOST",
|
341
|
+
820 => "HOST_REGISTER_ERROR_UPDATING_HOST_ALL_TAKEN",
|
342
|
+
821 => "HOST_REGISTER_HOST_IS_ACTIVE",
|
343
|
+
822 => "HOST_REGISTER_ERROR_UPDATING_NAME",
|
344
|
+
823 => "HOST_REGISTER_ERROR_UPDATING_NAMES_ALL_TAKEN",
|
345
|
+
824 => "HOST_REGISTER_NAME_IS_ACTIVE",
|
346
|
+
825 => "HOST_REGISTER_AUTO_APPROVE_PATTERN",
|
347
|
+
826 => "HOST_REGISTER_FAILED",
|
348
|
+
827 => "HOST_REGISTER_EXISTING_HOST_UPDATE_FAILED",
|
349
|
+
828 => "HOST_REGISTER_SUCCEEDED",
|
350
|
+
829 => "VM_MIGRATION_ON_CONNECT_CHECK_FAILED",
|
351
|
+
830 => "VM_MIGRATION_ON_CONNECT_CHECK_SUCCEEDED",
|
352
|
+
831 => "USER_DEDICATE_VM_TO_POWERCLIENT",
|
353
|
+
832 => "USER_DEDICATE_VM_TO_POWERCLIENT_FAILED",
|
354
|
+
833 => "MAC_ADDRESS_IS_IN_USE",
|
355
|
+
835 => "SYSTEM_UPDATE_HOST_GROUP",
|
356
|
+
836 => "SYSTEM_UPDATE_HOST_GROUP_FAILED",
|
357
|
+
850 => "USER_ADD_PERMISSION",
|
358
|
+
851 => "USER_ADD_PERMISSION_FAILED",
|
359
|
+
852 => "USER_REMOVE_PERMISSION",
|
360
|
+
853 => "USER_REMOVE_PERMISSION_FAILED",
|
361
|
+
854 => "USER_ADD_ROLE",
|
362
|
+
855 => "USER_ADD_ROLE_FAILED",
|
363
|
+
856 => "USER_UPDATE_ROLE",
|
364
|
+
857 => "USER_UPDATE_ROLE_FAILED",
|
365
|
+
858 => "USER_REMOVE_ROLE",
|
366
|
+
859 => "USER_REMOVE_ROLE_FAILED",
|
367
|
+
860 => "USER_ATTACHED_ACTION_GROUP_TO_ROLE",
|
368
|
+
861 => "USER_ATTACHED_ACTION_GROUP_TO_ROLE_FAILED",
|
369
|
+
862 => "USER_DETACHED_ACTION_GROUP_FROM_ROLE",
|
370
|
+
863 => "USER_DETACHED_ACTION_GROUP_FROM_ROLE_FAILED",
|
371
|
+
864 => "USER_ADD_ROLE_WITH_ACTION_GROUP",
|
372
|
+
865 => "USER_ADD_ROLE_WITH_ACTION_GROUP_FAILED",
|
373
|
+
900 => "AD_COMPUTER_ACCOUNT_SUCCEEDED",
|
374
|
+
901 => "AD_COMPUTER_ACCOUNT_FAILED",
|
375
|
+
920 => "NETWORK_ATTACH_NETWORK_TO_HOST",
|
376
|
+
921 => "NETWORK_ATTACH_NETWORK_TO_HOST_FAILED",
|
377
|
+
922 => "NETWORK_DETACH_NETWORK_FROM_HOST",
|
378
|
+
923 => "NETWORK_DETACH_NETWORK_FROM_HOST_FAILED",
|
379
|
+
924 => "NETWORK_ADD_BOND",
|
380
|
+
925 => "NETWORK_ADD_BOND_FAILED",
|
381
|
+
926 => "NETWORK_REMOVE_BOND",
|
382
|
+
927 => "NETWORK_REMOVE_BOND_FAILED",
|
383
|
+
928 => "NETWORK_HOST_NETWORK_MATCH_CLUSTER",
|
384
|
+
929 => "NETWORK_HOST_NETWORK_NOT_MATCH_CLUSTER",
|
385
|
+
930 => "NETWORK_REMOVE_VM_INTERFACE",
|
386
|
+
931 => "NETWORK_REMOVE_VM_INTERFACE_FAILED",
|
387
|
+
932 => "NETWORK_ADD_VM_INTERFACE",
|
388
|
+
933 => "NETWORK_ADD_VM_INTERFACE_FAILED",
|
389
|
+
934 => "NETWORK_UPDATE_VM_INTERFACE",
|
390
|
+
935 => "NETWORK_UPDATE_VM_INTERFACE_FAILED",
|
391
|
+
936 => "NETWORK_ADD_TEMPLATE_INTERFACE",
|
392
|
+
937 => "NETWORK_ADD_TEMPLATE_INTERFACE_FAILED",
|
393
|
+
938 => "NETWORK_REMOVE_TEMPLATE_INTERFACE",
|
394
|
+
939 => "NETWORK_REMOVE_TEMPLATE_INTERFACE_FAILED",
|
395
|
+
940 => "NETWORK_UPDATE_TEMPLATE_INTERFACE",
|
396
|
+
941 => "NETWORK_UPDATE_TEMPLATE_INTERFACE_FAILED",
|
397
|
+
942 => "NETWORK_ADD_NETWORK",
|
398
|
+
943 => "NETWORK_ADD_NETWORK_FAILED",
|
399
|
+
944 => "NETWORK_REMOVE_NETWORK",
|
400
|
+
945 => "NETWORK_REMOVE_NETWORK_FAILED",
|
401
|
+
946 => "NETWORK_ATTACH_NETWORK_TO_HOST_GROUP",
|
402
|
+
947 => "NETWORK_ATTACH_NETWORK_TO_HOST_GROUP_FAILED",
|
403
|
+
948 => "NETWORK_DETACH_NETWORK_TO_HOST_GROUP",
|
404
|
+
949 => "NETWORK_DETACH_NETWORK_TO_HOST_GROUP_FAILED",
|
405
|
+
950 => "USER_ADD_STORAGE_POOL",
|
406
|
+
951 => "USER_ADD_STORAGE_POOL_FAILED",
|
407
|
+
952 => "USER_UPDATE_STORAGE_POOL",
|
408
|
+
953 => "USER_UPDATE_STORAGE_POOL_FAILED",
|
409
|
+
954 => "USER_REMOVE_STORAGE_POOL",
|
410
|
+
955 => "USER_REMOVE_STORAGE_POOL_FAILED",
|
411
|
+
956 => "USER_ADD_STORAGE_DOMAIN",
|
412
|
+
957 => "USER_ADD_STORAGE_DOMAIN_FAILED",
|
413
|
+
958 => "USER_UPDATE_STORAGE_DOMAIN",
|
414
|
+
959 => "USER_UPDATE_STORAGE_DOMAIN_FAILED",
|
415
|
+
960 => "USER_REMOVE_STORAGE_DOMAIN",
|
416
|
+
961 => "USER_REMOVE_STORAGE_DOMAIN_FAILED",
|
417
|
+
962 => "USER_ATTACH_STORAGE_DOMAIN_TO_POOL",
|
418
|
+
963 => "USER_ATTACH_STORAGE_DOMAIN_TO_POOL_FAILED",
|
419
|
+
964 => "USER_DETACH_STORAGE_DOMAIN_FROM_POOL",
|
420
|
+
965 => "USER_DETACH_STORAGE_DOMAIN_FROM_POOL_FAILED",
|
421
|
+
966 => "USER_ACTIVATED_STORAGE_DOMAIN",
|
422
|
+
967 => "USER_ACTIVATE_STORAGE_DOMAIN_FAILED",
|
423
|
+
968 => "USER_DEACTIVATED_STORAGE_DOMAIN",
|
424
|
+
969 => "USER_DEACTIVATE_STORAGE_DOMAIN_FAILED",
|
425
|
+
970 => "SYSTEM_DEACTIVATED_STORAGE_DOMAIN",
|
426
|
+
971 => "SYSTEM_DEACTIVATE_STORAGE_DOMAIN_FAILED",
|
427
|
+
972 => "USER_EXTENDED_STORAGE_DOMAIN",
|
428
|
+
973 => "USER_EXTENDED_STORAGE_DOMAIN_FAILED",
|
429
|
+
974 => "USER_REMOVE_VG",
|
430
|
+
975 => "USER_REMOVE_VG_FAILED",
|
431
|
+
976 => "USER_ACTIVATE_STORAGE_POOL",
|
432
|
+
977 => "USER_ACTIVATE_STORAGE_POOL_FAILED",
|
433
|
+
978 => "SYSTEM_FAILED_CHANGE_STORAGE_POOL_STATUS",
|
434
|
+
979 => "SYSTEM_CHANGE_STORAGE_POOL_STATUS_NO_HOST_FOR_SPM",
|
435
|
+
980 => "SYSTEM_CHANGE_STORAGE_POOL_STATUS_PROBLEMATIC",
|
436
|
+
981 => "USER_FORCE_REMOVE_STORAGE_DOMAIN",
|
437
|
+
982 => "USER_FORCE_REMOVE_STORAGE_DOMAIN_FAILED",
|
438
|
+
983 => "RECONSTRUCT_MASTER_FAILED_NO_MASTER",
|
439
|
+
984 => "RECONSTRUCT_MASTER_DONE",
|
440
|
+
985 => "RECONSTRUCT_MASTER_FAILED",
|
441
|
+
986 => "SYSTEM_CHANGE_STORAGE_POOL_STATUS_PROBLEMATIC_SEARCHING_NEW_SPM",
|
442
|
+
987 => "SYSTEM_CHANGE_STORAGE_POOL_STATUS_PROBLEMATIC_WITH_ERROR",
|
443
|
+
988 => "USER_CONNECT_HOSTS_TO_LUN_FAILED",
|
444
|
+
989 => "SYSTEM_CHANGE_STORAGE_POOL_STATUS_PROBLEMATIC_FROM_NON_OPERATIONAL",
|
445
|
+
990 => "SYSTEM_MASTER_DOMAIN_NOT_IN_SYNC",
|
446
|
+
991 => "RECOVERY_STORAGE_POOL",
|
447
|
+
992 => "RECOVERY_STORAGE_POOL_FAILED",
|
448
|
+
993 => "SYSTEM_CHANGE_STORAGE_POOL_STATUS_RESET_IRS",
|
449
|
+
994 => "CONNECT_STORAGE_SERVERS_FAILED",
|
450
|
+
995 => "CONNECT_STORAGE_POOL_FAILED",
|
451
|
+
996 => "STORAGE_DOMAIN_ERROR",
|
452
|
+
998 => "ISO_DOMAIN_REFRESH_SUCCESSFUL",
|
453
|
+
1012 => "NETWORK_INTERFACE_PLUGGED_INTO_VM",
|
454
|
+
1100 => "NETWORK_UPDATE_DISPLAY_TO_HOST_GROUP",
|
455
|
+
1101 => "NETWORK_UPDATE_DISPLAY_TO_HOST_GROUP_FAILED",
|
456
|
+
1102 => "NETWORK_UPDATE_NETWORK_TO_HOST_INTERFACE",
|
457
|
+
1103 => "NETWORK_UPDATE_NETWORK_TO_HOST_INTERFACE_FAILED",
|
458
|
+
1104 => "NETWORK_COMMINT_NETWORK_CHANGES",
|
459
|
+
1105 => "NETWORK_COMMINT_NETWORK_CHANGES_FAILED",
|
460
|
+
1106 => "NETWORK_HOST_USING_WRONG_CLUSER_VLAN",
|
461
|
+
1107 => "NETWORK_HOST_MISSING_CLUSER_VLAN",
|
462
|
+
1150 => "IMPORTEXPORT_EXPORT_VM",
|
463
|
+
1151 => "IMPORTEXPORT_EXPORT_VM_FAILED",
|
464
|
+
1152 => "IMPORTEXPORT_IMPORT_VM",
|
465
|
+
1153 => "IMPORTEXPORT_IMPORT_VM_FAILED",
|
466
|
+
1154 => "IMPORTEXPORT_REMOVE_TEMPLATE",
|
467
|
+
1155 => "IMPORTEXPORT_REMOVE_TEMPLATE_FAILED",
|
468
|
+
1156 => "IMPORTEXPORT_EXPORT_TEMPLATE",
|
469
|
+
1157 => "IMPORTEXPORT_EXPORT_TEMPLATE_FAILED",
|
470
|
+
1158 => "IMPORTEXPORT_IMPORT_TEMPLATE",
|
471
|
+
1159 => "IMPORTEXPORT_IMPORT_TEMPLATE_FAILED",
|
472
|
+
1160 => "IMPORTEXPORT_REMOVE_VM",
|
473
|
+
1161 => "IMPORTEXPORT_REMOVE_VM_FAILED",
|
474
|
+
1162 => "IMPORTEXPORT_STARTING_EXPORT_VM",
|
475
|
+
1163 => "IMPORTEXPORT_STARTING_IMPORT_TEMPLATE",
|
476
|
+
1164 => "IMPORTEXPORT_STARTING_EXPORT_TEMPLATE",
|
477
|
+
1165 => "IMPORTEXPORT_STARTING_IMPORT_VM",
|
478
|
+
1166 => "IMPORTEXPORT_STARTING_REMOVE_TEMPLATE",
|
479
|
+
1167 => "IMPORTEXPORT_STARTING_REMOVE_VM",
|
480
|
+
1168 => "IMPORTEXPORT_FAILED_TO_IMPORT_VM",
|
481
|
+
1169 => "IMPORTEXPORT_FAILED_TO_IMPORT_TEMPLATE",
|
482
|
+
1200 => "VM_RENAMED",
|
483
|
+
9000 => "HOST_ALERT_FENCING_IS_NOT_CONFIGURED",
|
484
|
+
9001 => "HOST_ALERT_FENCING_TEST_FAILED",
|
485
|
+
9002 => "HOST_ALERT_FENCING_OPERATION_FAILED",
|
486
|
+
9003 => "HOST_ALERT_FENCING_OPERATION_SKIPPED",
|
487
|
+
9004 => "HOST_ALERT_FENCING_NO_PROXY_HOST",
|
488
|
+
9500 => "TASK_STOPPING_ASYNC_TASK",
|
489
|
+
9501 => "TASK_CLEARING_ASYNC_TASK",
|
490
|
+
}
|
491
|
+
end
|
492
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Ovirt
|
2
|
+
class EventMonitor
|
3
|
+
def initialize(options={})
|
4
|
+
@options = options
|
5
|
+
end
|
6
|
+
|
7
|
+
def inventory
|
8
|
+
@inventory ||= Inventory.new(@options)
|
9
|
+
end
|
10
|
+
|
11
|
+
def start
|
12
|
+
trap(:TERM) { $rhevm_log.info "EventMonitor#start: ignoring SIGTERM" }
|
13
|
+
@since = nil
|
14
|
+
@inventory = nil
|
15
|
+
@monitor_events = true
|
16
|
+
end
|
17
|
+
|
18
|
+
def stop
|
19
|
+
@monitor_events = false
|
20
|
+
end
|
21
|
+
|
22
|
+
def each_batch
|
23
|
+
while @monitor_events do
|
24
|
+
events = inventory.events(@since).sort_by { |e| e[:id].to_i }
|
25
|
+
@since = events.last[:id].to_i unless events.empty?
|
26
|
+
yield events
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def each
|
31
|
+
each_batch do |events|
|
32
|
+
events.each { |e| yield e }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Ovirt
|
2
|
+
# Abstract RHEVM Error Class
|
3
|
+
class Error < StandardError; end
|
4
|
+
|
5
|
+
# Existence
|
6
|
+
class TemplateAlreadyExists < Error; end
|
7
|
+
class VmAlreadyExists < Error; end
|
8
|
+
|
9
|
+
# Power State
|
10
|
+
class VmAlreadyRunning < Error; end
|
11
|
+
class VmIsNotRunning < Error; end
|
12
|
+
class VmNotReadyToBoot < Error; end
|
13
|
+
end
|
data/lib/ovirt/file.rb
ADDED
data/lib/ovirt/group.rb
ADDED
data/lib/ovirt/host.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
module Ovirt
|
2
|
+
class Host < Object
|
3
|
+
|
4
|
+
self.top_level_strings = [:name, :type, :address]
|
5
|
+
self.top_level_integers = [:port]
|
6
|
+
self.top_level_booleans = [:storage_manager]
|
7
|
+
self.top_level_objects = [:cluster]
|
8
|
+
|
9
|
+
def self.parse_xml(xml)
|
10
|
+
node, hash = xml_to_hash(xml)
|
11
|
+
|
12
|
+
hash[:relationships][:host_nics] = hash[:relationships].delete(:nics)
|
13
|
+
|
14
|
+
parse_first_node(node, :status, hash,
|
15
|
+
:node => [:state])
|
16
|
+
|
17
|
+
parse_first_node(node, :power_management, hash,
|
18
|
+
:attribute => [:type],
|
19
|
+
:node => [:address, :username, :options],
|
20
|
+
:node_to_bool => [:enabled])
|
21
|
+
|
22
|
+
parse_first_node(node, :ksm, hash,
|
23
|
+
:node_to_bool => [:enabled])
|
24
|
+
|
25
|
+
parse_first_node(node, :transparent_hugepages, hash,
|
26
|
+
:node_to_bool => [:enabled])
|
27
|
+
|
28
|
+
parse_first_node(node, :iscsi, hash,
|
29
|
+
:node => [:initiator])
|
30
|
+
|
31
|
+
parse_first_node(node, :cpu, hash,
|
32
|
+
:node => [:name],
|
33
|
+
:node_to_i => [:speed])
|
34
|
+
|
35
|
+
parse_first_node_with_hash(node, 'cpu/topology', hash.store_path(:cpu, :topology, {}),
|
36
|
+
:attribute_to_i => [:sockets, :cores])
|
37
|
+
|
38
|
+
parse_first_node(node, :summary, hash,
|
39
|
+
:node_to_i => [:active, :migrating, :total])
|
40
|
+
|
41
|
+
hash
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Ovirt
|
2
|
+
class HostNic < Object
|
3
|
+
|
4
|
+
self.top_level_strings = [:name, :boot_protocol]
|
5
|
+
self.top_level_integers = [:speed]
|
6
|
+
self.top_level_objects = [:host, :network]
|
7
|
+
|
8
|
+
def self.element_name
|
9
|
+
"host_nic"
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.parse_xml(xml)
|
13
|
+
node, hash = xml_to_hash(xml)
|
14
|
+
|
15
|
+
parse_first_node(node, :status, hash, :node => [:state])
|
16
|
+
parse_first_node(node, :mac, hash, :attribute => [:address])
|
17
|
+
parse_first_node(node, :ip, hash, :attribute => [:address, :netmask, :gateway])
|
18
|
+
parse_first_node(node, :network, hash, :node => [:name])
|
19
|
+
|
20
|
+
hash[:bonding] = {}
|
21
|
+
node.xpath('bonding/options').each do |opts|
|
22
|
+
hash[:bonding][:options] = []
|
23
|
+
opts.xpath('option').each do |opt|
|
24
|
+
hash[:bonding][:options] << {:name => opt[:name], :value => opt[:value], :type => opt[:type]}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
node.xpath('bonding/slaves').each do |slaves|
|
29
|
+
hash[:bonding][:slaves] = {:host_nics => []}
|
30
|
+
slaves.xpath('host_nic').each do |slave|
|
31
|
+
hash[:bonding][:slaves][:host_nics] << {:id => slave[:id], :href => slave[:href]}
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
hash
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|