ruby-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.
@@ -0,0 +1,6 @@
1
+ #ifndef EXTCONF_H
2
+ #define EXTCONF_H
3
+ #define HAVE_TYPE_VIRNETWORKPTR 1
4
+ #define HAVE_TYPE_VIRSTORAGEPOOLPTR 1
5
+ #define HAVE_TYPE_VIRSTORAGEVOLPTR 1
6
+ #endif
@@ -0,0 +1,26 @@
1
+ require 'mkmf'
2
+
3
+ def have_libvirt_funcs(funcs)
4
+ funcs.each { |f| have_func(f, "libvirt/libvirt.h") }
5
+ end
6
+
7
+ def have_libvirt_types(types)
8
+ types.each { |t| have_type(t, "libvirt/libvirt.h") }
9
+ end
10
+
11
+ extension_name = '_libvirt'
12
+
13
+ dir_config(extension_name)
14
+
15
+ unless pkg_config("libvirt")
16
+ raise "libvirt not found"
17
+ end
18
+
19
+ libvirt_types = [ 'virNetworkPtr',
20
+ 'virStoragePoolPtr',
21
+ 'virStorageVolPtr' ]
22
+
23
+ have_libvirt_types(libvirt_types)
24
+
25
+ create_header
26
+ create_makefile(extension_name)
data/lib/libvirt.rb ADDED
@@ -0,0 +1,40 @@
1
+ #
2
+ # libvirt.rb: main module for the ruby-libvirt bindings
3
+ #
4
+ # Copyright (C) 2007 Red Hat, Inc.
5
+ #
6
+ # Distributed under the GNU Lesser General Public License v2.1 or later.
7
+ # See COPYING for details
8
+ #
9
+ # David Lutterkort <dlutter@redhat.com>
10
+
11
+ require '_libvirt'
12
+
13
+ module Libvirt
14
+
15
+ # A version in Libvirt's representation
16
+ class Version
17
+ attr_reader :version, :type
18
+
19
+ def initialize(type, version)
20
+ @type = type
21
+ @version = version
22
+ end
23
+
24
+ def major
25
+ version / 1000000
26
+ end
27
+
28
+ def minor
29
+ version % 1000000 / 1000
30
+ end
31
+
32
+ def release
33
+ version % 1000
34
+ end
35
+
36
+ def to_s
37
+ "#{major}.#{minor}.#{release}"
38
+ end
39
+ end
40
+ end
data/tests/node.xml ADDED
@@ -0,0 +1,110 @@
1
+ <?xml version="1.0"?>
2
+ <node>
3
+ <!-- This file gives an example config for the mock 'test' backend
4
+ driver to libvirt. This is intended to allow relible unit testing
5
+ of applications using libvirt. To use this with virsh, run something
6
+ like:
7
+
8
+ virsh -connect test:////path/to/this/dir/testnode.xml nodeinfo
9
+
10
+ -->
11
+ <domain type="test">
12
+ <name>fv0</name>
13
+ <uuid>4dea22b31d52d8f32516782e98ab3fa0</uuid>
14
+ <os>
15
+ <type>hvm</type>
16
+ <loader>/usr/lib/xen/boot/hvmloader</loader>
17
+ <boot dev="hd"/>
18
+ </os>
19
+ <currentMemory>2097152</currentMemory>
20
+ <memory>8388608</memory>
21
+ <vcpu>2</vcpu>
22
+ <on_poweroff>destroy</on_poweroff>
23
+ <on_reboot>restart</on_reboot>
24
+ <on_crash>restart</on_crash>
25
+ <features>
26
+ <pae/>
27
+ <acpi/>
28
+ <apic/>
29
+ </features>
30
+ <devices>
31
+ <emulator>/usr/lib/xen/bin/qemu-dm</emulator>
32
+ <interface type="bridge">
33
+ <source bridge="xenbr0"/>
34
+ <mac address="00:16:3e:5d:c7:9e"/>
35
+ <script path="vif-bridge"/>
36
+ </interface>
37
+ <disk type="file">
38
+ <source file="/root/fv0"/>
39
+ <target dev="hda"/>
40
+ </disk>
41
+ <disk type="file" device="cdrom">
42
+ <source file="/root/fc5-x86_64-boot.iso"/>
43
+ <target dev="hdc"/>
44
+ <readonly/>
45
+ </disk>
46
+ <disk type="file" device="floppy">
47
+ <source file="/root/fd.img"/>
48
+ <target dev="fda"/>
49
+ </disk>
50
+ <graphics type="vnc" port="5904"/>
51
+ </devices>
52
+ </domain>
53
+ <domain type="test">
54
+ <name>fc4</name>
55
+ <uuid>EF86180145B911CB88E3AFBFE5370493</uuid>
56
+ <os>
57
+ <type>xen</type>
58
+ <kernel>/boot/vmlinuz-2.6.15-1.43_FC5guest</kernel>
59
+ <initrd>/boot/initrd-2.6.15-1.43_FC5guest.img</initrd>
60
+ <root>/dev/sda1</root>
61
+ <cmdline> ro selinux=0 3</cmdline>
62
+ </os>
63
+ <memory>261072</memory>
64
+ <currentMemory>131072</currentMemory>
65
+ <vcpu>1</vcpu>
66
+ <devices>
67
+ <disk type="file">
68
+ <source file="/u/fc4.img"/>
69
+ <target dev="sda1"/>
70
+ </disk>
71
+ <interface type="bridge">
72
+ <source bridge="xenbr0"/>
73
+ <mac address="aa:00:00:00:00:11"/>
74
+ <script path="/etc/xen/scripts/vif-bridge"/>
75
+ </interface>
76
+ <console tty="/dev/pts/5"/>
77
+ </devices>
78
+ </domain>
79
+ <network>
80
+ <name>private</name>
81
+ <uuid>004b22212d78c30f5aa5f03c87d21e69</uuid>
82
+ <bridge name="brpriv"/>
83
+ <ip address="192.168.124.1" netmask="255.255.255.0">
84
+ <dhcp>
85
+ <range start="192.168.124.128" end="192.168.124.253"/>
86
+ </dhcp>
87
+ </ip>
88
+ </network>
89
+ <network>
90
+ <name>default</name>
91
+ <uuid>004b96e12d78c30f5aa5f03c87d21e69</uuid>
92
+ <bridge name="brdefault"/>
93
+ <forward dev="eth0"/>
94
+ <ip address="192.168.122.1" netmask="255.255.255.0">
95
+ <dhcp>
96
+ <range start="192.168.122.128" end="192.168.122.253"/>
97
+ </dhcp>
98
+ </ip>
99
+ </network>
100
+ <cpu>
101
+ <mhz>6000</mhz>
102
+ <model>i986</model>
103
+ <active>50</active>
104
+ <nodes>4</nodes>
105
+ <sockets>4</sockets>
106
+ <cores>4</cores>
107
+ <threads>2</threads>
108
+ </cpu>
109
+ <memory>8192000</memory>
110
+ </node>
@@ -0,0 +1,178 @@
1
+ require 'test/unit'
2
+
3
+ $:.unshift(File::join(File::dirname(__FILE__), "..", "lib"))
4
+ $:.unshift(File::join(File::dirname(__FILE__), "..", "ext", "libvirt"))
5
+ require 'libvirt'
6
+
7
+ class TestConnect < Test::Unit::TestCase
8
+
9
+ LIBVIRT_VERSION = Libvirt::version("Test")[0]
10
+
11
+ TEST_CAPS_OLD = "<capabilities>\n <host>\n <cpu>\n <arch>i686</arch>\n <features>\n <pae/>\n <nonpae/>\n </features>\n </cpu>\n </host>\n\n <guest>\n <os_type>linux</os_type>\n <arch name=\"i686\">\n <wordsize>32</wordsize>\n <domain type=\"test\"/>\n </arch>\n <features>\n <pae/>\n <nonpae/>\n </features>\n </guest>\n</capabilities>\n"
12
+
13
+ TEST_CAPS_0_40_1 = "<capabilities>\n\n <host>\n <cpu>\n <arch>i686</arch>\n <features>\n <pae/>\n <nonpae/>\n </features>\n </cpu>\n <topology>\n <cells num='2'>\n <cell id='0'>\n <cpus num='8'>\n <cpu id='0'>\n <cpu id='2'>\n <cpu id='4'>\n <cpu id='6'>\n <cpu id='8'>\n <cpu id='10'>\n <cpu id='12'>\n <cpu id='14'>\n </cpus>\n </cell>\n <cell id='1'>\n <cpus num='8'>\n <cpu id='1'>\n <cpu id='3'>\n <cpu id='5'>\n <cpu id='7'>\n <cpu id='9'>\n <cpu id='11'>\n <cpu id='13'>\n <cpu id='15'>\n </cpus>\n </cell>\n </cells>\n </topology>\n </host>\n\n <guest>\n <os_type>linux</os_type>\n <arch name='i686'>\n <wordsize>32</wordsize>\n <domain type='test'>\n </domain>\n </arch>\n <features>\n <pae/>\n <nonpae/>\n </features>\n </guest>\n\n</capabilities>\n"
14
+
15
+ if LIBVIRT_VERSION.major >= 0 &&
16
+ LIBVIRT_VERSION.minor >= 4 &&
17
+ LIBVIRT_VERSION.release >= 1
18
+ TEST_CAPS = TEST_CAPS_0_40_1
19
+ else
20
+ TEST_CAPS = TEST_CAPS_OLD
21
+ end
22
+
23
+ UUID = "4dea22b3-1d52-d8f3-2516-782e98ab3fa0"
24
+
25
+ NETWORK_UUID = "004b96e1-2d78-c30f-5aa5-f03c87d21e69"
26
+
27
+ NETWORK_XML = "<network>
28
+ <name>local</name>
29
+ <uuid>9b562b27-0969-4b39-8c96-ef7858152ccc</uuid>
30
+ <bridge name='virbr0'/>
31
+ <forward/>
32
+ <ip address='172.31.122.1' netmask='255.255.255.0'>
33
+ <dhcp>
34
+ <range start='172.31.122.2' end='172.31.122.254'/>
35
+ </dhcp>
36
+ </ip>
37
+ </network>
38
+ "
39
+
40
+ def test_url
41
+ "test://" + File::join(File::expand_path(File::dirname(__FILE__)),
42
+ "node.xml")
43
+ end
44
+
45
+ def connect
46
+ c = Libvirt::open(test_url)
47
+ assert_not_nil(c)
48
+ assert(! c.closed?)
49
+ return c
50
+ end
51
+
52
+ def test_open
53
+ c = connect
54
+ assert_nothing_raised {
55
+ c.close
56
+ }
57
+ assert(c.closed?)
58
+ assert_nothing_raised {
59
+ c.close
60
+ }
61
+ assert(c.closed?)
62
+ end
63
+
64
+ def test_node_info
65
+ ni = connect.node_get_info
66
+ assert_equal(4, ni.nodes)
67
+ assert_equal(50, ni.cpus)
68
+ assert_equal(2, ni.threads)
69
+ assert_equal(4, ni.sockets)
70
+ assert_equal(6000, ni.mhz)
71
+ assert_equal(4, ni.cores)
72
+ assert_equal("i986", ni.model)
73
+ end
74
+
75
+ def test_misc
76
+ c = connect
77
+ assert_equal("Test", c.type)
78
+ assert_equal(2, c.version)
79
+ hostname=`hostname`.chomp
80
+
81
+ assert_nothing_raised {
82
+ c.lookup_network_by_name("default").create
83
+ }
84
+
85
+ assert_equal(hostname, c.hostname)
86
+ assert_equal(test_url, c.uri)
87
+ assert_equal(32, c.max_vcpus("bogus"))
88
+ assert(c.capabilities.size > 0)
89
+ assert_equal(2, c.num_of_domains)
90
+ assert_equal([1, 2], c.list_domains)
91
+ assert_equal(0, c.num_of_defined_domains)
92
+ assert_equal([], c.list_defined_domains)
93
+ assert_equal(1, c.num_of_networks)
94
+ assert_equal(["default"], c.list_networks)
95
+ assert_equal(1, c.num_of_defined_networks)
96
+ assert_equal(["private"], c.list_defined_networks)
97
+
98
+ v = Libvirt::version("Test")
99
+ assert_equal("libvirt", v[0].type)
100
+ assert_equal("Test", v[1].type)
101
+ end
102
+
103
+ def test_domain
104
+ c = connect
105
+
106
+ dom = c.lookup_domain_by_id(1)
107
+ assert_equal("fv0", dom.name)
108
+ assert_equal("linux", dom.os_type)
109
+ assert_equal(UUID, dom.uuid)
110
+ assert_equal(UUID, c.lookup_domain_by_uuid(UUID).uuid)
111
+ assert_equal(UUID, c.lookup_domain_by_name("fv0").uuid)
112
+
113
+ info = dom.info
114
+ assert_equal(8388608, info.max_mem)
115
+ assert_equal(2097152, info.memory)
116
+ assert_equal(2, info.nr_virt_cpu)
117
+ assert_equal(Libvirt::Domain::RUNNING, info.state)
118
+
119
+ dom.memory = info.memory/2
120
+ dom.vcpus = 1
121
+ info = dom.info
122
+ assert_equal(2097152/2, info.memory)
123
+ assert_equal(1, info.nr_virt_cpu)
124
+
125
+ # pin_vcpu is not implemented in the test driver
126
+ # enable this once it becomes available
127
+ # dom.pin_vcpu(0,[0])
128
+
129
+ dom.free()
130
+ assert_raise ArgumentError do
131
+ dom.name
132
+ end
133
+ end
134
+
135
+ def test_error
136
+ c = connect
137
+ raised = false
138
+ begin
139
+ c.lookup_domain_by_id(42)
140
+ rescue Libvirt::RetrieveError => e
141
+ raised = true
142
+ assert(e.message.size > 0)
143
+ assert_equal("virDomainLookupByID", e.libvirt_function_name)
144
+ assert_not_nil e.libvirt_message
145
+ end
146
+ assert(raised)
147
+ end
148
+
149
+ def test_network
150
+ c = connect
151
+
152
+ netw = c.lookup_network_by_name("default")
153
+ assert_equal("default", netw.name)
154
+ assert_equal("brdefault", netw.bridge_name)
155
+ uuid = NETWORK_UUID
156
+ assert_equal(uuid, netw.uuid)
157
+ assert_equal(uuid, c.lookup_network_by_uuid(uuid).uuid)
158
+ assert_equal(uuid, c.lookup_network_by_name("default").uuid)
159
+ assert_equal(false, netw.autostart)
160
+ netw.autostart = true
161
+ assert_equal(true, netw.autostart)
162
+ netw.autostart = false
163
+ assert_equal(false, netw.autostart)
164
+
165
+ netw = c.define_network_xml(NETWORK_XML)
166
+ assert(netw.xml_desc.size > 0)
167
+ assert_equal(c, netw.connection)
168
+
169
+ netw.create
170
+ assert_equal(1, c.num_of_networks)
171
+ assert_equal(["local"], c.list_networks)
172
+
173
+ netw.free
174
+ assert_raise ArgumentError do
175
+ netw.name
176
+ end
177
+ end
178
+ end
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby-libvirt
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors: []
7
+
8
+ autorequire: libvirt
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-11-18 00:00:00 +01:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Provides bindings for libvirt.
17
+ email: libvir-list@redhat.com
18
+ executables: []
19
+
20
+ extensions:
21
+ - ext/libvirt/extconf.rb
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - Rakefile
26
+ - COPYING
27
+ - README
28
+ - NEWS
29
+ - README.rdoc
30
+ - lib/libvirt.rb
31
+ - ext/libvirt/_libvirt.c
32
+ - ext/libvirt/extconf.h
33
+ - ext/libvirt/extconf.rb
34
+ - tests/node.xml
35
+ - tests/tc_connect.rb
36
+ has_rdoc: false
37
+ homepage: http://libvirt.org/ruby/
38
+ post_install_message:
39
+ rdoc_options: []
40
+
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 1.8.1
48
+ version:
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ version:
55
+ requirements: []
56
+
57
+ rubyforge_project:
58
+ rubygems_version: 1.2.0
59
+ signing_key:
60
+ specification_version: 2
61
+ summary: Ruby bindings for LIBVIRT
62
+ test_files: []
63
+