libvirt 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.
Files changed (74) hide show
  1. data/.gitignore +10 -0
  2. data/.yardopts +3 -0
  3. data/CHANGELOG.md +3 -0
  4. data/Gemfile +12 -0
  5. data/Gemfile.lock +36 -0
  6. data/README.md +83 -0
  7. data/Rakefile +20 -0
  8. data/docs/user_guide.md +259 -0
  9. data/examples/README.md +10 -0
  10. data/examples/create_domain.rb +46 -0
  11. data/examples/print_domain_info.rb +46 -0
  12. data/examples/print_hypervisor_info.rb +40 -0
  13. data/lib/ffi/libvirt/domain_info.rb +12 -0
  14. data/lib/ffi/libvirt/error.rb +25 -0
  15. data/lib/ffi/libvirt/error_functions.rb +21 -0
  16. data/lib/ffi/libvirt/error_types.rb +125 -0
  17. data/lib/ffi/libvirt/functions.rb +363 -0
  18. data/lib/ffi/libvirt/node_info.rb +27 -0
  19. data/lib/ffi/libvirt/storage_pool_info.rb +11 -0
  20. data/lib/ffi/libvirt/storage_volume_info.rb +14 -0
  21. data/lib/ffi/libvirt/types.rb +61 -0
  22. data/lib/ffi/libvirt/util.rb +19 -0
  23. data/lib/ffi/libvirt/version.rb +46 -0
  24. data/lib/ffi/libvirt.rb +29 -0
  25. data/lib/libvirt/collection/abstract_collection.rb +49 -0
  26. data/lib/libvirt/collection/domain_collection.rb +98 -0
  27. data/lib/libvirt/collection/interface_collection.rb +16 -0
  28. data/lib/libvirt/collection/network_collection.rb +58 -0
  29. data/lib/libvirt/collection/node_device_collection.rb +29 -0
  30. data/lib/libvirt/collection/nwfilter_collection.rb +15 -0
  31. data/lib/libvirt/collection/storage_pool_collection.rb +58 -0
  32. data/lib/libvirt/collection/storage_volume_collection.rb +57 -0
  33. data/lib/libvirt/collection.rb +12 -0
  34. data/lib/libvirt/connection.rb +225 -0
  35. data/lib/libvirt/domain.rb +241 -0
  36. data/lib/libvirt/error.rb +91 -0
  37. data/lib/libvirt/exception.rb +19 -0
  38. data/lib/libvirt/network.rb +118 -0
  39. data/lib/libvirt/node.rb +118 -0
  40. data/lib/libvirt/node_device.rb +75 -0
  41. data/lib/libvirt/spec/device/disk.rb +58 -0
  42. data/lib/libvirt/spec/device/emulator.rb +23 -0
  43. data/lib/libvirt/spec/device.rb +8 -0
  44. data/lib/libvirt/spec/domain/os_booting.rb +69 -0
  45. data/lib/libvirt/spec/domain.rb +71 -0
  46. data/lib/libvirt/spec.rb +12 -0
  47. data/lib/libvirt/storage_pool.rb +164 -0
  48. data/lib/libvirt/storage_volume.rb +109 -0
  49. data/lib/libvirt/version.rb +3 -0
  50. data/lib/libvirt.rb +53 -0
  51. data/libvirt.gemspec +27 -0
  52. data/test/libvirt/collection/abstract_collection_test.rb +14 -0
  53. data/test/libvirt/collection/domain_collection_test.rb +122 -0
  54. data/test/libvirt/collection/interface_collection_test.rb +9 -0
  55. data/test/libvirt/collection/network_collection_test.rb +41 -0
  56. data/test/libvirt/collection/node_device_collection_test.rb +24 -0
  57. data/test/libvirt/collection/nwfilter_collection_test.rb +7 -0
  58. data/test/libvirt/collection/storage_pool_collection_test.rb +41 -0
  59. data/test/libvirt/collection/storage_volume_collection_test.rb +86 -0
  60. data/test/libvirt/connection_test.rb +133 -0
  61. data/test/libvirt/domain_test.rb +221 -0
  62. data/test/libvirt/error_test.rb +93 -0
  63. data/test/libvirt/libvirt_test.rb +16 -0
  64. data/test/libvirt/network_test.rb +76 -0
  65. data/test/libvirt/node_device_test.rb +16 -0
  66. data/test/libvirt/node_test.rb +24 -0
  67. data/test/libvirt/spec/devices/disk_test.rb +107 -0
  68. data/test/libvirt/spec/devices/emulator_test.rb +20 -0
  69. data/test/libvirt/spec/domain_test.rb +17 -0
  70. data/test/libvirt/storage_pool_test.rb +133 -0
  71. data/test/libvirt/storage_volume_test.rb +63 -0
  72. data/test/support/xml_assertions.rb +29 -0
  73. data/test/test_helper.rb +23 -0
  74. metadata +219 -0
@@ -0,0 +1,125 @@
1
+ module FFI
2
+ module Libvirt
3
+ # The types for virterror, which is a separate header file than
4
+ # libvirt.h, so we're separating it in the FFI code to make it
5
+ # easier to maintain.
6
+
7
+ # Pointers to various libvirt structs
8
+ typedef :pointer, :virErrorPtr
9
+
10
+ # Callbacks
11
+ callback :virErrorFunc, [:void_pointer, :virErrorPtr], :void
12
+
13
+ # Enums
14
+ enum :virErrorLevel, [:none, :warning, :error]
15
+ enum :virErrorDomain, [:none,
16
+ :xen,
17
+ :xend,
18
+ :xenstore,
19
+ :sexpr,
20
+ :xml,
21
+ :dom,
22
+ :rpc,
23
+ :proxy,
24
+ :conf,
25
+ :qemu,
26
+ :net,
27
+ :test,
28
+ :remote,
29
+ :openvz,
30
+ :xenxm,
31
+ :stats_linux,
32
+ :lxc,
33
+ :storage,
34
+ :network,
35
+ :domain,
36
+ :uml,
37
+ :nodedev,
38
+ :xen_inotify,
39
+ :security,
40
+ :vbox,
41
+ :interface,
42
+ :one,
43
+ :esx,
44
+ :phyp,
45
+ :secret,
46
+ :cpu,
47
+ :xenapi,
48
+ :nwfilter,
49
+ :hook,
50
+ :domain_snapshot]
51
+
52
+ enum :virErrorNumber, [:ok,
53
+ :internal_error,
54
+ :no_memory,
55
+ :no_support,
56
+ :unknown_host,
57
+ :no_connect,
58
+ :invalid_conn,
59
+ :invalid_domain,
60
+ :invalid_arg,
61
+ :operation_failed,
62
+ :get_failed,
63
+ :post_failed,
64
+ :http_error,
65
+ :sexpr_serial,
66
+ :no_xen,
67
+ :xen_call,
68
+ :os_type,
69
+ :no_kernel,
70
+ :no_root,
71
+ :no_source,
72
+ :no_target,
73
+ :no_name,
74
+ :no_os,
75
+ :no_device,
76
+ :no_xenstore,
77
+ :driver_full,
78
+ :call_failed,
79
+ :xml_error,
80
+ :dom_exist,
81
+ :operation_denied,
82
+ :open_failed,
83
+ :read_failed,
84
+ :parse_failed,
85
+ :conf_syntax,
86
+ :write_failed,
87
+ :xml_detail,
88
+ :invalid_network,
89
+ :network_exist,
90
+ :system_error,
91
+ :rpc,
92
+ :gnutls_error,
93
+ :no_network,
94
+ :invalid_mac,
95
+ :auth_failed,
96
+ :invalid_storage_pool,
97
+ :invalid_storage_vol,
98
+ :no_storage,
99
+ :no_storage_pool,
100
+ :no_storage_vol,
101
+ :no_node,
102
+ :invalid_node_device,
103
+ :no_node_device,
104
+ :no_security_model,
105
+ :operation_invalid,
106
+ :no_interface,
107
+ :no_interface,
108
+ :invalid_interface,
109
+ :multiple_interfaces,
110
+ :no_nwfilter,
111
+ :invalid_nwfilter,
112
+ :no_nwfilter,
113
+ :build_firewall,
114
+ :no_secret,
115
+ :invalid_secret,
116
+ :no_secret,
117
+ :config_unsupported,
118
+ :operation_timeout,
119
+ :migrate_persist_failed,
120
+ :hook_script_failed,
121
+ :invalid_domain_snapshot,
122
+ :no_domain_snapshot]
123
+
124
+ end
125
+ end
@@ -0,0 +1,363 @@
1
+ module FFI
2
+ module Libvirt
3
+ # Below attached functions in order of appearance in libvirt.h
4
+ # which allows this file to more easily be maintained.
5
+
6
+ attach_function :virInitialize, [], :int
7
+
8
+ libvirt_version "0.6.0" do
9
+ attach_function :virDomainMigrate, [:virDomainPtr, :virConnectPtr, :ulong, :string, :string, :ulong], :virDomainPtr
10
+
11
+ # Connection/disconnection to the Hypervisor
12
+ attach_function :virConnectOpen, [:string], :virConnectPtr
13
+ attach_function :virConnectOpenReadOnly, [:string], :virConnectPtr
14
+ attach_function :virConnectOpenAuth, [:string, :virConnectAuthPtr, :int], :virConnectPtr
15
+ attach_function :virConnectRef, [:virConnectPtr], :int
16
+ attach_function :virConnectClose, [:virConnectPtr], :int
17
+ attach_function :virConnectGetType, [:virConnectPtr], :string
18
+ attach_function :virConnectGetVersion, [:virConnectPtr, :unsigned_long_pointer], :int
19
+ attach_function :virConnectGetHostname, [:virConnectPtr], :string
20
+ attach_function :virConnectGetURI, [:virConnectPtr], :string
21
+
22
+ # Capabilities of the connection/driver
23
+ attach_function :virConnectGetMaxVcpus, [:virConnectPtr, :string], :int
24
+ attach_function :virNodeGetInfo, [:virConnectPtr, :virNodeInfoPtr], :int
25
+ attach_function :virConnectGetCapabilities, [:virConnectPtr], :string
26
+ attach_function :virNodeGetFreeMemory, [:virConnectPtr], :ulong_long
27
+
28
+ # List of running domains
29
+ attach_function :virConnectListDomains, [:virConnectPtr, :int_pointer, :int], :int
30
+
31
+ # Number of domains
32
+ attach_function :virConnectNumOfDomains, [:virConnectPtr], :int
33
+
34
+ # Get connection from domain
35
+ attach_function :virDomainGetConnect, [:virDomainPtr], :virConnectPtr
36
+
37
+ # Domain creation and destruction
38
+ attach_function :virDomainCreateXML, [:virConnectPtr, :string, :uint], :virDomainPtr
39
+ attach_function :virDomainLookupByName, [:virConnectPtr, :string], :virDomainPtr
40
+ attach_function :virDomainLookupByID, [:virConnectPtr, :int], :virDomainPtr
41
+ attach_function :virDomainLookupByUUID, [:virConnectPtr, :string], :virDomainPtr
42
+ attach_function :virDomainLookupByUUIDString, [:virConnectPtr, :string], :virDomainPtr
43
+ attach_function :virDomainShutdown, [:virDomainPtr], :int
44
+ attach_function :virDomainReboot, [:virDomainPtr, :uint], :int
45
+ attach_function :virDomainDestroy, [:virDomainPtr], :int
46
+ attach_function :virDomainRef, [:virDomainPtr], :int
47
+ attach_function :virDomainFree, [:virDomainPtr], :int
48
+
49
+ # Domain suspend/resume
50
+ attach_function :virDomainSuspend, [:virDomainPtr], :int
51
+ attach_function :virDomainResume, [:virDomainPtr], :int
52
+
53
+ # Domain save/restore
54
+ attach_function :virDomainSave, [:virDomainPtr, :string], :int
55
+ attach_function :virDomainRestore, [:virDomainPtr, :string], :int
56
+
57
+ # Domain core dump
58
+ attach_function :virDomainCoreDump, [:virDomainPtr, :string, :int], :int
59
+
60
+ # Domain runtime information
61
+ attach_function :virDomainGetInfo, [:virDomainPtr, :virDomainInfoPtr], :int
62
+
63
+ # Return scheduler type in effect
64
+ attach_function :virDomainGetSchedulerType, [:virDomainPtr, :int_pointer], :string
65
+ attach_function :virDomainGetSchedulerParameters, [:virDomainPtr, :virSchedParameterPtr, :int_pointer], :int
66
+ attach_function :virDomainSetSchedulerParameters, [:virDomainPtr, :virSchedParameterPtr, :int], :int
67
+
68
+ # Dynamic control of domains
69
+ attach_function :virDomainGetName, [:virDomainPtr], :string
70
+ attach_function :virDomainGetID, [:virDomainPtr], :uint
71
+ attach_function :virDomainGetUUID, [:virDomainPtr, :pointer], :int
72
+ attach_function :virDomainGetUUIDString, [:virDomainPtr, :pointer], :int
73
+ attach_function :virDomainGetOSType, [:virDomainPtr], :string
74
+ attach_function :virDomainGetMaxMemory, [:virDomainPtr], :ulong
75
+ attach_function :virDomainSetMaxMemory, [:virDomainPtr, :ulong], :int
76
+ attach_function :virDomainSetMemory, [:virDomainPtr, :ulong], :int
77
+ attach_function :virDomainGetMaxVcpus, [:virDomainPtr], :int
78
+
79
+ # XML domain description
80
+ attach_function :virDomainGetXMLDesc, [:virDomainPtr, :int], :string
81
+ attach_function :virDomainBlockStats, [:virDomainPtr, :string, :virDomainBlockStatsPtr, :size_t], :int
82
+ attach_function :virDomainInterfaceStats, [:virDomainPtr, :string, :virDomainInterfaceStatsPtr, :size_t], :int
83
+ attach_function :virDomainBlockPeek, [:virDomainPtr, :string, :ulong_long, :size_t, :pointer, :uint], :int
84
+ attach_function :virDomainMemoryPeek, [:virDomainPtr, :ulong_long, :size_t, :pointer, :uint], :int
85
+
86
+ # Defined but not running domains
87
+ attach_function :virDomainDefineXML, [:virConnectPtr, :string], :virDomainPtr
88
+ attach_function :virDomainUndefine, [:virDomainPtr], :int
89
+ attach_function :virConnectNumOfDefinedDomains, [:virConnectPtr], :int
90
+ attach_function :virConnectListDefinedDomains, [:virConnectPtr, :pointer, :int], :int
91
+ attach_function :virDomainCreate, [:virDomainPtr], :int
92
+ attach_function :virDomainGetAutostart, [:virDomainPtr, :int_pointer], :int
93
+ attach_function :virDomainSetAutostart, [:virDomainPtr, :int], :int
94
+ attach_function :virDomainSetVcpus, [:virDomainPtr, :uint], :int
95
+ attach_function :virDomainPinVcpu, [:virDomainPtr, :uint, :string, :int], :int # TODO: Arg in is an array
96
+ attach_function :virDomainGetVcpus, [:virDomainPtr, :virVcpuInfoPtr, :int, :uchar_pointer, :int], :int
97
+
98
+ attach_function :virDomainAttachDevice, [:virDomainPtr, :string], :int
99
+ attach_function :virDomainDetachDevice, [:virDomainPtr, :string], :int
100
+
101
+ # NUMA support
102
+ attach_function :virNodeGetCellsFreeMemory, [:virConnectPtr, :ulong_long_pointer, :int, :int], :int
103
+
104
+ # Virtual Networks API
105
+ attach_function :virNetworkGetConnect, [:virNetworkPtr], :virConnectPtr
106
+ attach_function :virConnectNumOfNetworks, [:virConnectPtr], :int
107
+ attach_function :virConnectListNetworks, [:virConnectPtr, :pointer, :int], :int
108
+ attach_function :virConnectNumOfDefinedNetworks, [:virConnectPtr], :int
109
+ attach_function :virConnectListDefinedNetworks, [:virConnectPtr, :pointer, :int], :int
110
+ attach_function :virNetworkLookupByName, [:virConnectPtr, :string], :virNetworkPtr
111
+ attach_function :virNetworkLookupByUUID, [:virConnectPtr, :string], :virNetworkPtr
112
+ attach_function :virNetworkLookupByUUIDString, [:virConnectPtr, :string], :virNetworkPtr
113
+ attach_function :virNetworkCreateXML, [:virConnectPtr, :string], :virNetworkPtr
114
+ attach_function :virNetworkDefineXML, [:virConnectPtr, :string], :virNetworkPtr
115
+ attach_function :virNetworkUndefine, [:virNetworkPtr], :int
116
+ attach_function :virNetworkCreate, [:virNetworkPtr], :int
117
+ attach_function :virNetworkDestroy, [:virNetworkPtr], :int
118
+ attach_function :virNetworkRef, [:virNetworkPtr], :int
119
+ attach_function :virNetworkFree, [:virNetworkPtr], :int
120
+ attach_function :virNetworkGetName, [:virNetworkPtr], :string
121
+ attach_function :virNetworkGetUUID, [:virNetworkPtr, :pointer], :int
122
+ attach_function :virNetworkGetUUIDString, [:virNetworkPtr, :pointer], :int
123
+ attach_function :virNetworkGetXMLDesc, [:virNetworkPtr, :int], :string
124
+ attach_function :virNetworkGetBridgeName, [:virNetworkPtr], :string
125
+ attach_function :virNetworkGetAutostart, [:virNetworkPtr, :int_pointer], :int
126
+ attach_function :virNetworkSetAutostart, [:virNetworkPtr, :int], :int
127
+
128
+ # Storage pool API
129
+ attach_function :virStoragePoolGetConnect, [:virStoragePoolPtr], :virConnectPtr
130
+ attach_function :virConnectNumOfStoragePools, [:virConnectPtr], :int
131
+ attach_function :virConnectListStoragePools, [:virConnectPtr, :pointer, :int], :int
132
+ attach_function :virConnectNumOfDefinedStoragePools, [:virConnectPtr], :int
133
+ attach_function :virConnectListDefinedStoragePools, [:virConnectPtr, :pointer, :int], :int
134
+ attach_function :virConnectFindStoragePoolSources, [:virConnectPtr, :string, :string, :int], :string
135
+ attach_function :virStoragePoolLookupByName, [:virConnectPtr, :string], :virStoragePoolPtr
136
+ attach_function :virStoragePoolLookupByUUID, [:virConnectPtr, :string], :virStoragePoolPtr
137
+ attach_function :virStoragePoolLookupByUUIDString, [:virConnectPtr, :string], :virStoragePoolPtr
138
+ attach_function :virStoragePoolLookupByVolume, [:virStorageVolPtr], :virStoragePoolPtr
139
+ attach_function :virStoragePoolCreateXML, [:virConnectPtr, :string, :uint], :virStoragePoolPtr
140
+ attach_function :virStoragePoolDefineXML, [:virConnectPtr, :string, :uint], :virStoragePoolPtr
141
+ attach_function :virStoragePoolBuild, [:virStoragePoolPtr, :uint], :int
142
+ attach_function :virStoragePoolUndefine, [:virStoragePoolPtr], :int
143
+ attach_function :virStoragePoolCreate, [:virStoragePoolPtr, :uint], :int
144
+ attach_function :virStoragePoolDestroy, [:virStoragePoolPtr], :int
145
+ attach_function :virStoragePoolDelete, [:virStoragePoolPtr, :virStoragePoolDeleteFlags], :int
146
+ attach_function :virStoragePoolRef, [:virStoragePoolPtr], :int
147
+ attach_function :virStoragePoolFree, [:virStoragePoolPtr], :int
148
+ attach_function :virStoragePoolRefresh, [:virStoragePoolPtr, :uint], :int
149
+ attach_function :virStoragePoolGetName, [:virStoragePoolPtr], :string
150
+ attach_function :virStoragePoolGetUUID, [:virStoragePoolPtr, :string], :int
151
+ attach_function :virStoragePoolGetUUIDString, [:virStoragePoolPtr, :pointer], :int
152
+ attach_function :virStoragePoolGetInfo, [:virStoragePoolPtr, :virStoragePoolInfoPtr], :int
153
+ attach_function :virStoragePoolGetXMLDesc, [:virStoragePoolPtr, :uint], :string
154
+ attach_function :virStoragePoolGetAutostart, [:virStoragePoolPtr, :int_pointer], :int
155
+ attach_function :virStoragePoolSetAutostart, [:virStoragePoolPtr, :int], :int
156
+ attach_function :virStoragePoolNumOfVolumes, [:virStoragePoolPtr], :int
157
+ attach_function :virStoragePoolListVolumes, [:virStoragePoolPtr, :pointer, :int], :int
158
+ attach_function :virStorageVolGetConnect, [:virStorageVolPtr], :virConnectPtr
159
+ attach_function :virStorageVolLookupByName, [:virStoragePoolPtr, :string], :virStorageVolPtr
160
+ attach_function :virStorageVolLookupByKey, [:virConnectPtr, :string], :virStorageVolPtr
161
+ attach_function :virStorageVolLookupByPath, [:virConnectPtr, :string], :virStorageVolPtr
162
+ attach_function :virStorageVolGetName, [:virStorageVolPtr], :string
163
+ attach_function :virStorageVolGetKey, [:virStorageVolPtr], :string
164
+ attach_function :virStorageVolCreateXML, [:virStoragePoolPtr, :string, :uint], :virStorageVolPtr
165
+ attach_function :virStorageVolDelete, [:virStorageVolPtr, :uint], :int
166
+ attach_function :virStorageVolRef, [:virStorageVolPtr], :int
167
+ attach_function :virStorageVolFree, [:virStorageVolPtr], :int
168
+ attach_function :virStorageVolGetInfo, [:virStorageVolPtr, :virStorageVolInfoPtr], :int
169
+ attach_function :virStorageVolGetXMLDesc, [:virStorageVolPtr, :uint], :string
170
+ attach_function :virStorageVolGetPath, [:virStorageVolPtr], :string
171
+
172
+ # Deprecated
173
+ attach_function :virDomainCreateLinux, [:virConnectPtr, :string, :uint], :virDomainPtr
174
+
175
+ # Host device enumeration
176
+ attach_function :virNodeNumOfDevices, [:virConnectPtr, :string, :uint], :int
177
+ attach_function :virNodeListDevices, [:virConnectPtr, :string, :pointer, :int, :uint], :int
178
+ attach_function :virNodeDeviceLookupByName, [:virConnectPtr, :string], :virNodeDevicePtr
179
+ attach_function :virNodeDeviceGetName, [:virNodeDevicePtr], :string
180
+ attach_function :virNodeDeviceGetParent, [:virNodeDevicePtr], :string
181
+ attach_function :virNodeDeviceNumOfCaps, [:virNodeDevicePtr], :int
182
+ attach_function :virNodeDeviceListCaps, [:virNodeDevicePtr, :pointer, :int], :int
183
+ attach_function :virNodeDeviceGetXMLDesc, [:virNodeDevicePtr, :uint], :string
184
+ attach_function :virNodeDeviceRef, [:virNodeDevicePtr], :int
185
+ attach_function :virNodeDeviceFree, [:virNodeDevicePtr], :int
186
+
187
+ # Domain event notification
188
+ attach_function :virConnectDomainEventRegister, [:virConnectPtr, :virConnectDomainEventCallback, :void_pointer, :virFreeCallback], :int
189
+ attach_function :virConnectDomainEventDeregister, [:virConnectPtr, :virConnectDomainEventCallback], :int
190
+
191
+ # Events
192
+ attach_function :virEventRegisterImpl, [:virEventAddHandleFunc, :virEventUpdateHandleFunc, :virEventRemoveHandleFunc, :virEventAddTimeoutFunc, :virEventUpdateTimeoutFunc, :virEventRemoveTimeoutFunc], :void
193
+ end
194
+
195
+ libvirt_version "0.6.1" do
196
+ attach_function :virNodeGetSecurityModel, [:virConnectPtr, :virSecurityModelPtr], :int
197
+ attach_function :virDomainGetSecurityLabel, [:virDomainPtr, :virSecurityLabelPtr], :int
198
+ attach_function :virNodeDeviceDettach, [:virNodeDevicePtr], :int
199
+ attach_function :virNodeDeviceReAttach, [:virNodeDevicePtr], :int
200
+ attach_function :virNodeDeviceReset, [:virNodeDevicePtr], :int
201
+ end
202
+
203
+ libvirt_version "0.6.3" do
204
+ attach_function :virNodeDeviceCreateXML, [:virConnectPtr, :string, :uint], :virNodeDevicePtr
205
+ attach_function :virNodeDeviceDestroy, [:virNodeDevicePtr], :int
206
+ end
207
+
208
+ libvirt_version "0.6.4" do
209
+ attach_function :virConnectDomainXMLFromNative, [:virConnectPtr, :string, :string, :uint], :string
210
+ attach_function :virConnectDomainXMLToNative, [:virConnectPtr, :string, :string, :uint], :string
211
+
212
+ # Physical host interface configuration API
213
+ attach_function :virInterfaceGetConnect, [:virInterfacePtr], :virConnectPtr
214
+ attach_function :virConnectNumOfInterfaces, [:virConnectPtr], :int
215
+ attach_function :virConnectListInterfaces, [:virConnectPtr, :pointer, :int], :int # TODO: String pointer
216
+ attach_function :virInterfaceLookupByName, [:virConnectPtr, :string], :virInterfacePtr
217
+ attach_function :virInterfaceLookupByMACString, [:virConnectPtr, :string], :virInterfacePtr
218
+ attach_function :virInterfaceGetName, [:virInterfacePtr], :string
219
+ attach_function :virInterfaceGetMACString, [:virInterfacePtr], :string
220
+ attach_function :virInterfaceGetXMLDesc, [:virInterfacePtr, :uint], :string
221
+ attach_function :virInterfaceDefineXML, [:virConnectPtr, :string, :int], :virInterfacePtr
222
+ attach_function :virInterfaceUndefine, [:virInterfacePtr], :int
223
+ attach_function :virInterfaceCreate, [:virInterfacePtr, :int], :int
224
+ attach_function :virInterfaceDestroy, [:virInterfacePtr, :int], :int
225
+ attach_function :virInterfaceRef, [:virInterfacePtr], :int
226
+ attach_function :virInterfaceFree, [:virInterfacePtr], :int
227
+
228
+ attach_function :virStorageVolCreateXMLFrom, [:virStoragePoolPtr, :string, :virStorageVolPtr, :uint], :virStorageVolPtr
229
+ end
230
+
231
+ libvirt_version "0.7.0" do
232
+ attach_function :virConnectNumOfDefinedInterfaces, [:virConnectPtr], :int
233
+ attach_function :virConnectListDefinedInterfaces, [:virConnectPtr, :pointer, :int], :int
234
+ end
235
+
236
+ libvirt_version "0.7.1" do
237
+ # Secret manipulation API
238
+ attach_function :virSecretGetConnect, [:virSecretPtr], :virConnectPtr
239
+ attach_function :virConnectNumOfSecrets, [:virConnectPtr], :int
240
+ attach_function :virConnectListSecrets, [:virConnectPtr, :pointer, :int], :int
241
+ attach_function :virSecretLookupByUUID, [:virConnectPtr, :string], :virSecretPtr
242
+ attach_function :virSecretLookupByUUIDString, [:virConnectPtr, :string], :virSecretPtr
243
+ attach_function :virSecretLookupByUsage, [:virConnectPtr, :int, :string], :virSecretPtr
244
+ attach_function :virSecretDefineXML, [:virConnectPtr, :string, :uint], :virSecretPtr
245
+ attach_function :virSecretGetUUID, [:virSecretPtr, :pointer], :int
246
+ attach_function :virSecretGetUUIDString, [:virSecretPtr, :pointer], :int
247
+ attach_function :virSecretGetUsageType, [:virSecretPtr], :int
248
+ attach_function :virSecretGetUsageID, [:virSecretPtr], :string
249
+ attach_function :virSecretGetXMLDesc, [:virSecretPtr, :uint], :string
250
+ attach_function :virSecretSetValue, [:virSecretPtr, :string, :size_t, :uint], :int
251
+ attach_function :virSecretGetValue, [:virSecretPtr, :size_t, :uint], :string
252
+ attach_function :virSecretUndefine, [:virSecretPtr], :int
253
+ attach_function :virSecretRef, [:virSecretPtr], :int
254
+ attach_function :virSecretFree, [:virSecretPtr], :int
255
+ end
256
+
257
+ libvirt_version "0.7.2" do
258
+ attach_function :virDomainMigrateToURI, [:virDomainPtr, :string, :ulong, :string, :ulong], :int
259
+
260
+ # Stream API
261
+ attach_function :virStreamNew, [:virConnectPtr, :uint], :virStreamPtr
262
+ attach_function :virStreamRef, [:virStreamPtr], :int
263
+ attach_function :virStreamSend, [:virStreamPtr, :string, :size_t], :int
264
+ attach_function :virStreamRecv, [:virStreamPtr, :pointer, :size_t], :int
265
+ attach_function :virStreamSendAll, [:virStreamPtr, :virStreamSourceFunc, :void_pointer], :int
266
+ attach_function :virStreamRecvAll, [:virStreamPtr, :virStreamSinkFunc, :void_pointer], :int
267
+ attach_function :virStreamEventAddCallback, [:virStreamPtr, :int, :virStreamEventCallback, :void_pointer, :virFreeCallback], :int
268
+ attach_function :virStreamEventUpdateCallback, [:virStreamPtr, :int], :int
269
+ attach_function :virStreamEventRemoveCallback, [:virStreamPtr], :int
270
+ attach_function :virStreamFinish, [:virStreamPtr], :int
271
+ attach_function :virStreamAbort, [:virStreamPtr], :int
272
+ attach_function :virStreamFree, [:virStreamPtr], :int
273
+ end
274
+
275
+ libvirt_version "0.7.3" do
276
+ attach_function :virConnectGetLibVersion, [:virConnectPtr, :unsigned_long_pointer], :int
277
+
278
+ attach_function :virDomainIsActive, [:virDomainPtr], :int
279
+ attach_function :virDomainIsPersistent, [:virDomainPtr], :int
280
+ attach_function :virNetworkIsActive, [:virNetworkPtr], :int
281
+ attach_function :virNetworkIsPersistent, [:virNetworkPtr], :int
282
+ attach_function :virStoragePoolIsActive, [:virStoragePoolPtr], :int
283
+ attach_function :virStoragePoolIsPersistent, [:virStoragePoolPtr], :int
284
+ attach_function :virInterfaceIsActive, [:virInterfacePtr], :int
285
+ attach_function :virConnectIsEncrypted, [:virConnectPtr], :int
286
+ attach_function :virConnectIsSecure, [:virConnectPtr], :int
287
+ end
288
+
289
+ libvirt_version "0.7.5" do
290
+ attach_function :virDomainMemoryStats, [:virDomainPtr, :virDomainMemoryStatsPtr, :uint, :uint], :int
291
+ attach_function :virConnectCompareCPU, [:virConnectPtr, :string, :uint], :int
292
+ end
293
+
294
+ libvirt_version "0.7.7" do
295
+ attach_function :virDomainAttachDeviceFlags, [:virDomainPtr, :string, :uint], :int
296
+ attach_function :virDomainDetachDeviceFlags, [:virDomainPtr, :string, :uint], :int
297
+
298
+ attach_function :virConnectBaselineCPU, [:virConnectPtr, :pointer, :uint, :uint], :string
299
+
300
+ # Domain jobs
301
+ attach_function :virDomainGetJobInfo, [:virDomainPtr, :virDomainJobInfoPtr], :int
302
+ attach_function :virDomainAbortJob, [:virDomainPtr], :int
303
+ end
304
+
305
+ libvirt_version "0.8.0" do
306
+ attach_function :virDomainMigrateSetMaxDowntime, [:virDomainPtr, :ulong_long, :uint], :int
307
+
308
+ # Managed domain save
309
+ attach_function :virDomainManagedSave, [:virDomainPtr, :uint], :int
310
+ attach_function :virDomainHasManagedSaveImage, [:virDomainPtr, :uint], :int
311
+ attach_function :virDomainManagedSaveRemove, [:virDomainPtr, :uint], :int
312
+
313
+ attach_function :virDomainUpdateDeviceFlags, [:virDomainPtr, :string, :uint], :int
314
+
315
+ attach_function :virStorageVolWipe, [:virStorageVolPtr, :uint], :int
316
+
317
+ # Domain snapshots
318
+ attach_function :virDomainSnapshotCreateXML, [:virDomainPtr, :string, :uint], :virDomainSnapshotPtr
319
+ attach_function :virDomainSnapshotGetXMLDesc, [:virDomainSnapshotPtr, :uint], :string
320
+ attach_function :virDomainSnapshotNum, [:virDomainPtr, :uint], :int
321
+ attach_function :virDomainSnapshotListNames, [:virDomainPtr, :pointer, :int, :uint], :int
322
+ attach_function :virDomainSnapshotLookupByName, [:virDomainPtr, :string, :uint], :virDomainSnapshotPtr
323
+ attach_function :virDomainHasCurrentSnapshot, [:virDomainPtr, :uint], :int
324
+ attach_function :virDomainSnapshotCurrent, [:virDomainPtr, :uint], :virDomainSnapshotPtr
325
+ attach_function :virDomainRevertToSnapshot, [:virDomainSnapshotPtr, :uint], :int
326
+ attach_function :virDomainSnapshotDelete, [:virDomainSnapshotPtr, :uint], :int
327
+ attach_function :virDomainSnapshotFree, [:virDomainSnapshotPtr], :int
328
+
329
+ attach_function :virConnectDomainEventRegisterAny, [:virConnectPtr, :virDomainPtr, :int, :virConnectDomainEventGenericCallback, :void_pointer, :virFreeCallback], :int
330
+ attach_function :virConnectDomainEventDeregisterAny, [:virConnectPtr, :int], :int
331
+
332
+ # Network filters API
333
+ attach_function :virConnectNumOfNWFilters, [:virConnectPtr], :int
334
+ attach_function :virConnectListNWFilters, [:virConnectPtr, :pointer, :int], :int
335
+ attach_function :virNWFilterLookupByName, [:virConnectPtr, :string], :virNWFilterPtr
336
+ attach_function :virNWFilterLookupByUUID, [:virConnectPtr, :string], :virNWFilterPtr
337
+ attach_function :virNWFilterLookupByUUIDString, [:virConnectPtr, :string], :virNWFilterPtr
338
+ attach_function :virNWFilterDefineXML, [:virConnectPtr, :string], :virNWFilterPtr
339
+ attach_function :virNWFilterUndefine, [:virNWFilterPtr], :int
340
+ attach_function :virNWFilterRef, [:virNWFilterPtr], :int
341
+ attach_function :virNWFilterFree, [:virNWFilterPtr], :int
342
+ attach_function :virNWFilterGetName, [:virNWFilterPtr], :string
343
+ attach_function :virNWFilterGetUUID, [:virNWFilterPtr, :pointer], :int
344
+ attach_function :virNWFilterGetUUIDString, [:virNWFilterPtr, :pointer], :int
345
+ attach_function :virNWFilterGetXMLDesc, [:virNWFilterPtr, :int], :string
346
+ end
347
+
348
+ libvirt_version "0.8.1" do
349
+ attach_function :virDomainGetBlockInfo, [:virDomainPtr, :string, :virDomainBlockInfoPtr, :uint], :int
350
+ end
351
+
352
+ libvirt_version "0.8.2" do
353
+ attach_function :virDomainCreateWithFlags, [:virDomainPtr, :uint], :int
354
+ end
355
+
356
+ # This is currently in git, not released
357
+ libvirt_version "0.8.5" do
358
+ # Set memory tunables for the domain
359
+ attach_function :virDomainSetMemoryParameters, [:virDomainPtr, :virMemoryParameterPtr, :int, :uint], :int
360
+ attach_function :virDomainGetMemoryParameters, [:virDomainPtr, :virMemoryParameterPtr, :int_pointer, :uint_pointer], :int
361
+ end
362
+ end
363
+ end
@@ -0,0 +1,27 @@
1
+ module FFI
2
+ module Libvirt
3
+ # virNodeInfo structure, used to represent a node which libvirt
4
+ # is running on.
5
+ #
6
+ # struct _virNodeInfo {
7
+ # char model[32]; /* string indicating the CPU model */
8
+ # unsigned long memory;/* memory size in kilobytes */
9
+ # unsigned int cpus; /* the number of active CPUs */
10
+ # unsigned int mhz; /* expected CPU frequency */
11
+ # unsigned int nodes; /* the number of NUMA cell, 1 for uniform mem access */
12
+ # unsigned int sockets;/* number of CPU socket per node */
13
+ # unsigned int cores; /* number of core per socket */
14
+ # unsigned int threads;/* number of threads per core */
15
+ # };
16
+ class NodeInfo < ::FFI::Struct
17
+ layout :model, :char, 32,
18
+ :memory, :ulong,
19
+ :cpus, :uint,
20
+ :mhz, :uint,
21
+ :nodes, :uint,
22
+ :sockets, :uint,
23
+ :cores, :uint,
24
+ :threads, :uint
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,11 @@
1
+ module FFI
2
+ module Libvirt
3
+ # virStoragePoolInfo structure
4
+ class StoragePoolInfo < ::FFI::Struct
5
+ layout :state, :virStoragePoolState,
6
+ :capacity, :ulong_long,
7
+ :allocation, :ulong_long,
8
+ :available, :ulong_long
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,14 @@
1
+ module FFI
2
+ module Libvirt
3
+ # struct _virStorageVolInfo {
4
+ # int type; /* virStorageVolType flags */
5
+ # unsigned long long capacity; /* Logical size bytes */
6
+ # unsigned long long allocation; /* Current allocation bytes */
7
+ #};
8
+ class StorageVolumeInfo < ::FFI::Struct
9
+ layout :type, :virStorageVolType,
10
+ :capacity, :ulong_long,
11
+ :allocation, :ulong_long
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,61 @@
1
+ module FFI
2
+ module Libvirt
3
+ # Typedefs for various pointers to libvirt structures
4
+ typedef :pointer, :virConnectPtr
5
+ typedef :pointer, :virConnectAuthPtr
6
+ typedef :pointer, :virDomainPtr
7
+ typedef :pointer, :virDomainBlockInfoPtr
8
+ typedef :pointer, :virDomainBlockStatsPtr
9
+ typedef :pointer, :virDomainInfoPtr
10
+ typedef :pointer, :virDomainInterfaceStatsPtr
11
+ typedef :pointer, :virDomainJobInfoPtr
12
+ typedef :pointer, :virDomainMemoryStatsPtr
13
+ typedef :pointer, :virDomainSnapshotPtr
14
+ typedef :pointer, :virInterfacePtr
15
+ typedef :pointer, :virMemoryParameterPtr
16
+ typedef :pointer, :virNetworkPtr
17
+ typedef :pointer, :virNodeDevicePtr
18
+ typedef :pointer, :virNodeInfoPtr
19
+ typedef :pointer, :virNWFilterPtr
20
+ typedef :pointer, :virSchedParameterPtr
21
+ typedef :pointer, :virSecretPtr
22
+ typedef :pointer, :virSecurityModelPtr
23
+ typedef :pointer, :virSecurityLabelPtr
24
+ typedef :pointer, :virStoragePoolPtr
25
+ typedef :pointer, :virStoragePoolInfoPtr
26
+ typedef :pointer, :virStorageVolPtr
27
+ typedef :pointer, :virStorageVolInfoPtr
28
+ typedef :pointer, :virStreamPtr
29
+ typedef :pointer, :virVcpuInfoPtr
30
+
31
+ # Pointers for C primitives
32
+ typedef :pointer, :uchar_pointer
33
+ typedef :pointer, :int_pointer
34
+ typedef :pointer, :uint_pointer
35
+ typedef :pointer, :unsigned_long_pointer
36
+ typedef :pointer, :ulong_long_pointer
37
+ typedef :pointer, :void_pointer
38
+
39
+ # Callbacks
40
+ callback :virConnectDomainEventCallback, [:virConnectPtr, :virDomainPtr, :int, :int, :void_pointer], :int
41
+ callback :virFreeCallback, [:void_pointer], :void
42
+ callback :virEventHandleCallback, [:int, :int, :int, :void_pointer], :void
43
+ callback :virEventAddHandleFunc, [:int, :int, :virEventHandleCallback, :void_pointer, :virFreeCallback], :int
44
+ callback :virEventUpdateHandleFunc, [:int, :int], :void
45
+ callback :virEventRemoveHandleFunc, [:int], :int
46
+ callback :virEventTimeoutCallback, [:int, :void_pointer], :void
47
+ callback :virEventAddTimeoutFunc, [:int, :virEventTimeoutCallback, :void_pointer, :virFreeCallback], :int
48
+ callback :virEventUpdateTimeoutFunc, [:int, :int], :void
49
+ callback :virEventRemoveTimeoutFunc, [:int], :int
50
+ callback :virStreamSourceFunc, [:virStreamPtr, :string, :size_t, :void_pointer], :int
51
+ callback :virStreamSinkFunc, [:virStreamPtr, :string, :size_t, :void_pointer], :int
52
+ callback :virStreamEventCallback, [:virStreamPtr, :int, :void_pointer], :void
53
+ callback :virConnectDomainEventGenericCallback, [:virConnectPtr, :virDomainPtr, :void_pointer], :void
54
+
55
+ # Enums
56
+ enum :virDomainState, [:nostate, :running, :blocked, :paused, :shutdown, :shutoff, :crashed]
57
+ enum :virStoragePoolDeleteFlags, [:normal, :zeroed]
58
+ enum :virStoragePoolState, [:inactive, :building, :running, :degraded, :inaccessible]
59
+ enum :virStorageVolType, [:file, :block]
60
+ end
61
+ end
@@ -0,0 +1,19 @@
1
+ module FFI
2
+ module Libvirt
3
+ # Utility methods which may be helpful when dealing with the FFI layer.
4
+ module Util
5
+ # Parses the raw version integer returned by various libvirt methods
6
+ # into proper `[major, minor, patch]` format.
7
+ #
8
+ # @return [Array]
9
+ def self.parse_version_number(number)
10
+ # Format is MAJOR * 1,000,000 + MINOR * 1,000 + PATCH
11
+ major = number / 1_000_000
12
+ number %= 1_000_000
13
+ minor = number / 1_000
14
+ number %= 1000
15
+ [major, minor, number]
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,46 @@
1
+ module FFI
2
+ module Libvirt
3
+ attach_function :virGetVersion, [:unsigned_long_pointer, :string, :unsigned_long_pointer], :int
4
+
5
+ class << self
6
+ # Returns the version of libvirt client on this machine. The
7
+ # version is returned as an array of `[major, minor, patch]`.
8
+ #
9
+ # @return [Array]
10
+ def version
11
+ Util.parse_version_number(raw_version)
12
+ end
13
+
14
+ protected
15
+
16
+ # Returns the version of libvirt as the raw integer version, such as
17
+ # 8004 (which is actually "0.8.4"). This is used internally to do fast
18
+ # version comparisons.
19
+ #
20
+ # @return [Integer]
21
+ def raw_version
22
+ out = FFI::MemoryPointer.new(:ulong)
23
+ FFI::Libvirt.virGetVersion(out, nil, nil)
24
+ out.get_ulong(0)
25
+ end
26
+
27
+ # Allows the scoping of certain FFI attaches to specific versions of
28
+ # libvirt. This allows the FFI library to work from early versions of
29
+ # libvirt through to later versions.
30
+ def libvirt_version(string_version, &block)
31
+ # Convert the given version to the proper numerical representation so
32
+ # it is more easily compared.
33
+ multiplier = 1_000_000
34
+ numeric_version = string_version.split(".").inject(0) do |acc, part|
35
+ acc += part.to_i * multiplier
36
+ multiplier /= 1000
37
+ acc
38
+ end
39
+
40
+ # If the version we have is newer, then eval the block, since we
41
+ # support it.
42
+ instance_eval(&block) if raw_version >= numeric_version
43
+ end
44
+ end
45
+ end
46
+ end