ruby-libvirt 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,6 @@
1
+ #ifndef STORAGE_H
2
+ #define STORAGE_H
3
+
4
+ void init_storage();
5
+
6
+ #endif
data/tests/tc_connect.rb CHANGED
@@ -87,7 +87,7 @@ class TestConnect < Test::Unit::TestCase
87
87
  assert_equal(32, c.max_vcpus("bogus"))
88
88
  assert(c.capabilities.size > 0)
89
89
  assert_equal(2, c.num_of_domains)
90
- assert_equal([1, 2], c.list_domains)
90
+ assert_equal([1, 2], c.list_domains.sort)
91
91
  assert_equal(0, c.num_of_defined_domains)
92
92
  assert_equal([], c.list_defined_domains)
93
93
  assert_equal(1, c.num_of_networks)
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # Test the conn methods the bindings support
4
+
5
+ require 'libvirt'
6
+
7
+ conn = Libvirt::open
8
+ puts "Connection:"
9
+ puts " Closed?: #{conn.closed?}"
10
+ puts " Type: #{conn.type}"
11
+ puts " Version: #{conn.version}"
12
+ puts " Libversion: #{conn.libversion}"
13
+ puts " Hostname: #{conn.hostname}"
14
+ puts " URI: #{conn.uri}"
15
+ puts " Max VCPUs: #{conn.max_vcpus}"
16
+ puts " Max VCPUs (kvm): #{conn.max_vcpus("kvm")}"
17
+ puts " Max VCPUs (qemu): #{conn.max_vcpus("qemu")}"
18
+ puts " Node Free Memory: #{conn.node_free_memory}kb"
19
+ puts " Node Cells Free Memory:"
20
+ cell_free_mem = conn.node_cells_free_memory
21
+ cell_free_mem.each_index do |cell|
22
+ puts " Cell: #{cell}, Free Memory: #{cell_free_mem[cell]}kb"
23
+ end
24
+ puts " Node Cells Free Memory (0-):"
25
+ cell_free_mem = conn.node_cells_free_memory(0)
26
+ cell_free_mem.each_index do |cell|
27
+ puts " Cell: #{cell}, Free Memory: #{cell_free_mem[cell]}kb"
28
+ end
29
+ puts " Node Cells Free Memory (0-1):"
30
+ cell_free_mem = conn.node_cells_free_memory(0, 1)
31
+ cell_free_mem.each_index do |cell|
32
+ puts " Cell: #{cell}, Free Memory: #{cell_free_mem[cell]}kb"
33
+ end
34
+ secmodel = conn.node_get_security_model
35
+ puts " Node Security Model:"
36
+ puts " Model: #{secmodel.model}"
37
+ puts " DOI: #{secmodel.doi}"
38
+ puts " Encrypted?: #{conn.encrypted?}"
39
+ puts " Secure?: #{conn.secure?}"
40
+ info = conn.node_get_info
41
+ puts " Node Info:"
42
+ puts " Model: #{info.model}"
43
+ puts " Memory: #{info.memory}"
44
+ puts " CPUs: #{info.cpus}"
45
+ puts " MHz: #{info.mhz}"
46
+ puts " Nodes: #{info.nodes}"
47
+ puts " Sockets: #{info.sockets}"
48
+ puts " Cores: #{info.cores}"
49
+ puts " Threads: #{info.threads}"
50
+ puts " Capabilities:"
51
+ puts conn.capabilities
52
+ conn.close
53
+ puts "After close, conn closed? = #{conn.closed?}"
@@ -0,0 +1,165 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # Test the domain methods the bindings support
4
+
5
+ require 'libvirt'
6
+
7
+ conn = Libvirt::open
8
+ puts "Number of Domains: #{conn.num_of_domains}"
9
+ puts "Number of Defined Domains: #{conn.num_of_defined_domains}"
10
+ puts "Domain Create:"
11
+ new_dom_xml = <<EOF
12
+ <domain type='kvm'>
13
+ <name>ruby-libvirt-tester</name>
14
+ <uuid>93a5c045-6457-2c09-e56f-927cdf34e17a</uuid>
15
+ <memory>1048576</memory>
16
+ <currentMemory>1048576</currentMemory>
17
+ <vcpu>1</vcpu>
18
+ <os>
19
+ <type arch='x86_64'>hvm</type>
20
+ <boot dev='hd'/>
21
+ </os>
22
+ <features>
23
+ <acpi/>
24
+ <apic/>
25
+ <pae/>
26
+ </features>
27
+ <clock offset='utc'/>
28
+ <on_poweroff>destroy</on_poweroff>
29
+ <on_reboot>restart</on_reboot>
30
+ <on_crash>restart</on_crash>
31
+ <devices>
32
+ <emulator>/usr/libexec/qemu-kvm</emulator>
33
+ <disk type='file' device='disk'>
34
+ <driver name='qemu' type='raw'/>
35
+ <source file='/var/lib/libvirt/images/ruby-libvirt-test.dsk'/>
36
+ <target dev='vda' bus='virtio'/>
37
+ </disk>
38
+ <interface type='bridge'>
39
+ <mac address='52:54:00:60:3c:95'/>
40
+ <source bridge='br0'/>
41
+ <model type='virtio'/>
42
+ <target dev='rl556'/>
43
+ </interface>
44
+ <serial type='pty'>
45
+ <target port='0'/>
46
+ </serial>
47
+ <console type='pty'>
48
+ <target port='0'/>
49
+ </console>
50
+ <input type='mouse' bus='ps2'/>
51
+ <graphics type='vnc' port='-1' autoport='yes' keymap='en-us'/>
52
+ <video>
53
+ <model type='cirrus' vram='9216' heads='1'/>
54
+ </video>
55
+ </devices>
56
+ </domain>
57
+ EOF
58
+
59
+ newdom = conn.define_domain_xml(new_dom_xml)
60
+ newdom.undefine
61
+
62
+ `dd if=/dev/zero of=/var/lib/libvirt/images/ruby-libvirt-test.dsk bs=1 count=1 seek=5G`
63
+
64
+ newdom = conn.create_domain_linux(new_dom_xml)
65
+ info = newdom.info
66
+ if info.state != Libvirt::Domain::RUNNING
67
+ raise "Failed to start new domain"
68
+ end
69
+ sleep 2
70
+ newdom.destroy
71
+
72
+ newdom = conn.define_domain_xml(new_dom_xml)
73
+ info = newdom.info
74
+ newdom.create
75
+ sleep 2
76
+ newdom.suspend
77
+ sleep 2
78
+ newdom.resume
79
+ sleep 2
80
+ #newdom.save('/var/lib/libvirt/images/ruby-libvirt-test.save')
81
+ #sleep 2
82
+ #newdom.restore
83
+ ifinfo = newdom.ifinfo('rl556')
84
+ puts "New Domain Interface Information rl556:"
85
+ puts " rx_bytes: #{ifinfo.rx_bytes}"
86
+ puts " rx_packets: #{ifinfo.rx_packets}"
87
+ puts " rx_errs: #{ifinfo.rx_errs}"
88
+ puts " rx_drop: #{ifinfo.rx_drop}"
89
+ puts " tx_bytes: #{ifinfo.tx_bytes}"
90
+ puts " tx_packets: #{ifinfo.tx_packets}"
91
+ puts " tx_errs: #{ifinfo.tx_errs}"
92
+ puts " tx_drop: #{ifinfo.tx_drop}"
93
+ seclabel = newdom.security_label
94
+ puts "New Domain Security Label:"
95
+ puts " Label: #{seclabel.label}"
96
+ puts " Enforcing: #{seclabel.enforcing}"
97
+ blockstat = newdom.block_stats('vda')
98
+ puts "New Domain Block Stats vda:"
99
+ puts " rd_req: #{blockstat.rd_req}"
100
+ puts " rd_bytes: #{blockstat.rd_bytes}"
101
+ puts " wr_req: #{blockstat.wr_req}"
102
+ puts " wr_bytes: #{blockstat.wr_bytes}"
103
+ puts " errs: #{blockstat.errs}"
104
+ memstat = newdom.memory_stats
105
+ memstat = newdom.memory_stats(0)
106
+ puts "New Domain Memory Stats:"
107
+ memstat.each do |stat|
108
+ puts " #{stat.tag}: #{stat.val}"
109
+ end
110
+ blockinfo = newdom.blockinfo('/var/lib/libvirt/images/ruby-libvirt-test.dsk')
111
+ blockinfo = newdom.blockinfo('/var/lib/libvirt/images/ruby-libvirt-test.dsk', 0)
112
+ puts "New Domain Block Info vda:"
113
+ puts " Capacity: #{blockinfo.capacity}"
114
+ puts " Allocation: #{blockinfo.allocation}"
115
+ puts " Physical: #{blockinfo.physical}"
116
+ blockpeek = newdom.block_peek('/var/lib/libvirt/images/ruby-libvirt-test.dsk',
117
+ 0, 512)
118
+ blockpeek = newdom.block_peek('/var/lib/libvirt/images/ruby-libvirt-test.dsk',
119
+ 0, 512, 0)
120
+ # 2010-06-30: memory_peek is broken on RHEL-6 libvirt; fixed in upstream
121
+ #mempeek = newdom.memory_peek(0, 512, Libvirt::Domain::MEMORY_VIRTUAL)
122
+
123
+
124
+ defined = conn.list_defined_domains
125
+ running = conn.list_domains
126
+
127
+ (defined+running).each do |dom|
128
+ if defined.include? dom
129
+ domain = conn.lookup_domain_by_name(dom)
130
+ elsif running.include? dom
131
+ domain = conn.lookup_domain_by_id(dom)
132
+ end
133
+ dom2 = conn.lookup_domain_by_uuid(domain.uuid)
134
+ puts "Domain #{domain.name}:"
135
+ puts " UUID: #{domain.uuid}"
136
+ puts " ID: #{domain.id}"
137
+ puts " OS Type: #{domain.os_type}"
138
+ puts " Max Memory: #{domain.max_memory}"
139
+ puts " Max VCPUs: #{domain.max_vcpus}"
140
+ puts " Persistent?: #{domain.persistent?}"
141
+ puts " Active?: #{domain.active?}"
142
+ info = domain.info
143
+ puts " Info:"
144
+ puts " State: #{info.state}"
145
+ puts " Max Memory: #{info.max_mem}"
146
+ puts " Memory: #{info.memory}"
147
+ puts " Number VCPUs: #{info.nr_virt_cpu}"
148
+ puts " CPU Time: #{info.cpu_time}"
149
+ puts " Snapshots:"
150
+ puts " Number: #{domain.num_of_snapshots}"
151
+ puts " Has Current?: #{domain.has_current_snapshot?}"
152
+ domain.list_snapshots.each do |snapname|
153
+ snap = domain.lookup_snapshot_by_name(snapname)
154
+ puts " Snapshot #{snapname}"
155
+ puts snap.xml_desc
156
+ end
157
+ domain.xml_desc
158
+ puts " XML:"
159
+ puts domain.xml_desc(0)
160
+ end
161
+
162
+ newdom.destroy
163
+ newdom.undefine
164
+
165
+ conn.close
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # Test the interface methods the bindings support
4
+
5
+ require 'libvirt'
6
+
7
+ conn = Libvirt::open
8
+ puts "Number of Interfaces: #{conn.num_of_interfaces}"
9
+ puts "Number of Defined Interfaces: #{conn.num_of_defined_interfaces}"
10
+
11
+ new_interface_xml = <<EOF
12
+ <interface type='bridge' name='testbr7'>
13
+ <bridge>
14
+ <interface type='ethernet' name='dummy'>
15
+ </interface>
16
+ </bridge>
17
+ </interface>
18
+ EOF
19
+
20
+ # FIXME: doesn't work at the moment
21
+ #new_interface = conn.define_interface_xml(new_interface_xml)
22
+ #new_interface.undefine
23
+
24
+ defined = conn.list_defined_interfaces
25
+ running = conn.list_interfaces
26
+
27
+ (defined+running).each do |intname|
28
+ interface = conn.lookup_interface_by_name(intname)
29
+ int2 = conn.lookup_interface_by_mac(interface.mac)
30
+ puts "Interface #{interface.name}:"
31
+ puts " MAC: #{interface.mac}"
32
+ puts " XML:"
33
+ puts interface.xml_desc
34
+ end
35
+ conn.close
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # Test the network methods the bindings support
4
+
5
+ require 'libvirt'
6
+
7
+ conn = Libvirt::open
8
+ puts "Number of Networks: #{conn.num_of_networks}"
9
+ puts "Number of Defined Networks: #{conn.num_of_defined_networks}"
10
+
11
+ new_network_xml = <<EOF
12
+ <network>
13
+ <name>testnetwork</name>
14
+ <uuid>e0eed9fa-cb64-433f-066c-257a29b1c13a</uuid>
15
+ </network>
16
+ EOF
17
+
18
+ newnetwork = conn.define_network_xml(new_network_xml)
19
+ newnetwork.create
20
+ newnetwork.destroy
21
+ newnetwork.undefine
22
+
23
+ defined = conn.list_defined_networks
24
+ running = conn.list_networks
25
+
26
+ (defined+running).each do |netname|
27
+ network = conn.lookup_network_by_name(netname)
28
+ net2 = conn.lookup_network_by_uuid(network.uuid)
29
+
30
+ puts "Network #{network.name}:"
31
+ puts " UUID: #{network.uuid}"
32
+ puts " Autostart?: #{network.autostart?}"
33
+ puts " Active?: #{network.active?}"
34
+ puts " Persistent?: #{network.persistent?}"
35
+ puts " Bridge Name: #{network.bridge_name}"
36
+ puts " XML:"
37
+ puts network.xml_desc
38
+ end
39
+
40
+ conn.close
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # Test the nodedevice methods the bindings support
4
+
5
+ require 'libvirt'
6
+
7
+ conn = Libvirt::open
8
+ puts "Number of NodeDevices: #{conn.num_of_nodedevices}"
9
+
10
+ conn.list_nodedevices.each do |nodename|
11
+ nodedevice = conn.lookup_nodedevice_by_name(nodename)
12
+ puts "NodeDevice #{nodedevice.name}:"
13
+ puts " Parent: #{nodedevice.parent}"
14
+ puts " Number Caps: #{nodedevice.num_of_caps}"
15
+ puts " Caps:"
16
+ nodedevice.list_caps.each do |cap|
17
+ puts " #{cap}"
18
+ end
19
+ puts " XML:"
20
+ puts nodedevice.xml_desc
21
+ end
22
+
23
+ conn.close
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # Test the nwfilter methods the bindings support
4
+
5
+ require 'libvirt'
6
+
7
+ conn = Libvirt::open
8
+ puts "Number of NWFilters: #{conn.num_of_nwfilters}"
9
+
10
+ new_nwfilter_xml = <<EOF
11
+ <filter name='no-spamming'>
12
+ <uuid>d217f2d7-5a04-0e01-8b90-ec274a436b74</uuid>
13
+ </filter>
14
+ EOF
15
+
16
+ newnwfilter = conn.define_nwfilter_xml(new_nwfilter_xml)
17
+ newnwfilter.undefine
18
+
19
+ conn.list_nwfilters.each do |nwfname|
20
+ nwfilter = conn.lookup_nwfilter_by_name(nwfname)
21
+ nwf2 = conn.lookup_nwfilter_by_uuid(nwfilter.uuid)
22
+ puts "NWFilter #{nwfilter.name}:"
23
+ puts " UUID: #{nwfilter.uuid}"
24
+ puts " XML:"
25
+ puts nwfilter.xml_desc
26
+ end
27
+
28
+ conn.close
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # Test the open calls that the bindings support
4
+
5
+ require 'libvirt'
6
+
7
+ conn = Libvirt::open
8
+ conn.close
9
+
10
+ conn = Libvirt::open("qemu:///system")
11
+ conn.close
12
+
13
+ conn = Libvirt::open(nil)
14
+ conn.close
15
+
16
+ conn = Libvirt::open_read_only
17
+ conn.close
18
+
19
+ conn = Libvirt::open_read_only("qemu:///system")
20
+ conn.close
21
+
22
+ conn = Libvirt::open_read_only(nil)
23
+ conn.close
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # Test the secret methods the bindings support
4
+
5
+ require 'libvirt'
6
+
7
+ conn = Libvirt::open
8
+ puts "Number of Secrets: #{conn.num_of_secrets}"
9
+
10
+ new_secret_xml = <<EOF
11
+ <secret ephemeral='no' private='no'>
12
+ <description>test secret</description>
13
+ </secret>
14
+ EOF
15
+
16
+ newsecret = conn.define_secret_xml(new_secret_xml)
17
+ newsecret.set_value("hello")
18
+ puts newsecret.get_value
19
+ newsecret.set_value("bob", 0)
20
+ puts newsecret.get_value
21
+
22
+ conn.list_secrets.each do |secuuid|
23
+ secret = conn.lookup_secret_by_uuid(secuuid)
24
+ puts "Secret #{secret.uuid}:"
25
+ puts " UsageType: #{secret.usagetype}"
26
+ puts " UsageId: #{secret.usageid}"
27
+ puts " XML:"
28
+ puts secret.xml_desc
29
+ end
30
+
31
+ newsecret.undefine
32
+
33
+ conn.close
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # Test the storage methods the bindings support
4
+
5
+ require 'libvirt'
6
+
7
+ conn = Libvirt::open
8
+ puts "Number of Storage Pools: #{conn.num_of_storage_pools}"
9
+ puts "Number of Defined Storage Pools: #{conn.num_of_defined_storage_pools}"
10
+
11
+ defined = conn.list_defined_storage_pools
12
+ running = conn.list_storage_pools
13
+
14
+ (defined+running).each do |storagename|
15
+ storagepool = conn.lookup_storage_pool_by_name(storagename)
16
+ store2 = conn.lookup_storage_pool_by_uuid(storagepool.uuid)
17
+ storagepool.refresh
18
+ puts "StoragePool #{storagepool.name}:"
19
+ puts " UUID: #{storagepool.uuid}"
20
+ puts " Autostart?: #{storagepool.autostart?}"
21
+ puts " Active?: #{storagepool.active?}"
22
+ puts " Persistent?: #{storagepool.persistent?}"
23
+ info = storagepool.info
24
+ puts " Info:"
25
+ puts " State: #{info.state}"
26
+ puts " Capacity: #{info.capacity}"
27
+ puts " Allocation: #{info.allocation}"
28
+ puts " Available: #{info.available}"
29
+ puts " XML:"
30
+ puts storagepool.xml_desc
31
+ puts " Number of Volumes: #{storagepool.num_of_volumes}"
32
+ puts " Volumes:"
33
+ storagepool.list_volumes.each do |volname|
34
+ storagevolume = storagepool.lookup_volume_by_name(volname)
35
+ vol2 = storagepool.lookup_volume_by_key(storagevolume.key)
36
+ vol3 = storagepool.lookup_volume_by_path(storagevolume.path)
37
+ puts " Volume #{storagevolume.name}:"
38
+ puts " Pool: #{storagevolume.pool.name}"
39
+ puts " Key: #{storagevolume.key}"
40
+ puts " Path: #{storagevolume.path}"
41
+ info = storagevolume.info
42
+ puts " Info:"
43
+ puts " Type: #{info.type}"
44
+ puts " Capacity: #{info.capacity}"
45
+ puts " Allocation: #{info.allocation}"
46
+ end
47
+ end
48
+
49
+ conn.close