libvirt_ffi 0.2.1 → 0.5.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +78 -0
- data/Gemfile +7 -2
- data/Rakefile +6 -1
- data/bin/console +1 -0
- data/exe/libvirt +1 -0
- data/lib/libvirt.rb +14 -13
- data/lib/libvirt/base_info.rb +34 -0
- data/lib/libvirt/connection.rb +156 -47
- data/lib/libvirt/domain.rb +136 -8
- data/lib/libvirt/domain_callback_storage.rb +69 -0
- data/lib/libvirt/errors.rb +65 -0
- data/lib/libvirt/event.rb +60 -38
- data/lib/libvirt/ffi.rb +17 -0
- data/lib/libvirt/ffi/common.rb +8 -1
- data/lib/libvirt/ffi/domain.rb +796 -69
- data/lib/libvirt/ffi/error.rb +243 -0
- data/lib/libvirt/ffi/event.rb +30 -36
- data/lib/libvirt/ffi/helpers.rb +17 -0
- data/lib/libvirt/ffi/host.rb +122 -0
- data/lib/libvirt/ffi/storage.rb +149 -0
- data/lib/libvirt/ffi/stream.rb +74 -0
- data/lib/libvirt/node_info.rb +2 -41
- data/lib/libvirt/storage_pool.rb +70 -0
- data/lib/libvirt/storage_pool_info.rb +7 -0
- data/lib/libvirt/storage_volume.rb +51 -0
- data/lib/libvirt/storage_volume_info.rb +7 -0
- data/lib/libvirt/stream.rb +124 -0
- data/lib/libvirt/util.rb +75 -8
- data/lib/libvirt/version.rb +1 -1
- data/lib/libvirt/xml.rb +23 -0
- data/lib/libvirt/xml/disk.rb +59 -0
- data/lib/libvirt/xml/domain.rb +76 -0
- data/lib/libvirt/xml/generic.rb +252 -0
- data/lib/libvirt/xml/graphics.rb +14 -0
- data/lib/libvirt/xml/max_vcpu.rb +12 -0
- data/lib/libvirt/xml/memory.rb +14 -0
- data/lib/libvirt/xml/storage_pool.rb +24 -0
- data/lib/libvirt/xml/storage_volume.rb +32 -0
- data/lib/libvirt/xml/vcpu.rb +12 -0
- data/lib/libvirt_ffi.rb +2 -0
- data/libvirt.gemspec +5 -1
- data/test_usage/support/libvirt_async.rb +33 -31
- data/test_usage/support/log_formatter.rb +5 -10
- data/test_usage/test_domain.rb +43 -0
- data/test_usage/test_event_loop.rb +134 -33
- data/test_usage/test_libvirtd_restart.rb +63 -0
- data/test_usage/test_metadata.rb +104 -0
- data/test_usage/test_screenshot.rb +197 -0
- data/test_usage/test_storage.rb +52 -0
- metadata +46 -6
- data/lib/libvirt/error.rb +0 -6
- data/lib/libvirt/ffi/connection.rb +0 -84
- data/lib/libvirt/ffi/libvirt.rb +0 -17
- data/lib/libvirt/ffi/node_info.rb +0 -37
data/lib/libvirt/ffi.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Libvirt
|
4
|
+
module FFI
|
5
|
+
# https://libvirt.org/html/index.html
|
6
|
+
# namespace for libvirt C bindings
|
7
|
+
|
8
|
+
require 'libvirt/ffi/helpers'
|
9
|
+
require 'libvirt/ffi/common'
|
10
|
+
require 'libvirt/ffi/error'
|
11
|
+
require 'libvirt/ffi/host'
|
12
|
+
require 'libvirt/ffi/domain'
|
13
|
+
require 'libvirt/ffi/event'
|
14
|
+
require 'libvirt/ffi/stream'
|
15
|
+
require 'libvirt/ffi/storage'
|
16
|
+
end
|
17
|
+
end
|
data/lib/libvirt/ffi/common.rb
CHANGED
@@ -3,13 +3,20 @@
|
|
3
3
|
module Libvirt
|
4
4
|
module FFI
|
5
5
|
module Common
|
6
|
+
# https://libvirt.org/html/libvirt-libvirt-common.html
|
7
|
+
|
6
8
|
extend ::FFI::Library
|
9
|
+
extend Helpers
|
7
10
|
ffi_lib Util.library_path
|
8
11
|
|
9
|
-
# typedef void (*virFreeCallback)
|
12
|
+
# typedef void (*virFreeCallback) (
|
10
13
|
# void * opaque
|
11
14
|
# )
|
12
15
|
FREE_CALLBACK = callback :virFreeCallback, [:pointer], :void
|
16
|
+
|
17
|
+
def self.free_function(*args, &block)
|
18
|
+
callback_function(FREE_CALLBACK, *args, &block)
|
19
|
+
end
|
13
20
|
end
|
14
21
|
end
|
15
22
|
end
|
data/lib/libvirt/ffi/domain.rb
CHANGED
@@ -3,18 +3,312 @@
|
|
3
3
|
module Libvirt
|
4
4
|
module FFI
|
5
5
|
module Domain
|
6
|
+
# https://libvirt.org/html/libvirt-libvirt-domain.html
|
7
|
+
|
6
8
|
extend ::FFI::Library
|
9
|
+
extend Helpers
|
7
10
|
ffi_lib Util.library_path
|
8
11
|
|
9
12
|
UUID_STRING_BUFLEN = 0x80 # RFC4122
|
10
13
|
|
11
|
-
|
14
|
+
EVENT_ID_TO_CALLBACK = {
|
15
|
+
LIFECYCLE: :virConnectDomainEventCallback,
|
16
|
+
REBOOT: :virConnectDomainEventGenericCallback,
|
17
|
+
RTC_CHANGE: :virConnectDomainEventRTCChangeCallback,
|
18
|
+
WATCHDOG: :virConnectDomainEventWatchdogCallback,
|
19
|
+
IO_ERROR: :virConnectDomainEventIOErrorCallback,
|
20
|
+
GRAPHICS: :virConnectDomainEventGraphicsCallback,
|
21
|
+
IO_ERROR_REASON: :virConnectDomainEventIOErrorReasonCallback,
|
22
|
+
CONTROL_ERROR: :virConnectDomainEventGenericCallback,
|
23
|
+
BLOCK_JOB: :virConnectDomainEventBlockJobCallback,
|
24
|
+
DISK_CHANGE: :virConnectDomainEventDiskChangeCallback,
|
25
|
+
TRAY_CHANGE: :virConnectDomainEventTrayChangeCallback,
|
26
|
+
PMWAKEUP: :virConnectDomainEventPMWakeupCallback,
|
27
|
+
PMSUSPEND: :virConnectDomainEventPMSuspendCallback,
|
28
|
+
BALLOON_CHANGE: :virConnectDomainEventBalloonChangeCallback,
|
29
|
+
PMSUSPEND_DISK: :virConnectDomainEventPMSuspendDiskCallback,
|
30
|
+
DEVICE_REMOVED: :virConnectDomainEventDeviceRemovedCallback,
|
31
|
+
BLOCK_JOB_2: :virConnectDomainEventBlockJobCallback,
|
32
|
+
TUNABLE: :virConnectDomainEventTunableCallback,
|
33
|
+
AGENT_LIFECYCLE: :virConnectDomainEventAgentLifecycleCallback,
|
34
|
+
DEVICE_ADDED: :virConnectDomainEventDeviceAddedCallback,
|
35
|
+
MIGRATION_ITERATION: :virConnectDomainEventMigrationIterationCallback,
|
36
|
+
JOB_COMPLETED: :virConnectDomainEventJobCompletedCallback,
|
37
|
+
DEVICE_REMOVAL_FAILED: :virConnectDomainEventDeviceRemovalFailedCallback,
|
38
|
+
METADATA_CHANGE: :virConnectDomainEventMetadataChangeCallback,
|
39
|
+
BLOCK_THRESHOLD: :virConnectDomainEventBlockThresholdCallback
|
40
|
+
}.freeze
|
41
|
+
|
42
|
+
# enum virDomainEventID
|
43
|
+
enum :event_id, [
|
44
|
+
:LIFECYCLE, 0x0, # virConnectDomainEventCallback
|
45
|
+
:REBOOT, 0x1, # virConnectDomainEventGenericCallback
|
46
|
+
:RTC_CHANGE, 0x2, # virConnectDomainEventRTCChangeCallback
|
47
|
+
:WATCHDOG, 0x3, # virConnectDomainEventWatchdogCallback
|
48
|
+
:IO_ERROR, 0x4, # virConnectDomainEventIOErrorCallback
|
49
|
+
:GRAPHICS, 0x5, # virConnectDomainEventGraphicsCallback
|
50
|
+
:IO_ERROR_REASON, 0x6, # virConnectDomainEventIOErrorReasonCallback
|
51
|
+
:CONTROL_ERROR, 0x7, # virConnectDomainEventGenericCallback
|
52
|
+
:BLOCK_JOB, 0x8, # virConnectDomainEventBlockJobCallback
|
53
|
+
:DISK_CHANGE, 0x9, # virConnectDomainEventDiskChangeCallback
|
54
|
+
:TRAY_CHANGE, 0xa, # virConnectDomainEventTrayChangeCallback
|
55
|
+
:PMWAKEUP, 0xb, # virConnectDomainEventPMWakeupCallback
|
56
|
+
:PMSUSPEND, 0xc, # virConnectDomainEventPMSuspendCallback
|
57
|
+
:BALLOON_CHANGE, 0xd, # virConnectDomainEventBalloonChangeCallback
|
58
|
+
:PMSUSPEND_DISK, 0xe, # virConnectDomainEventPMSuspendDiskCallback
|
59
|
+
:DEVICE_REMOVED, 0xf, # virConnectDomainEventDeviceRemovedCallback
|
60
|
+
:BLOCK_JOB_2, 0x10, # virConnectDomainEventBlockJobCallback
|
61
|
+
:TUNABLE, 0x11, # virConnectDomainEventTunableCallback
|
62
|
+
:AGENT_LIFECYCLE, 0x12, # virConnectDomainEventAgentLifecycleCallback
|
63
|
+
:DEVICE_ADDED, 0x13, # virConnectDomainEventDeviceAddedCallback
|
64
|
+
:MIGRATION_ITERATION, 0x14, # virConnectDomainEventMigrationIterationCallback
|
65
|
+
:JOB_COMPLETED, 0x15, # virConnectDomainEventJobCompletedCallback
|
66
|
+
:DEVICE_REMOVAL_FAILED, 0x16, # virConnectDomainEventDeviceRemovalFailedCallback
|
67
|
+
:METADATA_CHANGE, 0x17, # virConnectDomainEventMetadataChangeCallback
|
68
|
+
:BLOCK_THRESHOLD, 0x18 # virConnectDomainEventBlockThresholdCallback
|
69
|
+
]
|
70
|
+
|
71
|
+
# enum virDomainState
|
72
|
+
enum :state, [
|
73
|
+
:NOSTATE, 0x0, # no state
|
74
|
+
:RUNNING, 0x1, # the domain is running
|
75
|
+
:BLOCKED, 0x2, # the domain is blocked on resource
|
76
|
+
:PAUSED, 0x3, # the domain is paused by user
|
77
|
+
:SHUTDOWN, 0x4, # the domain is being shut down
|
78
|
+
:SHUTOFF, 0x5, # the domain is shut off
|
79
|
+
:CRASHED, 0x6, # the domain is crashed
|
80
|
+
:PMSUSPENDED, 0x7 # the domain is suspended by guest power management
|
81
|
+
]
|
82
|
+
|
83
|
+
# enum virDomainNostateReason
|
84
|
+
enum :nostate_reason, [
|
85
|
+
:UNKNOWN, 0x0
|
86
|
+
]
|
87
|
+
|
88
|
+
# enum virDomainRunningReason
|
89
|
+
enum :running_reason, [
|
90
|
+
:UNKNOWN, 0x0,
|
91
|
+
:BOOTED, 0x1, # normal startup from boot
|
92
|
+
:MIGRATED, 0x2, # migrated from another host
|
93
|
+
:RESTORED, 0x3, # restored from a state file
|
94
|
+
:FROM_SNAPSHOT, 0x4, # restored from snapshot
|
95
|
+
:UNPAUSED, 0x5, # returned from paused state
|
96
|
+
:MIGRATION_CANCELED, 0x6, # returned from migration
|
97
|
+
:SAVE_CANCELED, 0x7, # returned from failed save process
|
98
|
+
:WAKEUP, 0x8, # returned from pmsuspended due to wakeup event
|
99
|
+
:CRASHED, 0x9, # resumed from crashed
|
100
|
+
:POSTCOPY, 0xa # running in post-copy migration mode
|
101
|
+
]
|
102
|
+
|
103
|
+
# enum virDomainBlockedReason
|
104
|
+
enum :blocked_reason, [
|
105
|
+
:UNKNOWN, 0x0 # the reason is unknown
|
106
|
+
]
|
107
|
+
|
108
|
+
# enum virDomainPausedReason
|
109
|
+
enum :paused_reason, [
|
110
|
+
:UNKNOWN, 0x0, # the reason is unknown
|
111
|
+
:USER, 0x1, # paused on user request
|
112
|
+
:MIGRATION, 0x2, # paused for offline migration
|
113
|
+
:SAVE, 0x3, # paused for save
|
114
|
+
:DUMP, 0x4, # paused for offline core dump
|
115
|
+
:IOERROR, 0x5, # paused due to a disk I/O error
|
116
|
+
:WATCHDOG, 0x6, # paused due to a watchdog event
|
117
|
+
:FROM_SNAPSHOT, 0x7, # paused after restoring from snapshot
|
118
|
+
:SHUTTING_DOWN, 0x8, # paused during shutdown process
|
119
|
+
:SNAPSHOT, 0x9, # paused while creating a snapshot
|
120
|
+
:CRASHED, 0xa, # paused due to a guest crash
|
121
|
+
:STARTING_UP, 0xb, # the domain is being started
|
122
|
+
:POSTCOPY, 0xc, # paused for post-copy migration
|
123
|
+
:POSTCOPY_FAILED, 0xd # paused after failed post-copy
|
124
|
+
]
|
125
|
+
|
126
|
+
# enum virDomainShutdownReason
|
127
|
+
enum :shutdown_reason, [
|
128
|
+
:UNKNOWN, 0x0, # the reason is unknown
|
129
|
+
:USER, 0x1 # shutting down on user request
|
130
|
+
]
|
131
|
+
|
132
|
+
# enum virDomainShutoffReason
|
133
|
+
enum :shutoff_reason, [
|
134
|
+
:UNKNOWN, 0x0, # the reason is unknown
|
135
|
+
:SHUTDOWN, 0x1, # normal shutdown
|
136
|
+
:DESTROYED, 0x2, # forced poweroff
|
137
|
+
:CRASHED, 0x3, # domain crashed
|
138
|
+
:MIGRATED, 0x4, # migrated to another host
|
139
|
+
:SAVED, 0x5, # saved to a file
|
140
|
+
:FAILED, 0x6, # domain failed to start
|
141
|
+
:FROM_SNAPSHOT, 0x7, # restored from a snapshot which was taken while domain was shutoff
|
142
|
+
:DAEMON, 0x8 # daemon decides to kill domain during reconnection processing
|
143
|
+
]
|
144
|
+
|
145
|
+
# enum virDomainCrashedReason
|
146
|
+
enum :crashed_reason, [
|
147
|
+
:UNKNOWN, 0x0, # crashed for unknown reason
|
148
|
+
:PANICKED, 0x1 # domain panicked
|
149
|
+
]
|
150
|
+
|
151
|
+
# enum virDomainPMSuspendedReason
|
152
|
+
enum :pmsuspended_reason, [
|
153
|
+
:UNKNOWN, 0x0
|
154
|
+
]
|
155
|
+
|
156
|
+
# enum virDomainEventType
|
157
|
+
enum :event_type, [
|
158
|
+
:DEFINED, 0x0,
|
159
|
+
:UNDEFINED, 0x1,
|
160
|
+
:STARTED, 0x2,
|
161
|
+
:SUSPENDED, 0x3,
|
162
|
+
:RESUMED, 0x4,
|
163
|
+
:STOPPED, 0x5,
|
164
|
+
:SHUTDOWN, 0x6,
|
165
|
+
:PMSUSPENDED, 0x7,
|
166
|
+
:CRASHED, 0x8
|
167
|
+
]
|
168
|
+
|
169
|
+
# enum virDomainEventDefinedDetailType
|
170
|
+
enum :event_defined_detail_type, [
|
171
|
+
:ADDED, 0x0, # Newly created config file
|
172
|
+
:UPDATED, 0x1, # Changed config file
|
173
|
+
:RENAMED, 0x2, # Domain was renamed
|
174
|
+
:FROM_SNAPSHOT, 0x3 # Config was restored from a snapshot
|
175
|
+
]
|
176
|
+
|
177
|
+
# enum virDomainEventUndefinedDetailType
|
178
|
+
enum :event_undefined_detail_type, [
|
179
|
+
:REMOVED, 0x0, # Deleted the config file
|
180
|
+
:RENAMED, 0x1 # Domain was renamed
|
181
|
+
]
|
182
|
+
|
183
|
+
# enum virDomainEventStartedDetailType
|
184
|
+
enum :event_started_detail_type, [
|
185
|
+
:BOOTED, 0x0, # Normal startup from boot
|
186
|
+
:MIGRATED, 0x1, # Incoming migration from another host
|
187
|
+
:RESTORED, 0x2, # Restored from a state file
|
188
|
+
:FROM_SNAPSHOT, 0x3, # Restored from snapshot
|
189
|
+
:WAKEUP, 0x4 # Started due to wakeup event
|
190
|
+
]
|
191
|
+
|
192
|
+
# enum virDomainEventSuspendedDetailType
|
193
|
+
enum :event_suspended_detail_type, [
|
194
|
+
:PAUSED, 0x0, # Normal suspend due to admin pause
|
195
|
+
:MIGRATED, 0x1, # Suspended for offline migration
|
196
|
+
:IOERROR, 0x2, # Suspended due to a disk I/O error
|
197
|
+
:WATCHDOG, 0x3, # Suspended due to a watchdog firing
|
198
|
+
:RESTORED, 0x4, # Restored from paused state file
|
199
|
+
:FROM_SNAPSHOT, 0x5, # Restored from paused snapshot
|
200
|
+
:API_ERROR, 0x6, # suspended after failure during libvirt API call
|
201
|
+
:POSTCOPY, 0x7, # suspended for post-copy migration
|
202
|
+
:POSTCOPY_FAILED, 0x8 # suspended after failed post-copy
|
203
|
+
]
|
204
|
+
|
205
|
+
# enum virDomainEventResumedDetailType
|
206
|
+
enum :event_resumed_detail_type, [
|
207
|
+
:UNPAUSED, 0x0, # Normal resume due to admin unpause
|
208
|
+
:MIGRATED, 0x1, # Resumed for completion of migration
|
209
|
+
:FROM_SNAPSHOT, 0x2, # Resumed from snapshot
|
210
|
+
:POSTCOPY, 0x3 # Resumed, but migration is still running in post-copy mode
|
211
|
+
]
|
212
|
+
|
213
|
+
# enum virDomainEventStoppedDetailType
|
214
|
+
enum :event_stopped_detail_type, [
|
215
|
+
:SHUTDOWN, 0x0, # Normal shutdown
|
216
|
+
:DESTROYED, 0x1, # Forced poweroff from host
|
217
|
+
:CRASHED, 0x2, # Guest crashed
|
218
|
+
:MIGRATED, 0x3, # Migrated off to another host
|
219
|
+
:SAVED, 0x4, # Saved to a state file
|
220
|
+
:FAILED, 0x5, # Host emulator/mgmt failed
|
221
|
+
:FROM_SNAPSHOT, 0x6 # offline snapshot loaded
|
222
|
+
]
|
223
|
+
|
224
|
+
# enum virDomainEventShutdownDetailType
|
225
|
+
enum :event_shutdown_detail_type, [
|
226
|
+
:FINISHED, 0x0, # Guest finished shutdown sequence
|
227
|
+
:GUEST, 0x1, # Domain finished shutting down after request from the guest itself (e.g. hardware-specific action)
|
228
|
+
:HOST, 0x2 # Domain finished shutting down after request from the host (e.g. killed by a signal)
|
229
|
+
]
|
230
|
+
|
231
|
+
# enum virDomainEventPMSuspendedDetailType
|
232
|
+
enum :event_pmsuspended_detail_type, [
|
233
|
+
:MEMORY, 0x0, # Guest was PM suspended to memory
|
234
|
+
:DISK, 0x1 # Guest was PM suspended to disk
|
235
|
+
]
|
236
|
+
|
237
|
+
# enum virDomainEventCrashedDetailType
|
238
|
+
enum :event_crashed_detail_type, [
|
239
|
+
:PANICKED, 0x0 # Guest was panicked
|
240
|
+
]
|
241
|
+
|
242
|
+
# enum virDomainSaveRestoreFlags
|
243
|
+
enum :save_restore_flags, [
|
244
|
+
:BYPASS_CACHE, 0x1, # Avoid file system cache pollution
|
245
|
+
:RUNNING, 0x2, # Favor running over paused
|
246
|
+
:PAUSED, 0x4 # Favor paused over running
|
247
|
+
]
|
248
|
+
|
249
|
+
# enum virDomainShutdownFlagValues
|
250
|
+
enum :shutdown_flags, [
|
251
|
+
:DEFAULT, 0x0, # hypervisor choice
|
252
|
+
:ACPI_POWER_BTN, 0x1, # Send ACPI event
|
253
|
+
:GUEST_AGENT, 0x2, # Use guest agent
|
254
|
+
:INITCTL, 0x4, # Use initctl
|
255
|
+
:SIGNAL, 0x8, # Send a signal
|
256
|
+
:PARAVIRT, 0x10 # Use paravirt guest control
|
257
|
+
]
|
258
|
+
|
259
|
+
# enum virDomainUndefineFlagsValues
|
260
|
+
enum :undefine_flags_values, [
|
261
|
+
:MANAGED_SAVE, 0x1, # Also remove any managed save
|
262
|
+
:SNAPSHOTS_METADATA, 0x2, # If last use of domain, then also remove any snapshot metadata
|
263
|
+
:NVRAM, 0x4, # Also remove any nvram file
|
264
|
+
:KEEP_NVRAM, 0x8, # Keep nvram file
|
265
|
+
:CHECKPOINTS_METADATA, 0x10 # If last use of domain, then also remove any checkpoint metadata Future undefine control flags should come here.
|
266
|
+
]
|
267
|
+
|
268
|
+
# enum virDomainDefineFlags
|
269
|
+
enum :define_flags, [
|
270
|
+
:DEFINE_VALIDATE, 0x1 # Validate the XML document against schema
|
271
|
+
]
|
272
|
+
|
273
|
+
# enum virDomainMetadataType
|
274
|
+
enum :metadata_type, [
|
275
|
+
:DESCRIPTION, 0x0, # Operate on <description>
|
276
|
+
:TITLE, 0x1, # Operate on <title>
|
277
|
+
:ELEMENT, 0x2 # Operate on <metadata>
|
278
|
+
]
|
279
|
+
|
280
|
+
# enum virDomainModificationImpact
|
281
|
+
enum :modification_impact, [
|
282
|
+
:AFFECT_CURRENT, 0x0, # Affect current domain state.
|
283
|
+
:AFFECT_LIVE, 0x1, # Affect running domain state.
|
284
|
+
:AFFECT_CONFIG, 0x2 # Affect persistent domain state. 1 << 2 is reserved for virTypedParameterFlags
|
285
|
+
]
|
286
|
+
|
287
|
+
# enum virDomainXMLFlags
|
288
|
+
enum :xml_flags, [
|
289
|
+
:SECURE, 0x1, # dump security sensitive information too
|
290
|
+
:INACTIVE, 0x2, # dump inactive domain information
|
291
|
+
:UPDATE_CPU, 0x4, # update guest CPU requirements according to host CPU
|
292
|
+
:MIGRATABLE, 0x8 # dump XML suitable for migration
|
293
|
+
]
|
294
|
+
|
295
|
+
# int virDomainFree (
|
296
|
+
# virDomainPtr domain
|
297
|
+
# )
|
298
|
+
attach_function :virDomainFree, [:pointer], :int
|
299
|
+
|
300
|
+
# int virDomainRef (
|
301
|
+
# virDomainPtr domain
|
302
|
+
# )
|
303
|
+
attach_function :virDomainRef, [:pointer], :int
|
304
|
+
|
305
|
+
# int virConnectDomainEventRegisterAny(
|
12
306
|
# virConnectPtr conn,
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
307
|
+
# virDomainPtr dom,
|
308
|
+
# int eventID,
|
309
|
+
# virConnectDomainEventGenericCallback cb,
|
310
|
+
# void * opaque,
|
311
|
+
# virFreeCallback freecb
|
18
312
|
# )
|
19
313
|
attach_function :virConnectDomainEventRegisterAny, [
|
20
314
|
:pointer,
|
@@ -25,105 +319,538 @@ module Libvirt
|
|
25
319
|
:pointer
|
26
320
|
], :int
|
27
321
|
|
28
|
-
# int
|
322
|
+
# int virConnectDomainEventDeregisterAny (
|
323
|
+
# virConnectPtr conn,
|
324
|
+
# int callbackID
|
325
|
+
# )
|
326
|
+
attach_function :virConnectDomainEventDeregisterAny, [:pointer, :int], :int
|
327
|
+
|
328
|
+
# int virConnectListAllDomains (
|
29
329
|
# virConnectPtr conn,
|
30
|
-
#
|
31
|
-
#
|
330
|
+
# virDomainPtr **domains,
|
331
|
+
# unsigned int flags
|
32
332
|
# )
|
33
333
|
attach_function :virConnectListAllDomains, [:pointer, :pointer, :uint], :int
|
34
334
|
|
35
|
-
#
|
36
|
-
# VIR_DOMAIN_NOSTATE = 0 (0x0)
|
37
|
-
# no state
|
38
|
-
# VIR_DOMAIN_RUNNING = 1 (0x1)
|
39
|
-
# the domain is running
|
40
|
-
# VIR_DOMAIN_BLOCKED = 2 (0x2)
|
41
|
-
# the domain is blocked on resource
|
42
|
-
# VIR_DOMAIN_PAUSED = 3 (0x3)
|
43
|
-
# the domain is paused by user
|
44
|
-
# VIR_DOMAIN_SHUTDOWN = 4 (0x4)
|
45
|
-
# the domain is being shut down
|
46
|
-
# VIR_DOMAIN_SHUTOFF = 5 (0x5)
|
47
|
-
# the domain is shut off
|
48
|
-
# VIR_DOMAIN_CRASHED = 6 (0x6)
|
49
|
-
# the domain is crashed
|
50
|
-
# VIR_DOMAIN_PMSUSPENDED = 7 (0x7)
|
51
|
-
# the domain is suspended by guest power management
|
52
|
-
# VIR_DOMAIN_LAST = 8 (0x8)
|
53
|
-
# NB: this enum value will increase over time as new events are added to the libvirt API.
|
54
|
-
# It reflects the last state supported by this version of the libvirt API.
|
55
|
-
# }
|
56
|
-
enum :states, [
|
57
|
-
:no_state, 0x0,
|
58
|
-
:running, 0x1,
|
59
|
-
:blocked, 0x2,
|
60
|
-
:paused, 0x3,
|
61
|
-
:shutdown, 0x4,
|
62
|
-
:shutoff, 0x5,
|
63
|
-
:crashed, 0x6,
|
64
|
-
:pm_suspended, 0x7,
|
65
|
-
:last, 0x8
|
66
|
-
]
|
67
|
-
|
68
|
-
# int virDomainGetState (
|
335
|
+
# int virDomainGetState (
|
69
336
|
# virDomainPtr domain,
|
70
|
-
#
|
71
|
-
#
|
72
|
-
#
|
337
|
+
# int *state,
|
338
|
+
# int *reason,
|
339
|
+
# unsigned int flags
|
73
340
|
# )
|
74
341
|
attach_function :virDomainGetState, [:pointer, :pointer, :pointer, :uint], :int
|
75
342
|
|
76
343
|
# const char *virDomainGetName (
|
77
344
|
# virDomainPtr domain
|
78
345
|
# )
|
79
|
-
attach_function :virDomainGetName, [:pointer], :string
|
346
|
+
attach_function :virDomainGetName, [:pointer], :string
|
80
347
|
|
81
|
-
# int
|
348
|
+
# int virDomainGetMaxVcpus (
|
82
349
|
# virDomainPtr domain
|
83
350
|
# )
|
84
351
|
attach_function :virDomainGetMaxVcpus, [:pointer], :int
|
85
352
|
|
86
|
-
# int
|
353
|
+
# int virDomainGetVcpus (
|
87
354
|
# virDomainPtr domain,
|
88
|
-
#
|
89
|
-
#
|
90
|
-
#
|
91
|
-
#
|
355
|
+
# virVcpuInfoPtr info,
|
356
|
+
# int maxinfo,
|
357
|
+
# unsigned char * cpumaps,
|
358
|
+
# int maplen
|
92
359
|
# )
|
93
360
|
attach_function :virDomainGetVcpus, [:pointer, :pointer, :int, :pointer, :int], :int
|
94
361
|
|
95
|
-
# int
|
362
|
+
# int virDomainGetUUIDString (
|
96
363
|
# virDomainPtr domain,
|
97
|
-
#
|
364
|
+
# char * buf
|
98
365
|
# )
|
99
366
|
attach_function :virDomainGetUUIDString, [:pointer, :pointer], :int
|
100
367
|
|
101
|
-
# unsigned long
|
368
|
+
# unsigned long virDomainGetMaxMemory (
|
102
369
|
# virDomainPtr domain
|
103
370
|
# )
|
104
371
|
attach_function :virDomainGetMaxMemory, [:pointer], :ulong
|
105
372
|
|
106
|
-
# char *virDomainGetXMLDesc
|
373
|
+
# char *virDomainGetXMLDesc (
|
107
374
|
# virDomainPtr domain,
|
108
|
-
#
|
375
|
+
# unsigned int flags
|
109
376
|
# )
|
110
|
-
attach_function :virDomainGetXMLDesc, [:pointer, :
|
377
|
+
attach_function :virDomainGetXMLDesc, [:pointer, :xml_flags], :string
|
111
378
|
|
112
|
-
#
|
379
|
+
# char *virDomainScreenshot (
|
380
|
+
# virDomainPtr domain,
|
381
|
+
# virStreamPtr stream,
|
382
|
+
# unsigned int screen,
|
383
|
+
# unsigned int flags
|
384
|
+
# )
|
385
|
+
attach_function :virDomainScreenshot, [:pointer, :pointer, :uint, :uint], :strptr
|
386
|
+
|
387
|
+
# typedef int (*virConnectDomainEventCallback) (
|
113
388
|
# virConnectPtr conn,
|
114
|
-
#
|
115
|
-
#
|
116
|
-
#
|
117
|
-
#
|
389
|
+
# virDomainPtr dom,
|
390
|
+
# int event,
|
391
|
+
# int detail,
|
392
|
+
# void * opaque
|
118
393
|
# )
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
394
|
+
callback :virConnectDomainEventCallback, [:pointer, :pointer, :event_type, :int, :pointer], :int
|
395
|
+
|
396
|
+
# typedef void (*virConnectDomainEventGenericCallback) (
|
397
|
+
# virConnectPtr conn,
|
398
|
+
# virDomainPtr dom,
|
399
|
+
# void * opaque
|
400
|
+
# )
|
401
|
+
callback :virConnectDomainEventGenericCallback, [:pointer, :pointer, :pointer], :void
|
402
|
+
|
403
|
+
# typedef void (*virConnectDomainEventRTCChangeCallback) (
|
404
|
+
# virConnectPtr conn,
|
405
|
+
# virDomainPtr dom,
|
406
|
+
# long long utcoffset,
|
407
|
+
# void * opaque
|
408
|
+
# )
|
409
|
+
callback :virConnectDomainEventRTCChangeCallback, [
|
410
|
+
:pointer,
|
411
|
+
:pointer,
|
412
|
+
:long_long,
|
413
|
+
:pointer
|
414
|
+
], :void
|
415
|
+
|
416
|
+
# typedef void (*virConnectDomainEventWatchdogCallback) (
|
417
|
+
# virConnectPtr conn,
|
418
|
+
# virDomainPtr dom,
|
419
|
+
# int action,
|
420
|
+
# void * opaque
|
421
|
+
# )
|
422
|
+
callback :virConnectDomainEventWatchdogCallback, [
|
423
|
+
:pointer,
|
424
|
+
:pointer,
|
425
|
+
:int,
|
426
|
+
:pointer
|
427
|
+
], :void
|
428
|
+
|
429
|
+
# typedef void (*virConnectDomainEventIOErrorCallback) (
|
430
|
+
# virConnectPtr conn,
|
431
|
+
# virDomainPtr dom,
|
432
|
+
# const char * srcPath,
|
433
|
+
# const char * devAlias,
|
434
|
+
# int action,
|
435
|
+
# void * opaque
|
436
|
+
# )
|
437
|
+
callback :virConnectDomainEventIOErrorCallback, [
|
438
|
+
:pointer,
|
439
|
+
:pointer,
|
440
|
+
:string,
|
441
|
+
:string,
|
442
|
+
:int,
|
443
|
+
:pointer
|
444
|
+
], :void
|
445
|
+
|
446
|
+
# typedef void (*virConnectDomainEventGraphicsCallback) (
|
447
|
+
# virConnectPtr conn,
|
448
|
+
# virDomainPtr dom,
|
449
|
+
# int phase,
|
450
|
+
# const virDomainEventGraphicsAddress * local,
|
451
|
+
# const virDomainEventGraphicsAddress * remote,
|
452
|
+
# const char * authScheme,
|
453
|
+
# const virDomainEventGraphicsSubject * subject,
|
454
|
+
# void * opaque
|
455
|
+
# )
|
456
|
+
callback :virConnectDomainEventGraphicsCallback, [
|
457
|
+
:pointer,
|
458
|
+
:pointer,
|
459
|
+
:int,
|
460
|
+
:pointer,
|
461
|
+
:pointer,
|
462
|
+
:string,
|
463
|
+
:pointer,
|
464
|
+
:pointer
|
465
|
+
], :void
|
466
|
+
|
467
|
+
# typedef void (*virConnectDomainEventIOErrorReasonCallback) (
|
468
|
+
# virConnectPtr conn,
|
469
|
+
# virDomainPtr dom,
|
470
|
+
# const char * srcPath,
|
471
|
+
# const char * devAlias,
|
472
|
+
# int action,
|
473
|
+
# const char * reason,
|
474
|
+
# void * opaque
|
475
|
+
# )
|
476
|
+
callback :virConnectDomainEventIOErrorReasonCallback, [
|
477
|
+
:pointer,
|
478
|
+
:pointer,
|
479
|
+
:string,
|
480
|
+
:string,
|
481
|
+
:int,
|
482
|
+
:string,
|
483
|
+
:pointer
|
484
|
+
], :void
|
485
|
+
|
486
|
+
# typedef void (*virConnectDomainEventBlockJobCallback) (
|
487
|
+
# virConnectPtr conn,
|
488
|
+
# virDomainPtr dom,
|
489
|
+
# const char * disk,
|
490
|
+
# int type,
|
491
|
+
# int status,
|
492
|
+
# void * opaque
|
493
|
+
# )
|
494
|
+
callback :virConnectDomainEventBlockJobCallback, [
|
495
|
+
:pointer,
|
496
|
+
:pointer,
|
497
|
+
:string,
|
498
|
+
:int,
|
499
|
+
:int,
|
500
|
+
:pointer
|
501
|
+
], :void
|
502
|
+
|
503
|
+
# typedef void (*virConnectDomainEventDiskChangeCallback) (
|
504
|
+
# virConnectPtr conn,
|
505
|
+
# virDomainPtr dom,
|
506
|
+
# const char * oldSrcPath,
|
507
|
+
# const char * newSrcPath,
|
508
|
+
# const char * devAlias,
|
509
|
+
# int reason,
|
510
|
+
# void * opaque
|
511
|
+
# )
|
512
|
+
callback :virConnectDomainEventDiskChangeCallback, [
|
513
|
+
:pointer,
|
514
|
+
:pointer,
|
515
|
+
:string,
|
516
|
+
:string,
|
517
|
+
:string,
|
518
|
+
:int,
|
519
|
+
:pointer
|
520
|
+
], :void
|
521
|
+
|
522
|
+
# typedef void (*virConnectDomainEventTrayChangeCallback) (
|
523
|
+
# virConnectPtr conn,
|
524
|
+
# virDomainPtr dom,
|
525
|
+
# const char * devAlias,
|
526
|
+
# int reason,
|
527
|
+
# void * opaque
|
528
|
+
# )
|
529
|
+
callback :virConnectDomainEventTrayChangeCallback, [
|
530
|
+
:pointer,
|
531
|
+
:pointer,
|
532
|
+
:string,
|
533
|
+
:int,
|
534
|
+
:pointer
|
535
|
+
], :void
|
536
|
+
|
537
|
+
# typedef void (*virConnectDomainEventPMWakeupCallback) (
|
538
|
+
# virConnectPtr conn,
|
539
|
+
# virDomainPtr dom,
|
540
|
+
# int reason,
|
541
|
+
# void * opaque
|
542
|
+
# )
|
543
|
+
callback :virConnectDomainEventPMWakeupCallback, [
|
544
|
+
:pointer,
|
545
|
+
:pointer,
|
546
|
+
:int,
|
547
|
+
:pointer
|
548
|
+
], :void
|
549
|
+
|
550
|
+
# typedef void (*virConnectDomainEventPMSuspendCallback) (
|
551
|
+
# virConnectPtr conn,
|
552
|
+
# virDomainPtr dom,
|
553
|
+
# int reason,
|
554
|
+
# void * opaque
|
555
|
+
# )
|
556
|
+
callback :virConnectDomainEventPMSuspendCallback, [
|
557
|
+
:pointer,
|
558
|
+
:pointer,
|
559
|
+
:int,
|
560
|
+
:pointer
|
561
|
+
], :void
|
562
|
+
|
563
|
+
# typedef void (*virConnectDomainEventBalloonChangeCallback) (
|
564
|
+
# virConnectPtr conn,
|
565
|
+
# virDomainPtr dom,
|
566
|
+
# unsigned long long actual,
|
567
|
+
# void * opaque
|
568
|
+
# )
|
569
|
+
callback :virConnectDomainEventBalloonChangeCallback, [
|
570
|
+
:pointer,
|
571
|
+
:pointer,
|
572
|
+
:ulong_long,
|
573
|
+
:pointer
|
574
|
+
], :void
|
575
|
+
|
576
|
+
# typedef void (*virConnectDomainEventPMSuspendDiskCallback) (
|
577
|
+
# virConnectPtr conn,
|
578
|
+
# virDomainPtr dom,
|
579
|
+
# int reason,
|
580
|
+
# void * opaque
|
581
|
+
# )
|
582
|
+
callback :virConnectDomainEventPMSuspendDiskCallback, [
|
583
|
+
:pointer,
|
584
|
+
:pointer,
|
585
|
+
:int,
|
586
|
+
:pointer
|
587
|
+
], :void
|
588
|
+
|
589
|
+
# typedef void (*virConnectDomainEventDeviceRemovedCallback) (
|
590
|
+
# virConnectPtr conn,
|
591
|
+
# virDomainPtr dom,
|
592
|
+
# const char * devAlias,
|
593
|
+
# void * opaque
|
594
|
+
# )
|
595
|
+
callback :virConnectDomainEventDeviceRemovedCallback, [
|
596
|
+
:pointer,
|
597
|
+
:pointer,
|
598
|
+
:string,
|
599
|
+
:pointer
|
600
|
+
], :void
|
601
|
+
|
602
|
+
# typedef void (*virConnectDomainEventTunableCallback) (
|
603
|
+
# virConnectPtr conn,
|
604
|
+
# virDomainPtr dom,
|
605
|
+
# virTypedParameterPtr params,
|
606
|
+
# int nparams,
|
607
|
+
# void * opaque
|
608
|
+
# )
|
609
|
+
callback :virConnectDomainEventTunableCallback, [
|
610
|
+
:pointer,
|
611
|
+
:pointer,
|
612
|
+
:pointer,
|
613
|
+
:int,
|
614
|
+
:pointer
|
615
|
+
], :void
|
616
|
+
|
617
|
+
# typedef void (*virConnectDomainEventAgentLifecycleCallback) (
|
618
|
+
# virConnectPtr conn,
|
619
|
+
# virDomainPtr dom,
|
620
|
+
# int state,
|
621
|
+
# int reason,
|
622
|
+
# void * opaque
|
623
|
+
# )
|
624
|
+
callback :virConnectDomainEventAgentLifecycleCallback, [
|
625
|
+
:pointer,
|
626
|
+
:pointer,
|
627
|
+
:int,
|
628
|
+
:int,
|
629
|
+
:pointer
|
630
|
+
], :void
|
631
|
+
|
632
|
+
# typedef void (*virConnectDomainEventDeviceAddedCallback) (
|
633
|
+
# virConnectPtr conn,
|
634
|
+
# virDomainPtr dom,
|
635
|
+
# const char * devAlias,
|
636
|
+
# void * opaque
|
637
|
+
# )
|
638
|
+
callback :virConnectDomainEventDeviceAddedCallback, [
|
639
|
+
:pointer,
|
640
|
+
:pointer,
|
641
|
+
:string,
|
642
|
+
:pointer
|
643
|
+
], :void
|
644
|
+
|
645
|
+
# typedef void (*virConnectDomainEventMigrationIterationCallback) (
|
646
|
+
# virConnectPtr conn,
|
647
|
+
# virDomainPtr dom,
|
648
|
+
# int iteration,
|
649
|
+
# void * opaque
|
650
|
+
# )
|
651
|
+
callback :virConnectDomainEventMigrationIterationCallback, [
|
652
|
+
:pointer,
|
653
|
+
:pointer,
|
654
|
+
:int,
|
655
|
+
:pointer
|
656
|
+
], :void
|
657
|
+
|
658
|
+
# typedef void (*virConnectDomainEventJobCompletedCallback) (
|
659
|
+
# virConnectPtr conn,
|
660
|
+
# virDomainPtr dom,
|
661
|
+
# virTypedParameterPtr params,
|
662
|
+
# int nparams,
|
663
|
+
# void * opaque
|
664
|
+
# )
|
665
|
+
callback :virConnectDomainEventJobCompletedCallback, [
|
666
|
+
:pointer,
|
667
|
+
:pointer,
|
668
|
+
:pointer,
|
669
|
+
:int,
|
670
|
+
:pointer
|
671
|
+
], :void
|
672
|
+
|
673
|
+
# typedef void (*virConnectDomainEventDeviceRemovalFailedCallback) (
|
674
|
+
# virConnectPtr conn,
|
675
|
+
# virDomainPtr dom,
|
676
|
+
# const char * devAlias,
|
677
|
+
# void * opaque
|
678
|
+
# )
|
679
|
+
callback :virConnectDomainEventDeviceRemovalFailedCallback, [
|
680
|
+
:pointer,
|
681
|
+
:pointer,
|
682
|
+
:string,
|
683
|
+
:pointer
|
684
|
+
], :void
|
685
|
+
|
686
|
+
# typedef void (*virConnectDomainEventMetadataChangeCallback) (
|
687
|
+
# virConnectPtr conn,
|
688
|
+
# virDomainPtr dom,
|
689
|
+
# int type,
|
690
|
+
# const char * nsuri,
|
691
|
+
# void * opaque
|
692
|
+
# )
|
693
|
+
callback :virConnectDomainEventMetadataChangeCallback, [
|
694
|
+
:pointer,
|
695
|
+
:pointer,
|
696
|
+
:metadata_type,
|
697
|
+
:string,
|
698
|
+
:pointer
|
699
|
+
], :void
|
700
|
+
|
701
|
+
# typedef void (*virConnectDomainEventBlockThresholdCallback) (
|
702
|
+
# virConnectPtr conn,
|
703
|
+
# virDomainPtr dom,
|
704
|
+
# const char * dev,
|
705
|
+
# const char * path,
|
706
|
+
# unsigned long long threshold,
|
707
|
+
# unsigned long long excess,
|
708
|
+
# void * opaque
|
709
|
+
# )
|
710
|
+
callback :virConnectDomainEventBlockThresholdCallback, [
|
711
|
+
:pointer,
|
712
|
+
:pointer,
|
713
|
+
:string,
|
714
|
+
:string,
|
715
|
+
:ulong_long,
|
716
|
+
:ulong_long,
|
717
|
+
:pointer
|
718
|
+
], :void
|
719
|
+
|
720
|
+
# int virDomainReboot (
|
721
|
+
# virDomainPtr domain,
|
722
|
+
# unsigned int flags
|
723
|
+
# )
|
724
|
+
attach_function :virDomainReboot, [:pointer, :uint], :int
|
725
|
+
|
726
|
+
# int virDomainShutdownFlags (
|
727
|
+
# virDomainPtr domain,
|
728
|
+
# unsigned int flags
|
729
|
+
# )
|
730
|
+
attach_function :virDomainShutdownFlags, [:pointer, :shutdown_flags], :int
|
731
|
+
|
732
|
+
# int virDomainDestroyFlags (
|
733
|
+
# virDomainPtr domain,
|
734
|
+
# unsigned int flags
|
735
|
+
# )
|
736
|
+
attach_function :virDomainDestroyFlags, [:pointer, :uint], :int
|
737
|
+
|
738
|
+
# int virDomainReset (
|
739
|
+
# virDomainPtr domain,
|
740
|
+
# unsigned int flags
|
741
|
+
# )
|
742
|
+
attach_function :virDomainReset, [:pointer, :uint], :int
|
743
|
+
|
744
|
+
# int virDomainSuspend (
|
745
|
+
# virDomainPtr domain
|
746
|
+
# )
|
747
|
+
attach_function :virDomainSuspend, [:pointer], :int
|
748
|
+
|
749
|
+
# int virDomainResume (
|
750
|
+
# virDomainPtr domain
|
751
|
+
# )
|
752
|
+
attach_function :virDomainResume, [:pointer], :int
|
753
|
+
|
754
|
+
# int virDomainCreateWithFlags (
|
755
|
+
# virDomainPtr domain,
|
756
|
+
# unsigned int flags
|
757
|
+
# )
|
758
|
+
attach_function :virDomainCreateWithFlags, [:pointer, :uint], :int
|
759
|
+
|
760
|
+
# int virDomainManagedSave (
|
761
|
+
# virDomainPtr dom,
|
762
|
+
# unsigned int flags
|
763
|
+
# )
|
764
|
+
attach_function :virDomainManagedSave, [:pointer, :save_restore_flags], :int
|
765
|
+
|
766
|
+
# int virDomainUndefineFlags (
|
767
|
+
# virDomainPtr domain,
|
768
|
+
# unsigned int flags
|
769
|
+
# )
|
770
|
+
attach_function :virDomainUndefineFlags, [:pointer, :uint], :int
|
771
|
+
|
772
|
+
# virDomainPtr virDomainDefineXMLFlags (
|
773
|
+
# virConnectPtr conn,
|
774
|
+
# const char * xml,
|
775
|
+
# unsigned int flags
|
776
|
+
# )
|
777
|
+
attach_function :virDomainDefineXMLFlags, [:pointer, :string, :uint], :pointer
|
778
|
+
|
779
|
+
# int virDomainSetMetadata (
|
780
|
+
# virDomainPtr domain,
|
781
|
+
# int type,
|
782
|
+
# const char * metadata,
|
783
|
+
# const char * key,
|
784
|
+
# const char * uri,
|
785
|
+
# unsigned int flags
|
786
|
+
# )
|
787
|
+
attach_function :virDomainSetMetadata,
|
788
|
+
[:pointer, :metadata_type, :string, :string, :string, :modification_impact],
|
789
|
+
:int
|
790
|
+
|
791
|
+
# char * virDomainGetMetadata (
|
792
|
+
# virDomainPtr domain,
|
793
|
+
# int type,
|
794
|
+
# const char * uri,
|
795
|
+
# unsigned int flags
|
796
|
+
# )
|
797
|
+
attach_function :virDomainGetMetadata,
|
798
|
+
[:pointer, :metadata_type, :string, :modification_impact],
|
799
|
+
:string
|
800
|
+
|
801
|
+
# Converts detail from lifecycle callback from integer to symbol name.
|
802
|
+
# @param event [Symbol] enum :event_type (virDomainEventType)
|
803
|
+
# @param detail [Integer]
|
804
|
+
# @return [Symbol]
|
805
|
+
def self.event_detail_type(event, detail)
|
806
|
+
detail_enum = enum_type(:"event_#{event.to_s.downcase}_detail_type")
|
807
|
+
detail_enum[detail]
|
808
|
+
end
|
809
|
+
|
810
|
+
def self.state_reason(state, reason)
|
811
|
+
reason_enum = enum_type(:"#{state.to_s.downcase}_reason")
|
812
|
+
reason_enum[reason]
|
813
|
+
end
|
814
|
+
|
815
|
+
# Creates event callback function for provided event_id
|
816
|
+
# @param event_id [Integer,Symbol]
|
817
|
+
# @yield connect_ptr, domain_ptr, *args, opaque_ptr
|
818
|
+
# @return [FFI::Function]
|
819
|
+
def self.event_callback_for(event_id, &block)
|
820
|
+
event_id_sym = event_id.is_a?(Symbol) ? event_id : enum_type(:event_id)[event_id]
|
821
|
+
|
822
|
+
case event_id_sym
|
823
|
+
when :LIFECYCLE
|
824
|
+
event_callback(&block)
|
825
|
+
else
|
826
|
+
event_callback_base(event_id_sym, &block)
|
827
|
+
end
|
828
|
+
end
|
829
|
+
|
830
|
+
# Creates generic event callback function for provided event_id_sym
|
831
|
+
# @param event_id_sym [Symbol]
|
832
|
+
# @yield connect_ptr, domain_ptr, *args, opaque_ptr
|
833
|
+
# @return [FFI::Function]
|
834
|
+
def self.event_callback_base(event_id_sym, &block)
|
835
|
+
callback_name = EVENT_ID_TO_CALLBACK.fetch(event_id_sym)
|
836
|
+
callback_function(callback_name) do |*args|
|
837
|
+
Util.log(:debug) { "Libvirt::Domain #{event_id_sym} CALLBACK #{args.map(&:to_s).join(', ')}," }
|
838
|
+
block.call(*args)
|
124
839
|
end
|
125
840
|
end
|
126
841
|
|
842
|
+
# Creates event callback function for lifecycle event_id
|
843
|
+
# @param event_id_sym [Symbol]
|
844
|
+
# @yield connect_ptr, domain_ptr, event, detail, opaque_ptr
|
845
|
+
# @return [FFI::Function]
|
846
|
+
def self.event_callback(&block)
|
847
|
+
callback_function(:virConnectDomainEventCallback) do |conn, dom, event, detail, opaque|
|
848
|
+
detail_sym = event_detail_type(event, detail)
|
849
|
+
Util.log(:debug) { "Libvirt::Domain LIFECYCLE CALLBACK #{conn}, #{dom}, #{event}, #{detail_sym}, #{opaque}," }
|
850
|
+
block.call(conn, dom, event, detail_sym, opaque)
|
851
|
+
0
|
852
|
+
end
|
853
|
+
end
|
127
854
|
end
|
128
855
|
end
|
129
856
|
end
|