libvirt_ffi 0.4.0 → 0.5.3
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 -3
- data/Rakefile +6 -1
- data/bin/console +1 -0
- data/exe/libvirt +1 -0
- data/lib/libvirt.rb +12 -12
- data/lib/libvirt/base_info.rb +34 -0
- data/lib/libvirt/connection.rb +111 -38
- data/lib/libvirt/domain.rb +113 -8
- data/lib/libvirt/domain_callback_storage.rb +20 -16
- data/lib/libvirt/errors.rb +65 -0
- data/lib/libvirt/event.rb +36 -28
- data/lib/libvirt/ffi.rb +17 -0
- data/lib/libvirt/ffi/common.rb +8 -1
- data/lib/libvirt/ffi/domain.rb +530 -196
- 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 +127 -0
- data/lib/libvirt/ffi/storage.rb +149 -0
- data/lib/libvirt/ffi/stream.rb +19 -17
- 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 +33 -14
- data/lib/libvirt/util.rb +61 -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 +27 -35
- data/test_usage/support/log_formatter.rb +5 -10
- data/test_usage/test_domain.rb +43 -0
- data/test_usage/test_event_loop.rb +115 -39
- data/test_usage/test_libvirtd_restart.rb +63 -0
- data/test_usage/test_metadata.rb +104 -0
- data/test_usage/test_screenshot.rb +14 -13
- data/test_usage/test_storage.rb +52 -0
- metadata +42 -6
- data/lib/libvirt/error.rb +0 -6
- data/lib/libvirt/ffi/connection.rb +0 -94
- data/lib/libvirt/ffi/libvirt.rb +0 -17
- data/lib/libvirt/ffi/node_info.rb +0 -37
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,40 +3,14 @@
|
|
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
|
-
# enum virDomainEventID
|
12
|
-
enum :event_id, [
|
13
|
-
:LIFECYCLE, 0, # (0x0) virConnectDomainEventCallback
|
14
|
-
:REBOOT, 1, # (0x1) virConnectDomainEventGenericCallback
|
15
|
-
:RTC_CHANGE, 2, # (0x2) virConnectDomainEventRTCChangeCallback
|
16
|
-
:WATCHDOG, 3, # (0x3) virConnectDomainEventWatchdogCallback
|
17
|
-
:IO_ERROR, 4, # (0x4) virConnectDomainEventIOErrorCallback
|
18
|
-
:GRAPHICS, 5, # (0x5) virConnectDomainEventGraphicsCallback
|
19
|
-
:IO_ERROR_REASON, 6, # (0x6) virConnectDomainEventIOErrorReasonCallback
|
20
|
-
:CONTROL_ERROR, 7, # (0x7) virConnectDomainEventGenericCallback
|
21
|
-
:BLOCK_JOB, 8, # (0x8) virConnectDomainEventBlockJobCallback
|
22
|
-
:DISK_CHANGE, 9, # (0x9) virConnectDomainEventDiskChangeCallback
|
23
|
-
:TRAY_CHANGE, 10, # (0xa) virConnectDomainEventTrayChangeCallback
|
24
|
-
:PMWAKEUP, 11, # (0xb) virConnectDomainEventPMWakeupCallback
|
25
|
-
:PMSUSPEND, 12, # (0xc) virConnectDomainEventPMSuspendCallback
|
26
|
-
:BALLOON_CHANGE, 13, # (0xd) virConnectDomainEventBalloonChangeCallback
|
27
|
-
:PMSUSPEND_DISK, 14, # (0xe) virConnectDomainEventPMSuspendDiskCallback
|
28
|
-
:DEVICE_REMOVED, 15, # (0xf) virConnectDomainEventDeviceRemovedCallback
|
29
|
-
:BLOCK_JOB_2, 16, # (0x10) virConnectDomainEventBlockJobCallback
|
30
|
-
:TUNABLE, 17, # (0x11) virConnectDomainEventTunableCallback
|
31
|
-
:AGENT_LIFECYCLE, 18, # (0x12) virConnectDomainEventAgentLifecycleCallback
|
32
|
-
:DEVICE_ADDED, 19, # (0x13) virConnectDomainEventDeviceAddedCallback
|
33
|
-
:MIGRATION_ITERATION, 20, # (0x14) virConnectDomainEventMigrationIterationCallback
|
34
|
-
:JOB_COMPLETED, 21, # (0x15) virConnectDomainEventJobCompletedCallback
|
35
|
-
:DEVICE_REMOVAL_FAILED, 22, # (0x16) virConnectDomainEventDeviceRemovalFailedCallback
|
36
|
-
:METADATA_CHANGE, 23, # (0x17) virConnectDomainEventMetadataChangeCallback
|
37
|
-
:BLOCK_THRESHOLD, 24 # (0x18) virConnectDomainEventBlockThresholdCallback
|
38
|
-
]
|
39
|
-
|
40
14
|
EVENT_ID_TO_CALLBACK = {
|
41
15
|
LIFECYCLE: :virConnectDomainEventCallback,
|
42
16
|
REBOOT: :virConnectDomainEventGenericCallback,
|
@@ -63,37 +37,278 @@ module Libvirt
|
|
63
37
|
DEVICE_REMOVAL_FAILED: :virConnectDomainEventDeviceRemovalFailedCallback,
|
64
38
|
METADATA_CHANGE: :virConnectDomainEventMetadataChangeCallback,
|
65
39
|
BLOCK_THRESHOLD: :virConnectDomainEventBlockThresholdCallback
|
66
|
-
}
|
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
|
+
]
|
67
70
|
|
68
71
|
# enum virDomainState
|
69
72
|
enum :state, [
|
70
|
-
:NOSTATE, 0x0,
|
71
|
-
:RUNNING, 0x1,
|
72
|
-
:BLOCKED, 0x2,
|
73
|
-
:PAUSED, 0x3,
|
74
|
-
:SHUTDOWN, 0x4,
|
75
|
-
:SHUTOFF, 0x5,
|
76
|
-
:CRASHED, 0x6,
|
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
|
77
80
|
:PMSUSPENDED, 0x7 # the domain is suspended by guest power management
|
78
81
|
]
|
79
82
|
|
80
|
-
#
|
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 (
|
81
296
|
# virDomainPtr domain
|
82
297
|
# )
|
83
298
|
attach_function :virDomainFree, [:pointer], :int
|
84
299
|
|
85
|
-
# int
|
300
|
+
# int virDomainRef (
|
86
301
|
# virDomainPtr domain
|
87
302
|
# )
|
88
303
|
attach_function :virDomainRef, [:pointer], :int
|
89
304
|
|
90
|
-
# int
|
305
|
+
# int virConnectDomainEventRegisterAny(
|
91
306
|
# virConnectPtr conn,
|
92
|
-
#
|
93
|
-
#
|
94
|
-
#
|
95
|
-
#
|
96
|
-
#
|
307
|
+
# virDomainPtr dom,
|
308
|
+
# int eventID,
|
309
|
+
# virConnectDomainEventGenericCallback cb,
|
310
|
+
# void * opaque,
|
311
|
+
# virFreeCallback freecb
|
97
312
|
# )
|
98
313
|
attach_function :virConnectDomainEventRegisterAny, [
|
99
314
|
:pointer,
|
@@ -104,92 +319,92 @@ module Libvirt
|
|
104
319
|
:pointer
|
105
320
|
], :int
|
106
321
|
|
107
|
-
# int
|
322
|
+
# int virConnectDomainEventDeregisterAny (
|
108
323
|
# virConnectPtr conn,
|
109
|
-
#
|
324
|
+
# int callbackID
|
110
325
|
# )
|
111
326
|
attach_function :virConnectDomainEventDeregisterAny, [:pointer, :int], :int
|
112
327
|
|
113
|
-
# int
|
328
|
+
# int virConnectListAllDomains (
|
114
329
|
# virConnectPtr conn,
|
115
|
-
#
|
116
|
-
#
|
330
|
+
# virDomainPtr **domains,
|
331
|
+
# unsigned int flags
|
117
332
|
# )
|
118
333
|
attach_function :virConnectListAllDomains, [:pointer, :pointer, :uint], :int
|
119
334
|
|
120
|
-
# int
|
335
|
+
# int virDomainGetState (
|
121
336
|
# virDomainPtr domain,
|
122
|
-
#
|
123
|
-
#
|
124
|
-
#
|
337
|
+
# int *state,
|
338
|
+
# int *reason,
|
339
|
+
# unsigned int flags
|
125
340
|
# )
|
126
341
|
attach_function :virDomainGetState, [:pointer, :pointer, :pointer, :uint], :int
|
127
342
|
|
128
343
|
# const char *virDomainGetName (
|
129
344
|
# virDomainPtr domain
|
130
345
|
# )
|
131
|
-
attach_function :virDomainGetName, [:pointer], :string
|
346
|
+
attach_function :virDomainGetName, [:pointer], :string
|
132
347
|
|
133
|
-
# int
|
348
|
+
# int virDomainGetMaxVcpus (
|
134
349
|
# virDomainPtr domain
|
135
350
|
# )
|
136
351
|
attach_function :virDomainGetMaxVcpus, [:pointer], :int
|
137
352
|
|
138
|
-
# int
|
353
|
+
# int virDomainGetVcpus (
|
139
354
|
# virDomainPtr domain,
|
140
|
-
#
|
141
|
-
#
|
142
|
-
#
|
143
|
-
#
|
355
|
+
# virVcpuInfoPtr info,
|
356
|
+
# int maxinfo,
|
357
|
+
# unsigned char * cpumaps,
|
358
|
+
# int maplen
|
144
359
|
# )
|
145
360
|
attach_function :virDomainGetVcpus, [:pointer, :pointer, :int, :pointer, :int], :int
|
146
361
|
|
147
|
-
# int
|
362
|
+
# int virDomainGetUUIDString (
|
148
363
|
# virDomainPtr domain,
|
149
|
-
#
|
364
|
+
# char * buf
|
150
365
|
# )
|
151
366
|
attach_function :virDomainGetUUIDString, [:pointer, :pointer], :int
|
152
367
|
|
153
|
-
# unsigned long
|
368
|
+
# unsigned long virDomainGetMaxMemory (
|
154
369
|
# virDomainPtr domain
|
155
370
|
# )
|
156
371
|
attach_function :virDomainGetMaxMemory, [:pointer], :ulong
|
157
372
|
|
158
|
-
# char *virDomainGetXMLDesc
|
373
|
+
# char *virDomainGetXMLDesc (
|
159
374
|
# virDomainPtr domain,
|
160
|
-
#
|
375
|
+
# unsigned int flags
|
161
376
|
# )
|
162
|
-
attach_function :virDomainGetXMLDesc, [:pointer, :
|
377
|
+
attach_function :virDomainGetXMLDesc, [:pointer, :xml_flags], :string
|
163
378
|
|
164
379
|
# char *virDomainScreenshot (
|
165
380
|
# virDomainPtr domain,
|
166
|
-
#
|
167
|
-
#
|
168
|
-
#
|
381
|
+
# virStreamPtr stream,
|
382
|
+
# unsigned int screen,
|
383
|
+
# unsigned int flags
|
169
384
|
# )
|
170
385
|
attach_function :virDomainScreenshot, [:pointer, :pointer, :uint, :uint], :strptr
|
171
386
|
|
172
|
-
# typedef int
|
387
|
+
# typedef int (*virConnectDomainEventCallback) (
|
173
388
|
# virConnectPtr conn,
|
174
|
-
#
|
175
|
-
#
|
176
|
-
#
|
177
|
-
#
|
389
|
+
# virDomainPtr dom,
|
390
|
+
# int event,
|
391
|
+
# int detail,
|
392
|
+
# void * opaque
|
178
393
|
# )
|
179
|
-
callback :virConnectDomainEventCallback, [:pointer, :pointer, :
|
394
|
+
callback :virConnectDomainEventCallback, [:pointer, :pointer, :event_type, :int, :pointer], :int
|
180
395
|
|
181
396
|
# typedef void (*virConnectDomainEventGenericCallback) (
|
182
397
|
# virConnectPtr conn,
|
183
|
-
#
|
184
|
-
#
|
398
|
+
# virDomainPtr dom,
|
399
|
+
# void * opaque
|
185
400
|
# )
|
186
401
|
callback :virConnectDomainEventGenericCallback, [:pointer, :pointer, :pointer], :void
|
187
402
|
|
188
403
|
# typedef void (*virConnectDomainEventRTCChangeCallback) (
|
189
404
|
# virConnectPtr conn,
|
190
|
-
#
|
191
|
-
#
|
192
|
-
#
|
405
|
+
# virDomainPtr dom,
|
406
|
+
# long long utcoffset,
|
407
|
+
# void * opaque
|
193
408
|
# )
|
194
409
|
callback :virConnectDomainEventRTCChangeCallback, [
|
195
410
|
:pointer,
|
@@ -198,11 +413,11 @@ module Libvirt
|
|
198
413
|
:pointer
|
199
414
|
], :void
|
200
415
|
|
201
|
-
# typedef void (*virConnectDomainEventWatchdogCallback)
|
416
|
+
# typedef void (*virConnectDomainEventWatchdogCallback) (
|
202
417
|
# virConnectPtr conn,
|
203
|
-
#
|
204
|
-
#
|
205
|
-
#
|
418
|
+
# virDomainPtr dom,
|
419
|
+
# int action,
|
420
|
+
# void * opaque
|
206
421
|
# )
|
207
422
|
callback :virConnectDomainEventWatchdogCallback, [
|
208
423
|
:pointer,
|
@@ -213,11 +428,11 @@ module Libvirt
|
|
213
428
|
|
214
429
|
# typedef void (*virConnectDomainEventIOErrorCallback) (
|
215
430
|
# virConnectPtr conn,
|
216
|
-
#
|
217
|
-
#
|
218
|
-
#
|
219
|
-
#
|
220
|
-
#
|
431
|
+
# virDomainPtr dom,
|
432
|
+
# const char * srcPath,
|
433
|
+
# const char * devAlias,
|
434
|
+
# int action,
|
435
|
+
# void * opaque
|
221
436
|
# )
|
222
437
|
callback :virConnectDomainEventIOErrorCallback, [
|
223
438
|
:pointer,
|
@@ -228,35 +443,35 @@ module Libvirt
|
|
228
443
|
:pointer
|
229
444
|
], :void
|
230
445
|
|
231
|
-
# typedef void (*virConnectDomainEventGraphicsCallback)
|
446
|
+
# typedef void (*virConnectDomainEventGraphicsCallback) (
|
232
447
|
# virConnectPtr conn,
|
233
|
-
#
|
234
|
-
#
|
235
|
-
#
|
236
|
-
#
|
237
|
-
#
|
238
|
-
#
|
239
|
-
#
|
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
|
240
455
|
# )
|
241
456
|
callback :virConnectDomainEventGraphicsCallback, [
|
242
457
|
:pointer,
|
243
458
|
:pointer,
|
244
459
|
:int,
|
245
|
-
|
246
|
-
|
460
|
+
:pointer,
|
461
|
+
:pointer,
|
247
462
|
:string,
|
248
|
-
|
463
|
+
:pointer,
|
249
464
|
:pointer
|
250
465
|
], :void
|
251
466
|
|
252
|
-
# typedef void
|
467
|
+
# typedef void (*virConnectDomainEventIOErrorReasonCallback) (
|
253
468
|
# virConnectPtr conn,
|
254
|
-
#
|
255
|
-
#
|
256
|
-
#
|
257
|
-
#
|
258
|
-
#
|
259
|
-
#
|
469
|
+
# virDomainPtr dom,
|
470
|
+
# const char * srcPath,
|
471
|
+
# const char * devAlias,
|
472
|
+
# int action,
|
473
|
+
# const char * reason,
|
474
|
+
# void * opaque
|
260
475
|
# )
|
261
476
|
callback :virConnectDomainEventIOErrorReasonCallback, [
|
262
477
|
:pointer,
|
@@ -268,13 +483,13 @@ module Libvirt
|
|
268
483
|
:pointer
|
269
484
|
], :void
|
270
485
|
|
271
|
-
# typedef void
|
486
|
+
# typedef void (*virConnectDomainEventBlockJobCallback) (
|
272
487
|
# virConnectPtr conn,
|
273
|
-
#
|
274
|
-
#
|
275
|
-
#
|
276
|
-
#
|
277
|
-
#
|
488
|
+
# virDomainPtr dom,
|
489
|
+
# const char * disk,
|
490
|
+
# int type,
|
491
|
+
# int status,
|
492
|
+
# void * opaque
|
278
493
|
# )
|
279
494
|
callback :virConnectDomainEventBlockJobCallback, [
|
280
495
|
:pointer,
|
@@ -285,14 +500,14 @@ module Libvirt
|
|
285
500
|
:pointer
|
286
501
|
], :void
|
287
502
|
|
288
|
-
# typedef void
|
503
|
+
# typedef void (*virConnectDomainEventDiskChangeCallback) (
|
289
504
|
# virConnectPtr conn,
|
290
|
-
#
|
291
|
-
#
|
292
|
-
#
|
293
|
-
#
|
294
|
-
#
|
295
|
-
#
|
505
|
+
# virDomainPtr dom,
|
506
|
+
# const char * oldSrcPath,
|
507
|
+
# const char * newSrcPath,
|
508
|
+
# const char * devAlias,
|
509
|
+
# int reason,
|
510
|
+
# void * opaque
|
296
511
|
# )
|
297
512
|
callback :virConnectDomainEventDiskChangeCallback, [
|
298
513
|
:pointer,
|
@@ -304,12 +519,12 @@ module Libvirt
|
|
304
519
|
:pointer
|
305
520
|
], :void
|
306
521
|
|
307
|
-
# typedef void
|
522
|
+
# typedef void (*virConnectDomainEventTrayChangeCallback) (
|
308
523
|
# virConnectPtr conn,
|
309
|
-
#
|
310
|
-
#
|
311
|
-
#
|
312
|
-
#
|
524
|
+
# virDomainPtr dom,
|
525
|
+
# const char * devAlias,
|
526
|
+
# int reason,
|
527
|
+
# void * opaque
|
313
528
|
# )
|
314
529
|
callback :virConnectDomainEventTrayChangeCallback, [
|
315
530
|
:pointer,
|
@@ -319,11 +534,11 @@ module Libvirt
|
|
319
534
|
:pointer
|
320
535
|
], :void
|
321
536
|
|
322
|
-
# typedef void
|
537
|
+
# typedef void (*virConnectDomainEventPMWakeupCallback) (
|
323
538
|
# virConnectPtr conn,
|
324
|
-
#
|
325
|
-
#
|
326
|
-
#
|
539
|
+
# virDomainPtr dom,
|
540
|
+
# int reason,
|
541
|
+
# void * opaque
|
327
542
|
# )
|
328
543
|
callback :virConnectDomainEventPMWakeupCallback, [
|
329
544
|
:pointer,
|
@@ -332,11 +547,11 @@ module Libvirt
|
|
332
547
|
:pointer
|
333
548
|
], :void
|
334
549
|
|
335
|
-
# typedef void
|
550
|
+
# typedef void (*virConnectDomainEventPMSuspendCallback) (
|
336
551
|
# virConnectPtr conn,
|
337
|
-
#
|
338
|
-
#
|
339
|
-
#
|
552
|
+
# virDomainPtr dom,
|
553
|
+
# int reason,
|
554
|
+
# void * opaque
|
340
555
|
# )
|
341
556
|
callback :virConnectDomainEventPMSuspendCallback, [
|
342
557
|
:pointer,
|
@@ -345,11 +560,11 @@ module Libvirt
|
|
345
560
|
:pointer
|
346
561
|
], :void
|
347
562
|
|
348
|
-
# typedef void
|
563
|
+
# typedef void (*virConnectDomainEventBalloonChangeCallback) (
|
349
564
|
# virConnectPtr conn,
|
350
|
-
#
|
351
|
-
#
|
352
|
-
#
|
565
|
+
# virDomainPtr dom,
|
566
|
+
# unsigned long long actual,
|
567
|
+
# void * opaque
|
353
568
|
# )
|
354
569
|
callback :virConnectDomainEventBalloonChangeCallback, [
|
355
570
|
:pointer,
|
@@ -358,11 +573,11 @@ module Libvirt
|
|
358
573
|
:pointer
|
359
574
|
], :void
|
360
575
|
|
361
|
-
# typedef void
|
576
|
+
# typedef void (*virConnectDomainEventPMSuspendDiskCallback) (
|
362
577
|
# virConnectPtr conn,
|
363
|
-
#
|
364
|
-
#
|
365
|
-
#
|
578
|
+
# virDomainPtr dom,
|
579
|
+
# int reason,
|
580
|
+
# void * opaque
|
366
581
|
# )
|
367
582
|
callback :virConnectDomainEventPMSuspendDiskCallback, [
|
368
583
|
:pointer,
|
@@ -371,11 +586,11 @@ module Libvirt
|
|
371
586
|
:pointer
|
372
587
|
], :void
|
373
588
|
|
374
|
-
# typedef void
|
589
|
+
# typedef void (*virConnectDomainEventDeviceRemovedCallback) (
|
375
590
|
# virConnectPtr conn,
|
376
|
-
#
|
377
|
-
#
|
378
|
-
#
|
591
|
+
# virDomainPtr dom,
|
592
|
+
# const char * devAlias,
|
593
|
+
# void * opaque
|
379
594
|
# )
|
380
595
|
callback :virConnectDomainEventDeviceRemovedCallback, [
|
381
596
|
:pointer,
|
@@ -384,27 +599,27 @@ module Libvirt
|
|
384
599
|
:pointer
|
385
600
|
], :void
|
386
601
|
|
387
|
-
# typedef void
|
602
|
+
# typedef void (*virConnectDomainEventTunableCallback) (
|
388
603
|
# virConnectPtr conn,
|
389
|
-
#
|
390
|
-
#
|
391
|
-
#
|
392
|
-
#
|
604
|
+
# virDomainPtr dom,
|
605
|
+
# virTypedParameterPtr params,
|
606
|
+
# int nparams,
|
607
|
+
# void * opaque
|
393
608
|
# )
|
394
609
|
callback :virConnectDomainEventTunableCallback, [
|
395
610
|
:pointer,
|
396
611
|
:pointer,
|
397
|
-
|
612
|
+
:pointer,
|
398
613
|
:int,
|
399
614
|
:pointer
|
400
615
|
], :void
|
401
616
|
|
402
|
-
# typedef void
|
617
|
+
# typedef void (*virConnectDomainEventAgentLifecycleCallback) (
|
403
618
|
# virConnectPtr conn,
|
404
|
-
#
|
405
|
-
#
|
406
|
-
#
|
407
|
-
#
|
619
|
+
# virDomainPtr dom,
|
620
|
+
# int state,
|
621
|
+
# int reason,
|
622
|
+
# void * opaque
|
408
623
|
# )
|
409
624
|
callback :virConnectDomainEventAgentLifecycleCallback, [
|
410
625
|
:pointer,
|
@@ -414,11 +629,11 @@ module Libvirt
|
|
414
629
|
:pointer
|
415
630
|
], :void
|
416
631
|
|
417
|
-
# typedef void
|
632
|
+
# typedef void (*virConnectDomainEventDeviceAddedCallback) (
|
418
633
|
# virConnectPtr conn,
|
419
|
-
#
|
420
|
-
#
|
421
|
-
#
|
634
|
+
# virDomainPtr dom,
|
635
|
+
# const char * devAlias,
|
636
|
+
# void * opaque
|
422
637
|
# )
|
423
638
|
callback :virConnectDomainEventDeviceAddedCallback, [
|
424
639
|
:pointer,
|
@@ -427,11 +642,11 @@ module Libvirt
|
|
427
642
|
:pointer
|
428
643
|
], :void
|
429
644
|
|
430
|
-
# typedef void
|
645
|
+
# typedef void (*virConnectDomainEventMigrationIterationCallback) (
|
431
646
|
# virConnectPtr conn,
|
432
|
-
#
|
433
|
-
#
|
434
|
-
#
|
647
|
+
# virDomainPtr dom,
|
648
|
+
# int iteration,
|
649
|
+
# void * opaque
|
435
650
|
# )
|
436
651
|
callback :virConnectDomainEventMigrationIterationCallback, [
|
437
652
|
:pointer,
|
@@ -440,26 +655,26 @@ module Libvirt
|
|
440
655
|
:pointer
|
441
656
|
], :void
|
442
657
|
|
443
|
-
# typedef void
|
658
|
+
# typedef void (*virConnectDomainEventJobCompletedCallback) (
|
444
659
|
# virConnectPtr conn,
|
445
|
-
#
|
446
|
-
#
|
447
|
-
#
|
448
|
-
#
|
660
|
+
# virDomainPtr dom,
|
661
|
+
# virTypedParameterPtr params,
|
662
|
+
# int nparams,
|
663
|
+
# void * opaque
|
449
664
|
# )
|
450
665
|
callback :virConnectDomainEventJobCompletedCallback, [
|
451
666
|
:pointer,
|
452
667
|
:pointer,
|
453
|
-
|
668
|
+
:pointer,
|
454
669
|
:int,
|
455
670
|
:pointer
|
456
671
|
], :void
|
457
672
|
|
458
|
-
# typedef void
|
673
|
+
# typedef void (*virConnectDomainEventDeviceRemovalFailedCallback) (
|
459
674
|
# virConnectPtr conn,
|
460
|
-
#
|
461
|
-
#
|
462
|
-
#
|
675
|
+
# virDomainPtr dom,
|
676
|
+
# const char * devAlias,
|
677
|
+
# void * opaque
|
463
678
|
# )
|
464
679
|
callback :virConnectDomainEventDeviceRemovalFailedCallback, [
|
465
680
|
:pointer,
|
@@ -468,28 +683,29 @@ module Libvirt
|
|
468
683
|
:pointer
|
469
684
|
], :void
|
470
685
|
|
471
|
-
# typedef void
|
686
|
+
# typedef void (*virConnectDomainEventMetadataChangeCallback) (
|
472
687
|
# virConnectPtr conn,
|
473
|
-
#
|
474
|
-
#
|
475
|
-
#
|
476
|
-
#
|
688
|
+
# virDomainPtr dom,
|
689
|
+
# int type,
|
690
|
+
# const char * nsuri,
|
691
|
+
# void * opaque
|
477
692
|
# )
|
478
693
|
callback :virConnectDomainEventMetadataChangeCallback, [
|
479
694
|
:pointer,
|
480
695
|
:pointer,
|
696
|
+
:metadata_type,
|
481
697
|
:string,
|
482
698
|
:pointer
|
483
699
|
], :void
|
484
700
|
|
485
|
-
# typedef void
|
701
|
+
# typedef void (*virConnectDomainEventBlockThresholdCallback) (
|
486
702
|
# virConnectPtr conn,
|
487
|
-
#
|
488
|
-
#
|
489
|
-
#
|
490
|
-
#
|
491
|
-
#
|
492
|
-
#
|
703
|
+
# virDomainPtr dom,
|
704
|
+
# const char * dev,
|
705
|
+
# const char * path,
|
706
|
+
# unsigned long long threshold,
|
707
|
+
# unsigned long long excess,
|
708
|
+
# void * opaque
|
493
709
|
# )
|
494
710
|
callback :virConnectDomainEventBlockThresholdCallback, [
|
495
711
|
:pointer,
|
@@ -501,22 +717,140 @@ module Libvirt
|
|
501
717
|
:pointer
|
502
718
|
], :void
|
503
719
|
|
504
|
-
#
|
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]
|
505
817
|
# @yield connect_ptr, domain_ptr, *args, opaque_ptr
|
506
|
-
|
507
|
-
|
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)
|
508
835
|
callback_name = EVENT_ID_TO_CALLBACK.fetch(event_id_sym)
|
509
|
-
|
510
|
-
::FFI::Function.new(callback_info.result_type, callback_info.param_types) do |*args|
|
836
|
+
callback_function(callback_name) do |*args|
|
511
837
|
Util.log(:debug) { "Libvirt::Domain #{event_id_sym} CALLBACK #{args.map(&:to_s).join(', ')}," }
|
512
838
|
block.call(*args)
|
513
|
-
# Only callback for lifecycle must return 0.
|
514
|
-
# Return value of other callbacks are ignored.
|
515
|
-
# So we just pass zero everywhere.
|
516
|
-
0
|
517
839
|
end
|
518
840
|
end
|
519
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
|
520
854
|
end
|
521
855
|
end
|
522
856
|
end
|