ruby-libvirt 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/NEWS +10 -0
- data/README +188 -21
- data/Rakefile +11 -7
- data/ext/libvirt/_libvirt.c +252 -234
- data/ext/libvirt/common.c +346 -71
- data/ext/libvirt/common.h +171 -111
- data/ext/libvirt/connect.c +1851 -798
- data/ext/libvirt/connect.h +6 -5
- data/ext/libvirt/domain.c +3903 -1060
- data/ext/libvirt/domain.h +5 -3
- data/ext/libvirt/extconf.rb +275 -41
- data/ext/libvirt/interface.c +60 -41
- data/ext/libvirt/interface.h +3 -1
- data/ext/libvirt/network.c +291 -72
- data/ext/libvirt/network.h +3 -2
- data/ext/libvirt/nodedevice.c +138 -59
- data/ext/libvirt/nodedevice.h +3 -1
- data/ext/libvirt/nwfilter.c +39 -34
- data/ext/libvirt/nwfilter.h +3 -1
- data/ext/libvirt/secret.c +122 -64
- data/ext/libvirt/secret.h +3 -1
- data/ext/libvirt/storage.c +451 -233
- data/ext/libvirt/storage.h +1 -1
- data/ext/libvirt/stream.c +120 -122
- data/ext/libvirt/stream.h +4 -2
- data/tests/test_conn.rb +214 -67
- data/tests/test_domain.rb +553 -209
- data/tests/test_interface.rb +4 -10
- data/tests/test_network.rb +21 -12
- data/tests/test_nodedevice.rb +11 -1
- data/tests/test_nwfilter.rb +4 -0
- data/tests/test_open.rb +59 -6
- data/tests/test_secret.rb +25 -0
- data/tests/test_storage.rb +132 -28
- data/tests/test_stream.rb +171 -0
- data/tests/test_utils.rb +86 -15
- metadata +43 -66
@@ -0,0 +1,171 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
# Test the stream methods the bindings support
|
4
|
+
|
5
|
+
$: << File.dirname(__FILE__)
|
6
|
+
|
7
|
+
require 'libvirt'
|
8
|
+
require 'test_utils.rb'
|
9
|
+
|
10
|
+
set_test_object("stream")
|
11
|
+
|
12
|
+
conn = Libvirt::open("qemu:///system")
|
13
|
+
|
14
|
+
# TESTGROUP: stream.send
|
15
|
+
st = conn.stream
|
16
|
+
|
17
|
+
expect_too_many_args(st, "send", 1, 2)
|
18
|
+
expect_too_few_args(st, "send")
|
19
|
+
expect_invalid_arg_type(st, "send", 1)
|
20
|
+
expect_invalid_arg_type(st, "send", nil)
|
21
|
+
expect_invalid_arg_type(st, "send", [])
|
22
|
+
expect_invalid_arg_type(st, "send", {})
|
23
|
+
|
24
|
+
# FIXME: we need to setup a proper stream for this to work
|
25
|
+
#expect_success(st, "buffer arg", "send", buffer)
|
26
|
+
|
27
|
+
st.free
|
28
|
+
|
29
|
+
# TESTGROUP: stream.recv
|
30
|
+
st = conn.stream
|
31
|
+
|
32
|
+
expect_too_many_args(st, "recv", 1, 2)
|
33
|
+
expect_too_few_args(st, "recv")
|
34
|
+
expect_invalid_arg_type(st, "recv", nil)
|
35
|
+
expect_invalid_arg_type(st, "recv", 'foo')
|
36
|
+
expect_invalid_arg_type(st, "recv", [])
|
37
|
+
expect_invalid_arg_type(st, "recv", {})
|
38
|
+
|
39
|
+
# FIXME: we need to setup a proper stream for this to work
|
40
|
+
#expect_success(st, "bytes arg", "recv", 12)
|
41
|
+
|
42
|
+
st.free
|
43
|
+
|
44
|
+
# TESTGROUP: stream.sendall
|
45
|
+
st = conn.stream
|
46
|
+
|
47
|
+
# equivalent to expect_too_many_args
|
48
|
+
begin
|
49
|
+
st.sendall(1, 2) {|x,y| x = y}
|
50
|
+
rescue NoMethodError
|
51
|
+
puts_skipped "#{$test_object}.sendall does not exist"
|
52
|
+
rescue ArgumentError => e
|
53
|
+
puts_ok "#{$test_object}.sendall too many args threw #{ArgumentError.to_s}"
|
54
|
+
rescue => e
|
55
|
+
puts_fail "#{$test_object}.sendall too many args expected to throw #{ArgumentError.to_s}, but instead threw #{e.class.to_s}: #{e.to_s}"
|
56
|
+
else
|
57
|
+
puts_fail "#{$test_object}.sendall too many args expected to throw #{ArgumentError.to_s}, but threw nothing"
|
58
|
+
end
|
59
|
+
|
60
|
+
expect_fail(st, RuntimeError, "no block given", "sendall")
|
61
|
+
|
62
|
+
# FIXME: we need to setup a proper stream for this to work
|
63
|
+
#st.sendall {|opaque,nbytes| return opaque}
|
64
|
+
|
65
|
+
st.free
|
66
|
+
|
67
|
+
# TESTGROUP: stream.recvall
|
68
|
+
st = conn.stream
|
69
|
+
|
70
|
+
# equivalent to expect_too_many_args
|
71
|
+
begin
|
72
|
+
st.recvall(1, 2) {|x,y| x = y}
|
73
|
+
rescue NoMethodError
|
74
|
+
puts_skipped "#{$test_object}.recvall does not exist"
|
75
|
+
rescue ArgumentError => e
|
76
|
+
puts_ok "#{$test_object}.recvall too many args threw #{ArgumentError.to_s}"
|
77
|
+
rescue => e
|
78
|
+
puts_fail "#{$test_object}.recvall too many args expected to throw #{ArgumentError.to_s}, but instead threw #{e.class.to_s}: #{e.to_s}"
|
79
|
+
else
|
80
|
+
puts_fail "#{$test_object}.recvall too many args expected to throw #{ArgumentError.to_s}, but threw nothing"
|
81
|
+
end
|
82
|
+
|
83
|
+
expect_fail(st, RuntimeError, "no block given", "recvall")
|
84
|
+
|
85
|
+
# FIXME: we need to setup a proper stream for this to work
|
86
|
+
#st.recvall {|data,opaque| return opaque}
|
87
|
+
|
88
|
+
st.free
|
89
|
+
|
90
|
+
# TESTGROUP: stream.event_add_callback
|
91
|
+
st_event_callback_proc = lambda {|st,events,opaque|
|
92
|
+
}
|
93
|
+
|
94
|
+
st = conn.stream
|
95
|
+
|
96
|
+
expect_too_many_args(st, "event_add_callback", 1, 2, 3, 4)
|
97
|
+
expect_too_few_args(st, "event_add_callback")
|
98
|
+
expect_too_few_args(st, "event_add_callback", 1)
|
99
|
+
expect_invalid_arg_type(st, "event_add_callback", nil, st_event_callback_proc)
|
100
|
+
expect_invalid_arg_type(st, "event_add_callback", 'foo', st_event_callback_proc)
|
101
|
+
expect_invalid_arg_type(st, "event_add_callback", [], st_event_callback_proc)
|
102
|
+
expect_invalid_arg_type(st, "event_add_callback", {}, st_event_callback_proc)
|
103
|
+
expect_invalid_arg_type(st, "event_add_callback", 1, nil)
|
104
|
+
expect_invalid_arg_type(st, "event_add_callback", 1, 'foo')
|
105
|
+
expect_invalid_arg_type(st, "event_add_callback", 1, 1)
|
106
|
+
expect_invalid_arg_type(st, "event_add_callback", 1, [])
|
107
|
+
expect_invalid_arg_type(st, "event_add_callback", 1, {})
|
108
|
+
|
109
|
+
# FIXME: I get "this function is not support by the connection driver"
|
110
|
+
#expect_success(st, "events and callback arg", "event_add_callback", Libvirt::Stream::EVENT_READABLE, st_event_callback_proc)
|
111
|
+
#st.event_remove_callback
|
112
|
+
|
113
|
+
st.free
|
114
|
+
|
115
|
+
# TESTGROUP: stream.event_update_callback
|
116
|
+
st = conn.stream
|
117
|
+
|
118
|
+
expect_too_many_args(st, "event_update_callback", 1, 2)
|
119
|
+
expect_too_few_args(st, "event_update_callback")
|
120
|
+
expect_invalid_arg_type(st, "event_update_callback", nil)
|
121
|
+
expect_invalid_arg_type(st, "event_update_callback", 'foo')
|
122
|
+
expect_invalid_arg_type(st, "event_update_callback", [])
|
123
|
+
expect_invalid_arg_type(st, "event_update_callback", {})
|
124
|
+
|
125
|
+
# FIXME: we would need to get st.event_add_callback working to get this working
|
126
|
+
#expect_success(st, "events arg", "event_update_callback", Libvirt::Stream::EVENT_WRITABLE)
|
127
|
+
|
128
|
+
st.free
|
129
|
+
|
130
|
+
# TESTGROUP: stream.remove_callback
|
131
|
+
st = conn.stream
|
132
|
+
|
133
|
+
expect_too_many_args(st, "event_remove_callback", 1)
|
134
|
+
|
135
|
+
# FIXME: we would need to get st.event_add_callback working to get this working
|
136
|
+
#expect_success(st, "no arg", "event_remove_callback")
|
137
|
+
|
138
|
+
st.free
|
139
|
+
|
140
|
+
# TESTGROUP: stream.finish
|
141
|
+
st = conn.stream
|
142
|
+
|
143
|
+
expect_too_many_args(st, "finish", 1)
|
144
|
+
|
145
|
+
# FIXME: I get "this function is not support by the connection driver"
|
146
|
+
#expect_success(st, "no arg", "finish")
|
147
|
+
|
148
|
+
st.free
|
149
|
+
|
150
|
+
# TESTGROUP: stream.abort
|
151
|
+
st = conn.stream
|
152
|
+
|
153
|
+
expect_too_many_args(st, "abort", 1)
|
154
|
+
|
155
|
+
# FIXME: I get "this function is not support by the connection driver"
|
156
|
+
#expect_success(st, "no arg", "abort")
|
157
|
+
|
158
|
+
st.free
|
159
|
+
|
160
|
+
# TESTGROUP: stream.abort
|
161
|
+
st = conn.stream
|
162
|
+
|
163
|
+
expect_too_many_args(st, "free", 1)
|
164
|
+
|
165
|
+
expect_success(st, "no arg", "free")
|
166
|
+
|
167
|
+
# END TESTS
|
168
|
+
|
169
|
+
conn.close
|
170
|
+
|
171
|
+
finish_tests
|
data/tests/test_utils.rb
CHANGED
@@ -2,12 +2,15 @@ $FAIL = 0
|
|
2
2
|
$SUCCESS = 0
|
3
3
|
$SKIPPED = 0
|
4
4
|
|
5
|
-
$
|
5
|
+
$GUEST_BASE = '/var/lib/libvirt/images/ruby-libvirt-tester'
|
6
|
+
$GUEST_DISK = $GUEST_BASE + '.qcow2'
|
7
|
+
$GUEST_SAVE = $GUEST_BASE + '.save'
|
6
8
|
$GUEST_UUID = "93a5c045-6457-2c09-e56f-927cdf34e17a"
|
7
9
|
|
8
10
|
# XML data for later tests
|
9
11
|
$new_dom_xml = <<EOF
|
10
12
|
<domain type='kvm'>
|
13
|
+
<description>Ruby Libvirt Tester</description>
|
11
14
|
<name>ruby-libvirt-tester</name>
|
12
15
|
<uuid>#{$GUEST_UUID}</uuid>
|
13
16
|
<memory>1048576</memory>
|
@@ -56,11 +59,14 @@ EOF
|
|
56
59
|
# qemu command-line that roughly corresponds to the above XML
|
57
60
|
$qemu_cmd_line = "/usr/bin/qemu-kvm -S -M pc-0.13 -enable-kvm -m 1024 -smp 1,sockets=1,cores=1,threads=1 -name ruby-libvirt-tester -uuid #{$GUEST_UUID} -nodefconfig -nodefaults -chardev socket,id=monitor,path=/var/lib/libvirt/qemu/ruby-libvirt-tester.monitor,server,nowait -mon chardev=monitor,mode=readline -rtc base=utc -boot c -chardev pty,id=serial0 -device isa-serial,chardev=serial0 -usb -vnc 127.0.0.1:0 -k en-us -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5"
|
58
61
|
|
62
|
+
$NEW_INTERFACE_MAC = 'aa:bb:cc:dd:ee:ff'
|
59
63
|
$new_interface_xml = <<EOF
|
60
|
-
<interface type="
|
64
|
+
<interface type="ethernet" name="ruby-libvirt-tester">
|
61
65
|
<start mode="onboot"/>
|
62
|
-
<
|
63
|
-
|
66
|
+
<mac address="#{$NEW_INTERFACE_MAC}"/>
|
67
|
+
<protocol family='ipv4'>
|
68
|
+
<dhcp peerdns='yes'/>
|
69
|
+
</protocol>
|
64
70
|
</interface>
|
65
71
|
EOF
|
66
72
|
|
@@ -79,6 +85,10 @@ $new_net_xml = <<EOF
|
|
79
85
|
</network>
|
80
86
|
EOF
|
81
87
|
|
88
|
+
$new_network_dhcp_ip = <<EOF
|
89
|
+
<host mac='00:11:22:33:44:55' ip='192.168.134.5'/>
|
90
|
+
EOF
|
91
|
+
|
82
92
|
$NWFILTER_UUID = "bd339530-134c-6d07-441a-17fb90dad807"
|
83
93
|
$new_nwfilter_xml = <<EOF
|
84
94
|
<filter name='ruby-libvirt-tester' chain='ipv4'>
|
@@ -115,36 +125,41 @@ $new_storage_pool_xml = <<EOF
|
|
115
125
|
</pool>
|
116
126
|
EOF
|
117
127
|
|
128
|
+
$test_object = "unknown"
|
129
|
+
|
130
|
+
def set_test_object(obj)
|
131
|
+
$test_object = obj
|
132
|
+
end
|
133
|
+
|
118
134
|
def expect_success(object, msg, func, *args)
|
119
135
|
begin
|
120
|
-
x = object.
|
136
|
+
x = object.__send__(func, *args)
|
121
137
|
if block_given?
|
122
138
|
res = yield x
|
123
139
|
if not res
|
124
|
-
|
125
|
-
raise "Failed"
|
140
|
+
raise "block failed"
|
126
141
|
end
|
127
142
|
end
|
128
|
-
puts_ok "#{func} #{msg} succeeded"
|
143
|
+
puts_ok "#{$test_object}.#{func} #{msg} succeeded"
|
129
144
|
x
|
130
145
|
rescue NoMethodError
|
131
|
-
puts_skipped "#{func} does not exist"
|
146
|
+
puts_skipped "#{$test_object}.#{func} does not exist"
|
132
147
|
rescue => e
|
133
|
-
puts_fail "#{func} #{msg} expected to succeed, threw #{e.class.to_s}: #{e.to_s}"
|
148
|
+
puts_fail "#{$test_object}.#{func} #{msg} expected to succeed, threw #{e.class.to_s}: #{e.to_s}"
|
134
149
|
end
|
135
150
|
end
|
136
151
|
|
137
152
|
def expect_fail(object, errtype, errmsg, func, *args)
|
138
153
|
begin
|
139
|
-
object.
|
154
|
+
object.__send__(func, *args)
|
140
155
|
rescue NoMethodError
|
141
|
-
puts_skipped "#{func} does not exist"
|
156
|
+
puts_skipped "#{$test_object}.#{func} does not exist"
|
142
157
|
rescue errtype => e
|
143
|
-
puts_ok "#{func} #{errmsg} threw #{errtype.to_s}"
|
158
|
+
puts_ok "#{$test_object}.#{func} #{errmsg} threw #{errtype.to_s}"
|
144
159
|
rescue => e
|
145
|
-
puts_fail "#{func} #{errmsg} expected to throw #{errtype.to_s}, but instead threw #{e.class.to_s}: #{e.to_s}"
|
160
|
+
puts_fail "#{$test_object}.#{func} #{errmsg} expected to throw #{errtype.to_s}, but instead threw #{e.class.to_s}: #{e.to_s}"
|
146
161
|
else
|
147
|
-
puts_fail "#{func} #{errmsg} expected to throw #{errtype.to_s}, but threw nothing"
|
162
|
+
puts_fail "#{$test_object}.#{func} #{errmsg} expected to throw #{errtype.to_s}, but threw nothing"
|
148
163
|
end
|
149
164
|
end
|
150
165
|
|
@@ -178,3 +193,59 @@ end
|
|
178
193
|
def finish_tests
|
179
194
|
puts "Successfully finished #{$SUCCESS} tests, failed #{$FAIL} tests, skipped #{$SKIPPED} tests"
|
180
195
|
end
|
196
|
+
|
197
|
+
def find_valid_iface(conn)
|
198
|
+
conn.list_interfaces.each do |ifname|
|
199
|
+
iface = conn.lookup_interface_by_name(ifname)
|
200
|
+
if iface.mac == "00:00:00:00:00:00"
|
201
|
+
next
|
202
|
+
end
|
203
|
+
return iface
|
204
|
+
end
|
205
|
+
return nil
|
206
|
+
end
|
207
|
+
|
208
|
+
def cleanup_test_domain(conn)
|
209
|
+
# cleanup from previous runs
|
210
|
+
begin
|
211
|
+
olddom = conn.lookup_domain_by_name("ruby-libvirt-tester")
|
212
|
+
rescue
|
213
|
+
# in case we didn't find it, don't do anything
|
214
|
+
end
|
215
|
+
|
216
|
+
begin
|
217
|
+
olddom.destroy
|
218
|
+
rescue
|
219
|
+
# in case we didn't destroy it, don't do anything
|
220
|
+
end
|
221
|
+
|
222
|
+
begin
|
223
|
+
olddom.undefine(Libvirt::Domain::UNDEFINE_SNAPSHOTS_METADATA)
|
224
|
+
rescue
|
225
|
+
# in case we didn't undefine it, don't do anything
|
226
|
+
end
|
227
|
+
|
228
|
+
`rm -f #{$GUEST_DISK}`
|
229
|
+
`rm -f #{$GUEST_SAVE}`
|
230
|
+
end
|
231
|
+
|
232
|
+
def cleanup_test_network(conn)
|
233
|
+
# initial cleanup for previous run
|
234
|
+
begin
|
235
|
+
oldnet = conn.lookup_network_by_name("ruby-libvirt-tester")
|
236
|
+
rescue
|
237
|
+
# in case we didn't find it, don't do anything
|
238
|
+
end
|
239
|
+
|
240
|
+
begin
|
241
|
+
oldnet.destroy
|
242
|
+
rescue
|
243
|
+
# in case we didn't find it, don't do anything
|
244
|
+
end
|
245
|
+
|
246
|
+
begin
|
247
|
+
oldnet.undefine
|
248
|
+
rescue
|
249
|
+
# in case we didn't find it, don't do anything
|
250
|
+
end
|
251
|
+
end
|
metadata
CHANGED
@@ -1,106 +1,83 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-libvirt
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease: false
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 4
|
9
|
-
- 0
|
10
|
-
version: 0.4.0
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.0
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- David Lutterkort, Chris Lalancette
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
date: 2011-07-29 00:00:00 -04:00
|
19
|
-
default_executable:
|
11
|
+
date: 2013-12-10 00:00:00.000000000 Z
|
20
12
|
dependencies: []
|
21
|
-
|
22
13
|
description: Ruby bindings for libvirt.
|
23
14
|
email: libvir-list@redhat.com
|
24
15
|
executables: []
|
25
|
-
|
26
|
-
extensions:
|
16
|
+
extensions:
|
27
17
|
- ext/libvirt/extconf.rb
|
28
18
|
extra_rdoc_files: []
|
29
|
-
|
30
|
-
files:
|
19
|
+
files:
|
31
20
|
- Rakefile
|
32
21
|
- COPYING
|
33
22
|
- README
|
34
23
|
- NEWS
|
35
24
|
- README.rdoc
|
36
25
|
- lib/libvirt.rb
|
37
|
-
- ext/libvirt/domain.h
|
38
|
-
- ext/libvirt/domain.c
|
39
|
-
- ext/libvirt/network.h
|
40
|
-
- ext/libvirt/secret.c
|
41
|
-
- ext/libvirt/secret.h
|
42
|
-
- ext/libvirt/stream.h
|
43
|
-
- ext/libvirt/storage.h
|
44
|
-
- ext/libvirt/storage.c
|
45
26
|
- ext/libvirt/_libvirt.c
|
46
|
-
- ext/libvirt/
|
47
|
-
- ext/libvirt/network.c
|
48
|
-
- ext/libvirt/nwfilter.c
|
49
|
-
- ext/libvirt/connect.h
|
27
|
+
- ext/libvirt/common.c
|
50
28
|
- ext/libvirt/common.h
|
51
29
|
- ext/libvirt/connect.c
|
52
|
-
- ext/libvirt/
|
30
|
+
- ext/libvirt/connect.h
|
31
|
+
- ext/libvirt/domain.c
|
32
|
+
- ext/libvirt/domain.h
|
53
33
|
- ext/libvirt/interface.c
|
54
|
-
- ext/libvirt/
|
34
|
+
- ext/libvirt/interface.h
|
35
|
+
- ext/libvirt/network.c
|
36
|
+
- ext/libvirt/network.h
|
55
37
|
- ext/libvirt/nodedevice.c
|
56
|
-
- ext/libvirt/
|
38
|
+
- ext/libvirt/nodedevice.h
|
39
|
+
- ext/libvirt/nwfilter.c
|
57
40
|
- ext/libvirt/nwfilter.h
|
41
|
+
- ext/libvirt/secret.c
|
42
|
+
- ext/libvirt/secret.h
|
43
|
+
- ext/libvirt/storage.c
|
44
|
+
- ext/libvirt/storage.h
|
45
|
+
- ext/libvirt/stream.c
|
46
|
+
- ext/libvirt/stream.h
|
58
47
|
- ext/libvirt/extconf.rb
|
48
|
+
- tests/test_conn.rb
|
49
|
+
- tests/test_domain.rb
|
59
50
|
- tests/test_interface.rb
|
60
51
|
- tests/test_network.rb
|
52
|
+
- tests/test_nodedevice.rb
|
61
53
|
- tests/test_nwfilter.rb
|
62
|
-
- tests/test_utils.rb
|
63
|
-
- tests/test_domain.rb
|
64
|
-
- tests/test_storage.rb
|
65
54
|
- tests/test_open.rb
|
66
55
|
- tests/test_secret.rb
|
67
|
-
- tests/
|
68
|
-
- tests/
|
69
|
-
|
56
|
+
- tests/test_storage.rb
|
57
|
+
- tests/test_stream.rb
|
58
|
+
- tests/test_utils.rb
|
70
59
|
homepage: http://libvirt.org/ruby/
|
71
|
-
licenses:
|
72
|
-
|
60
|
+
licenses:
|
61
|
+
- LGPLv2
|
62
|
+
metadata: {}
|
73
63
|
post_install_message:
|
74
64
|
rdoc_options: []
|
75
|
-
|
76
|
-
require_paths:
|
65
|
+
require_paths:
|
77
66
|
- lib
|
78
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
hash: 53
|
84
|
-
segments:
|
85
|
-
- 1
|
86
|
-
- 8
|
87
|
-
- 1
|
67
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - '>='
|
70
|
+
- !ruby/object:Gem::Version
|
88
71
|
version: 1.8.1
|
89
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
hash: 3
|
95
|
-
segments:
|
96
|
-
- 0
|
97
|
-
version: "0"
|
72
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
98
77
|
requirements: []
|
99
|
-
|
100
78
|
rubyforge_project: None
|
101
|
-
rubygems_version:
|
79
|
+
rubygems_version: 2.0.14
|
102
80
|
signing_key:
|
103
|
-
specification_version:
|
81
|
+
specification_version: 4
|
104
82
|
summary: Ruby bindings for LIBVIRT
|
105
83
|
test_files: []
|
106
|
-
|