1Sys::Virt(3) User Contributed Perl Documentation Sys::Virt(3)
2
3
4
6 Sys::Virt - Represent and manage a libvirt hypervisor connection
7
9 my $conn = Sys::Virt->new(uri => $uri);
10
11 my @domains = $conn->list_domains();
12
13 foreach my $dom (@domains) {
14 print "Domain ", $dom->get_id, " ", $dom->get_name, "\n";
15 }
16
18 The Sys::Virt module provides a Perl XS binding to the libvirt virtual
19 machine management APIs. This allows machines running within arbitrary
20 virtualization containers to be managed with a consistent API.
21
23 Any operations in the Sys::Virt API which have failure scenarios will
24 result in an instance of the Sys::Virt::Error module being thrown. To
25 catch these errors, simply wrap the method in an eval block:
26
27 eval { my $conn = Sys::Virt->new(uri => $uri); };
28 if ($@) {
29 print STDERR "Unable to open connection to $addr" . $@->message . "\n";
30 }
31
32 For details of the information contained in the error objects, consult
33 the Sys::Virt::Error manual page.
34
36 my $conn = Sys::Virt->new(uri => $uri, readonly => $ro, flags =>
37 $flags);
38 Attach to the virtualization host identified by "uri". The "uri"
39 parameter may be omitted, in which case the default connection made
40 will be to the local Xen hypervisor. Some example URIs include:
41
42 xen:///
43 Xen on the local machine
44
45 test:///default
46 Dummy "in memory" driver for test suites
47
48 qemu:///system
49 System-wide driver for QEMU / KVM virtualization
50
51 qemu:///session
52 Per-user driver for QEMU virtualization
53
54 qemu+tls://somehost/system
55 System-wide QEMU driver on "somehost" using TLS security
56
57 xen+tcp://somehost/
58 Xen driver on "somehost" using TCP / SASL security
59
60 For further details consult "http://libvirt.org/uri.html"
61
62 If the optional "readonly" parameter is supplied, then an
63 unprivileged connection to the hypervisor will be attempted. If it
64 is not supplied, then it defaults to making a fully privileged
65 connection to the hypervisor. If the calling application is not
66 running as root, it may be necessary to provide authentication
67 callbacks.
68
69 If the optional "auth" parameter is set to a non-zero value,
70 authentication will be enabled during connection, using the default
71 set of credential gathering callbacks. The default callbacks prompt
72 for credentials on the console, so are not suitable for graphical
73 applications. For such apps a custom implementation should be
74 supplied. The "credlist" parameter should be an array reference
75 listing the set of credential types that will be supported. The
76 credential constants in this module can be used as values in this
77 list. The "callback" parameter should be a subroutine reference
78 containing the code necessary to gather the credentials. When
79 invoked it will be supplied with a single parameter, an array
80 reference of requested credentials. The elements of the array are
81 hash references, with keys "type" giving the type of credential,
82 "prompt" giving a user descriptive user prompt, "challenge" giving
83 name of the credential required. The answer should be collected
84 from the user, and returned by setting the "result" key. This key
85 may already be set with a default result if applicable
86
87 As a simple example returning hardcoded credentials
88
89 my $uri = "qemu+tcp://192.168.122.1/system";
90 my $username = "test";
91 my $password = "123456";
92
93 my $con = Sys::Virt->new(uri => $uri,
94 auth => 1,
95 credlist => [
96 Sys::Virt::CRED_AUTHNAME,
97 Sys::Virt::CRED_PASSPHRASE,
98 ],
99 callback =>
100 sub {
101 my $creds = shift;
102
103 foreach my $cred (@{$creds}) {
104 if ($cred->{type} == Sys::Virt::CRED_AUTHNAME) {
105 $cred->{result} = $username;
106 }
107 if ($cred->{type} == Sys::Virt::CRED_PASSPHRASE) {
108 $cred->{result} = $password;
109 }
110 }
111 return 0;
112 });
113
114 For backwards compatibility with earlier releases, the "address"
115 parameter is accepted as a synonym for the "uri" parameter. The use
116 of "uri" is recommended for all newly written code.
117
118 my $st = $conn->new_stream($flags)
119 Create a new stream, with the given flags
120
121 my $dom = $conn->create_domain($xml, $flags);
122 Create a new domain based on the XML description passed into the
123 $xml parameter. The returned object is an instance of the
124 Sys::Virt::Domain class. This method is not available with
125 unprivileged connections to the hypervisor. The $flags parameter
126 accepts one of the DOMAIN CREATION constants documented in
127 Sys::Virt::Domain, and defaults to 0 if omitted.
128
129 my $dom = $conn->create_domain_with_files($xml, $fds, $flags);
130 Create a new domain based on the XML description passed into the
131 $xml parameter. The returned object is an instance of the
132 Sys::Virt::Domain class. This method is not available with
133 unprivileged connections to the hypervisor. The $fds parameter is
134 an array of UNIX file descriptors which will be passed to the init
135 process of the container. This is only supported with container
136 based virtualization. The $flags parameter accepts one of the
137 DOMAIN CREATION constants documented in Sys::Virt::Domain, and
138 defaults to 0 if omitted.
139
140 my $dom = $conn->define_domain($xml, $flags=0);
141 Defines, but does not start, a new domain based on the XML
142 description passed into the $xml parameter. The returned object is
143 an instance of the Sys::Virt::Domain class. This method is not
144 available with unprivileged connections to the hypervisor. The
145 defined domain can be later started by calling the "create" method
146 on the returned "Sys::Virt::Domain" object.
147
148 my $net = $conn->create_network($xml);
149 Create a new network based on the XML description passed into the
150 $xml parameter. The returned object is an instance of the
151 Sys::Virt::Network class. This method is not available with
152 unprivileged connections to the hypervisor.
153
154 my $net = $conn->define_network($xml);
155 Defines, but does not start, a new network based on the XML
156 description passed into the $xml parameter. The returned object is
157 an instance of the Sys::Virt::Network class. This method is not
158 available with unprivileged connections to the hypervisor. The
159 defined network can be later started by calling the "create" method
160 on the returned "Sys::Virt::Network" object.
161
162 my $nwfilter = $conn->define_nwfilter($xml);
163 Defines a new network filter based on the XML description passed
164 into the $xml parameter. The returned object is an instance of the
165 Sys::Virt::NWFilter class. This method is not available with
166 unprivileged connections to the hypervisor.
167
168 my $secret = $conn->define_secret($xml);
169 Defines a new secret based on the XML description passed into the
170 $xml parameter. The returned object is an instance of the
171 Sys::Virt::Secret class. This method is not available with
172 unprivileged connections to the hypervisor.
173
174 my $pool = $conn->create_storage_pool($xml);
175 Create a new storage pool based on the XML description passed into
176 the $xml parameter. The returned object is an instance of the
177 Sys::Virt::StoragePool class. This method is not available with
178 unprivileged connections to the hypervisor.
179
180 my $pool = $conn->define_storage_pool($xml);
181 Defines, but does not start, a new storage pol based on the XML
182 description passed into the $xml parameter. The returned object is
183 an instance of the Sys::Virt::StoragePool class. This method is not
184 available with unprivileged connections to the hypervisor. The
185 defined pool can be later started by calling the "create" method on
186 the returned "Sys::Virt::StoragePool" object.
187
188 my $pool = $conn->create_interface($xml);
189 Create a new interface based on the XML description passed into the
190 $xml parameter. The returned object is an instance of the
191 Sys::Virt::Interface class. This method is not available with
192 unprivileged connections to the hypervisor.
193
194 my $binding = $conn->create_nwfilter_binding($xml);
195 Create a new network filter binding based on the XML description
196 passed into the $xml parameter. The returned object is an instance
197 of the Sys::Virt::NWFilterBinding class.
198
199 my $iface = $conn->define_interface($xml);
200 Defines, but does not start, a new interface based on the XML
201 description passed into the $xml parameter. The returned object is
202 an instance of the Sys::Virt::Interface class. This method is not
203 available with unprivileged connections to the hypervisor. The
204 defined interface can be later started by calling the "create"
205 method on the returned "Sys::Virt::Interface" object.
206
207 my $dev = $conn->create_node_device($xml);
208 Create a new virtual node device based on the XML description
209 passed into the $xml parameter. The returned object is an instance
210 of the Sys::Virt::NodeDevice class. This method is not available
211 with unprivileged connections to the hypervisor.
212
213 my @doms = $conn->list_domains()
214 Return a list of all running domains currently known to the
215 hypervisor. The elements in the returned list are instances of the
216 Sys::Virt::Domain class. This method requires O(n) RPC calls, so
217 the "list_all_domains" method is recommended as a more efficient
218 alternative.
219
220 my $nids = $conn->num_of_domains()
221 Return the number of running domains known to the hypervisor. This
222 can be used as the "maxids" parameter to "list_domain_ids".
223
224 my @domIDs = $conn->list_domain_ids($maxids)
225 Return a list of all domain IDs currently known to the hypervisor.
226 The IDs can be used with the "get_domain_by_id" method.
227
228 my @doms = $conn->list_defined_domains()
229 Return a list of all domains defined, but not currently running, on
230 the hypervisor. The elements in the returned list are instances of
231 the Sys::Virt::Domain class. This method requires O(n) RPC calls,
232 so the "list_all_domains" method is recommended as a more efficient
233 alternative.
234
235 my $ndoms = $conn->num_of_defined_domains()
236 Return the number of running domains known to the hypervisor. This
237 can be used as the "maxnames" parameter to
238 "list_defined_domain_names".
239
240 my @names = $conn->list_defined_domain_names($maxnames)
241 Return a list of names of all domains defined, but not currently
242 running, on the hypervisor. The names can be used with the
243 "get_domain_by_name" method.
244
245 my @doms = $conn->list_all_domains($flags)
246 Return a list of all domains currently known to the hypervisor,
247 whether running or shutoff. The elements in the returned list are
248 instances of the Sys::Virt::Domain class. The $flags parameter can
249 be used to filter the list of returned domains.
250
251 my @nets = $conn->list_networks()
252 Return a list of all networks currently known to the hypervisor.
253 The elements in the returned list are instances of the
254 Sys::Virt::Network class. This method requires O(n) RPC calls, so
255 the "list_all_networks" method is recommended as a more efficient
256 alternative.
257
258 my $nnets = $conn->num_of_networks()
259 Return the number of running networks known to the hypervisor. This
260 can be used as the "maxids" parameter to "list_network_ids".
261
262 my @netNames = $conn->list_network_names($maxnames)
263 Return a list of all network names currently known to the
264 hypervisor. The names can be used with the "get_network_by_name"
265 method.
266
267 my @nets = $conn->list_defined_networks()
268 Return a list of all networks defined, but not currently running,
269 on the hypervisor. The elements in the returned list are instances
270 of the Sys::Virt::Network class. This method requires O(n) RPC
271 calls, so the "list_all_networks" method is recommended as a more
272 efficient alternative.
273
274 my $nnets = $conn->num_of_defined_networks()
275 Return the number of running networks known to the host. This can
276 be used as the "maxnames" parameter to
277 "list_defined_network_names".
278
279 my @names = $conn->list_defined_network_names($maxnames)
280 Return a list of names of all networks defined, but not currently
281 running, on the host. The names can be used with the
282 "get_network_by_name" method.
283
284 my @nets = $conn->list_all_networks($flags)
285 Return a list of all networks currently known to the hypervisor,
286 whether running or shutoff. The elements in the returned list are
287 instances of the Sys::Virt::Network class. The $flags parameter can
288 be used to filter the list of returned networks.
289
290 my @pools = $conn->list_storage_pools()
291 Return a list of all storage pools currently known to the host. The
292 elements in the returned list are instances of the
293 Sys::Virt::StoragePool class. This method requires O(n) RPC calls,
294 so the "list_all_storage_pools" method is recommended as a more
295 efficient alternative.
296
297 my $npools = $conn->num_of_storage_pools()
298 Return the number of running storage pools known to the hypervisor.
299 This can be used as the "maxids" parameter to
300 "list_storage_pool_names".
301
302 my @poolNames = $conn->list_storage_pool_names($maxnames)
303 Return a list of all storage pool names currently known to the
304 hypervisor. The IDs can be used with the "get_network_by_id"
305 method.
306
307 my @pools = $conn->list_defined_storage_pools()
308 Return a list of all storage pools defined, but not currently
309 running, on the host. The elements in the returned list are
310 instances of the Sys::Virt::StoragePool class. This method requires
311 O(n) RPC calls, so the "list_all_storage_pools" method is
312 recommended as a more efficient alternative.
313
314 my $npools = $conn->num_of_defined_storage_pools()
315 Return the number of running networks known to the host. This can
316 be used as the "maxnames" parameter to
317 "list_defined_storage_pool_names".
318
319 my @names = $conn->list_defined_storage_pool_names($maxnames)
320 Return a list of names of all storage pools defined, but not
321 currently running, on the host. The names can be used with the
322 "get_storage_pool_by_name" method.
323
324 my @pools = $conn->list_all_storage_pools($flags)
325 Return a list of all storage pools currently known to the
326 hypervisor, whether running or shutoff. The elements in the
327 returned list are instances of the Sys::Virt::StoragePool class.
328 The $flags parameter can be used to filter the list of returned
329 pools.
330
331 my @devs = $conn->list_node_devices($capability)
332 Return a list of all devices currently known to the host OS. The
333 elements in the returned list are instances of the
334 Sys::Virt::NodeDevice class. The optional "capability" parameter
335 allows the list to be restricted to only devices with a particular
336 capability type. This method requires O(n) RPC calls, so the
337 "list_all_node_devices" method is recommended as a more efficient
338 alternative.
339
340 my $ndevs = $conn->num_of_node_devices($capability[, $flags])
341 Return the number of host devices known to the hypervisor. This can
342 be used as the "maxids" parameter to "list_node_device_names". The
343 "capability" parameter allows the list to be restricted to only
344 devices with a particular capability type, and should be left as
345 "undef" if the full list is required. The optional <flags>
346 parameter is currently unused and defaults to 0 if omitted.
347
348 my @devNames = $conn->list_node_device_names($capability, $maxnames[,
349 $flags])
350 Return a list of all host device names currently known to the
351 hypervisor. The names can be used with the
352 "get_node_device_by_name" method. The "capability" parameter
353 allows the list to be restricted to only devices with a particular
354 capability type, and should be left as "undef" if the full list is
355 required. The optional <flags> parameter is currently unused and
356 defaults to 0 if omitted.
357
358 my @devs = $conn->list_all_node_devices($flags)
359 Return a list of all node devices currently known to the
360 hypervisor. The elements in the returned list are instances of the
361 Sys::Virt::NodeDevice class. The $flags parameter can be used to
362 filter the list of returned devices.
363
364 my @ifaces = $conn->list_interfaces()
365 Return a list of all network interfaces currently known to the
366 hypervisor. The elements in the returned list are instances of the
367 Sys::Virt::Interface class. This method requires O(n) RPC calls,
368 so the "list_all_interfaces" method is recommended as a more
369 efficient alternative.
370
371 my $nifaces = $conn->num_of_interfaces()
372 Return the number of running interfaces known to the hypervisor.
373 This can be used as the "maxnames" parameter to
374 "list_interface_names".
375
376 my @names = $conn->list_interface_names($maxnames)
377 Return a list of all interface names currently known to the
378 hypervisor. The names can be used with the "get_interface_by_name"
379 method.
380
381 my @ifaces = $conn->list_defined_interfaces()
382 Return a list of all network interfaces currently known to the
383 hypervisor. The elements in the returned list are instances of the
384 Sys::Virt::Interface class. This method requires O(n) RPC calls,
385 so the "list_all_interfaces" method is recommended as a more
386 efficient alternative.
387
388 my $nifaces = $conn->num_of_defined_interfaces()
389 Return the number of inactive interfaces known to the hypervisor.
390 This can be used as the "maxnames" parameter to
391 "list_defined_interface_names".
392
393 my @names = $conn->list_defined_interface_names($maxnames)
394 Return a list of inactive interface names currently known to the
395 hypervisor. The names can be used with the "get_interface_by_name"
396 method.
397
398 my @ifaces = $conn->list_all_interfaces($flags)
399 Return a list of all interfaces currently known to the hypervisor,
400 whether running or shutoff. The elements in the returned list are
401 instances of the Sys::Virt::Interface class. The $flags parameter
402 can be used to filter the list of returned interfaces.
403
404 my @ifaces = $conn->list_secrets()
405 Return a list of all secrets currently known to the hypervisor. The
406 elements in the returned list are instances of the
407 Sys::Virt::Secret class. This method requires O(n) RPC calls, so
408 the "list_all_secrets" method is recommended as a more efficient
409 alternative.
410
411 my $nuuids = $conn->num_of_secrets()
412 Return the number of secrets known to the hypervisor. This can be
413 used as the "maxuuids" parameter to "list_secrets".
414
415 my @uuids = $conn->list_secret_uuids($maxuuids)
416 Return a list of all secret uuids currently known to the
417 hypervisor. The uuids can be used with the "get_secret_by_uuid"
418 method.
419
420 my @secrets = $conn->list_all_secrets($flags)
421 Return a list of all secrets currently known to the hypervisor. The
422 elements in the returned list are instances of the
423 Sys::Virt::Network class. The $flags parameter can be used to
424 filter the list of returned secrets.
425
426 my @nwfilters = $conn->list_nwfilters()
427 Return a list of all nwfilters currently known to the hypervisor.
428 The elements in the returned list are instances of the
429 Sys::Virt::NWFilter class. This method requires O(n) RPC calls, so
430 the "list_all_nwfilters" method is recommended as a more efficient
431 alternative.
432
433 my $nnwfilters = $conn->num_of_nwfilters()
434 Return the number of running nwfilters known to the hypervisor.
435 This can be used as the "maxids" parameter to
436 "list_nwfilter_names".
437
438 my @filterNames = $conn->list_nwfilter_names($maxnames)
439 Return a list of all nwfilter names currently known to the
440 hypervisor. The names can be used with the "get_nwfilter_by_name"
441 method.
442
443 my @nwfilters = $conn->list_all_nwfilters($flags)
444 Return a list of all nwfilters currently known to the hypervisor.
445 The elements in the returned list are instances of the
446 Sys::Virt::NWFilter class. The $flags parameter is currently
447 unused and defaults to zero.
448
449 my @bindings = $conn->list_all_nwfilter_bindings($flags)
450 Return a list of all nwfilter bindings currently known to the
451 hypervisor. The elements in the returned list are instances of the
452 Sys::Virt::NWFilterBinding class. The $flags parameter is currently
453 unused and defaults to zero.
454
455 $conn->define_save_image_xml($file, $dxml, $flags=0)
456 Update the XML associated with a virtual machine's save image. The
457 $file parameter is the fully qualified path to the save image XML,
458 while $dxml is the new XML document to write. The $flags parameter
459 is currently unused and defaults to zero.
460
461 $xml = $conn->get_save_image_xml_description($file, $flags=1)
462 Retrieve the current XML configuration associated with the virtual
463 machine's save image identified by $file. The $flags parameter
464 accepts the same constants as
465 "Sys::Virt::Domain::managed_save_get_xml_description".
466
467 my $dom = $conn->get_domain_by_name($name)
468 Return the domain with a name of $name. The returned object is an
469 instance of the Sys::Virt::Domain class.
470
471 my $dom = $conn->get_domain_by_id($id)
472 Return the domain with a local id of $id. The returned object is an
473 instance of the Sys::Virt::Domain class.
474
475 my $dom = $conn->get_domain_by_uuid($uuid)
476 Return the domain with a globally unique id of $uuid. The returned
477 object is an instance of the Sys::Virt::Domain class.
478
479 my $net = $conn->get_network_by_name($name)
480 Return the network with a name of $name. The returned object is an
481 instance of the Sys::Virt::Network class.
482
483 my $net = $conn->get_network_by_uuid($uuid)
484 Return the network with a globally unique id of $uuid. The returned
485 object is an instance of the Sys::Virt::Network class.
486
487 my $pool = $conn->get_storage_pool_by_name($name)
488 Return the storage pool with a name of $name. The returned object
489 is an instance of the Sys::Virt::StoragePool class.
490
491 my $pool = $conn->get_storage_pool_by_uuid($uuid)
492 Return the storage pool with a globally unique id of $uuid. The
493 returned object is an instance of the Sys::Virt::StoragePool class.
494
495 my $pool = $conn->get_storage_pool_by_volume($vol)
496 Return the storage pool with a storage volume $vol. The $vol
497 parameter must be an instance of the Sys::Virt::StorageVol class.
498 The returned object is an instance of the Sys::Virt::StoragePool
499 class.
500
501 my $pool = $conn->get_storage_pool_by_target_path($path)
502 Return the storage pool with a target path of $path. The returned
503 object is an instance of the Sys::Virt::StoragePool class.
504
505 my $vol = $conn->get_storage_volume_by_path($path)
506 Return the storage volume with a location of $path. The returned
507 object is an instance of the Sys::Virt::StorageVol class.
508
509 my $vol = $conn->get_storage_volume_by_key($key)
510 Return the storage volume with a globally unique id of $key. The
511 returned object is an instance of the Sys::Virt::StorageVol class.
512
513 my $dev = $conn->get_node_device_by_name($name)
514 Return the node device with a name of $name. The returned object is
515 an instance of the Sys::Virt::NodeDevice class.
516
517 my $dev = $conn->get_node_device_scsihost_by_wwn($wwnn, $wwpn,
518 $flags=0)
519 Return the node device which is a SCSI host identified by $wwnn and
520 $wwpn. The $flags parameter is unused and defaults to zero. The
521 returned object is an instance of the Sys::Virt::NodeDevice class.
522
523 my $iface = $conn->get_interface_by_name($name)
524 Return the interface with a name of $name. The returned object is
525 an instance of the Sys::Virt::Interface class.
526
527 my $iface = $conn->get_interface_by_mac($mac)
528 Return the interface with a MAC address of $mac. The returned
529 object is an instance of the Sys::Virt::Interface class.
530
531 my $sec = $conn->get_secret_by_uuid($uuid)
532 Return the secret with a globally unique id of $uuid. The returned
533 object is an instance of the Sys::Virt::Secret class.
534
535 my $sec = $conn->get_secret_by_usage($usageType, $usageID)
536 Return the secret with a usage type of $usageType, identified by
537 $usageID. The returned object is an instance of the
538 Sys::Virt::Secret class.
539
540 my $nwfilter = $conn->get_nwfilter_by_name($name)
541 Return the domain with a name of $name. The returned object is an
542 instance of the Sys::Virt::NWFilter class.
543
544 my $nwfilter = $conn->get_nwfilter_by_uuid($uuid)
545 Return the nwfilter with a globally unique id of $uuid. The
546 returned object is an instance of the Sys::Virt::NWFilter class.
547
548 my $binding = $conn->get_nwfilter_binding_by_port_dev($name)
549 Return the network filter binding for the port device $name. The
550 returned object is an instance of the Sys::Virt::NWFilterBinding
551 class.
552
553 my $xml = $conn->find_storage_pool_sources($type, $srcspec[, $flags])
554 Probe for available storage pool sources for the pool of type
555 $type. The $srcspec parameter can be "undef", or a parameter to
556 refine the discovery process, for example a server hostname for NFS
557 discovery. The $flags parameter is optional, and if omitted
558 defaults to zero. The returned scalar is an XML document describing
559 the discovered storage pool sources.
560
561 my @stats = $conn->get_all_domain_stats($stats, \@doms=undef,
562 $flags=0);
563 Get a list of all statistics for domains known to the hypervisor.
564 The $stats parameter controls which data fields to return and
565 should be a combination of the DOMAIN STATS FIELD CONSTANTS.
566
567 The optional @doms parameter is a list of Sys::Virt::Domain objects
568 to return stats for. If this is undefined, then all domains will be
569 returned. The $flags method can be used to filter the list of
570 returned domains.
571
572 The return data for the method is a list, one element for each
573 domain. The element will be a hash with two keys, "dom" pointing
574 to an instance of "Sys::Virt::Domain" and "data" pointing to
575 another hash reference containing the actual statistics.
576
577 $conn->interface_change_begin($flags)
578 Begin a transaction for changing the configuration of one or more
579 network interfaces
580
581 $conn->interface_change_commit($flags)
582 Complete a transaction for changing the configuration of one or
583 more network interfaces
584
585 $conn->interface_change_rollback($flags)
586 Abort a transaction for changing the configuration of one or more
587 network interfaces
588
589 $conn->restore_domain($savefile)
590 Recreate a domain from the saved state file given in the $savefile
591 parameter.
592
593 $conn->get_max_vcpus($domtype)
594 Return the maximum number of vcpus that can be configured for a
595 domain of type $domtype
596
597 my $hostname = $conn->get_hostname()
598 Return the name of the host with which this connection is
599 associated.
600
601 my $uri = $conn->get_uri()
602 Return the URI associated with the open connection. This may be
603 different from the URI used when initially connecting to libvirt,
604 when 'auto-probing' or drivers occurrs.
605
606 my $xml = $conn->get_sysinfo()
607 Return an XML documenting representing the host system information,
608 typically obtained from SMBIOS tables.
609
610 my $type = $conn->get_type()
611 Return the type of virtualization backend accessed by this
612 hypervisor object. Currently the only supported type is "Xen".
613
614 my $xml = $conn->domain_xml_from_native($format, $config);
615 Convert the native hypervisor configuration $config which is in
616 format <$format> into libvirrt domain XML. Valid values of $format
617 vary between hypervisor drivers.
618
619 my $config = $conn->domain_xml_to_native($format, $xml)
620 Convert the libvirt domain XML configuration $xml to a native
621 hypervisor configuration in format $format
622
623 my $ver = $conn->get_version()
624 Return the complete version number as a string encoded in the
625 formula "(major * 1000000) + (minor * 1000) + micro".
626
627 my $ver = $conn->get_major_version
628 Return the major version number of the libvirt library.
629
630 my $ver = $conn->get_minor_version
631 Return the minor version number of the libvirt library.
632
633 my $ver = $conn->get_micro_version
634 Return the micro version number of the libvirt library.
635
636 my $ver = $conn->get_library_version
637 Return the version number of the API associated with the active
638 connection. This differs from "get_version" in that if the
639 connection is to a remote libvirtd daemon, it will return the API
640 version of the remote libvirt, rather than the local client.
641
642 $conn->is_secure()
643 Returns a true value if the current connection is secure against
644 network interception. This implies either use of UNIX sockets, or
645 encryption with a TCP stream.
646
647 $conn->is_encrypted()
648 Returns a true value if the current connection data stream is
649 encrypted.
650
651 $conn->is_alive()
652 Returns a true value if the connection is alive, as determined by
653 keep-alive packets or other recent RPC traffic.
654
655 $conn->set_keep_alive($interval, $count)
656 Change the operation of the keep alive protocol to send $count
657 packets spaced $interval seconds apart before considering the
658 connection dead.
659
660 my $info = $con->get_node_info()
661 Returns a hash reference summarising the capabilities of the host
662 node. The elements of the hash are as follows:
663
664 memory
665 The amount of physical memory in the host
666
667 model
668 The model of the CPU, eg x86_64
669
670 cpus
671 The total number of logical CPUs.
672
673 mhz The peak MHZ of the CPU
674
675 nodes
676 The number of NUMA cells
677
678 sockets
679 The number of CPU sockets
680
681 cores
682 The number of cores per socket
683
684 threads
685 The number of threads per core
686
687 NB, more accurate information about the total number of CPUs and
688 those online can be obtained using the "get_node_cpu_map" method.
689
690 my ($totcpus, $onlinemap, $totonline) = $con->get_node_cpu_map();
691 Returns an array containing information about the CPUs available on
692 the host. The first element, "totcpus", specifies the total number
693 of CPUs available to the host regardles of their online stat. The
694 second element, "onlinemap", provides a bitmap detailing which CPUs
695 are currently online. The third element, "totonline", specifies the
696 total number of online CPUs. The values in the bitmap can be
697 extracted using the "unpack" method as follows:
698
699 my @onlinemap = split(//, unpack("b*", $onlinemap));
700
701 my $info = $con->get_node_cpu_stats($cpuNum=-1, $flags=0)
702 Returns a hash reference providing information about the host CPU
703 statistics. If <$cpuNum> is omitted, it defaults to
704 "Sys::Virt::NODE_CPU_STATS_ALL_CPUS" which causes it to return
705 cumulative information for all CPUs in the host. If $cpuNum is zero
706 or larger, it returns information just for the specified number.
707 The $flags parameter is currently unused and defaults to zero. The
708 fields in the returned hash reference are
709
710 kernel
711 The time spent in kernelspace
712
713 user
714 The time spent in userspace
715
716 idle
717 The idle time
718
719 iowait
720 The I/O wait time
721
722 utilization
723 The overall percentage utilization.
724
725 my $info = $con->get_node_memory_stats($cellNum=-1, $flags=0)
726 Returns a hash reference providing information about the host
727 memory statistics. If <$cellNum> is omitted, it defaults to
728 "Sys::Virt::NODE_MEMORY_STATS_ALL_CELLS" which causes it to return
729 cumulative information for all NUMA cells in the host. If $cellNum
730 is zero or larger, it returns information just for the specified
731 number. The $flags parameter is currently unused and defaults to
732 zero. The fields in the returned hash reference are
733
734 total
735 The total memory
736
737 free
738 The free memory
739
740 buffers
741 The memory consumed by buffers
742
743 cached
744 The memory consumed for cache
745
746 my $params = $conn->get_node_memory_parameters($flags=0)
747 Return a hash reference containing the set of memory tunable
748 parameters for the node. The keys in the hash are one of the
749 constants MEMORY PARAMETERS described later. The $flags parameter
750 is currently unused, and defaults to 0 if omitted.
751
752 $conn->set_node_memory_parameters($params, $flags=0)
753 Update the memory tunable parameters for the node. The $params
754 should be a hash reference whose keys are one of the MEMORY
755 PARAMETERS constants. The $flags parameter is currently unused, and
756 defaults to 0 if omitted.
757
758 $info = $conn->get_node_sev_info($flags=0)
759 Get the AMD SEV information for the host. $flags is currently
760 unused and defaults to 0 if omitted. The returned hash contains the
761 following keys:
762
763 Sys::Virt::SEV_CBITPOS
764 The CBit position
765
766 Sys::Virt::SEV_CERT_CHAIN
767 The certificate chain
768
769 Sys::Virt::SEV_PDH
770 Platform diffie-hellman key
771
772 Sys::Virt::SEV_REDUCED_PHYS_BITS
773 The number of physical address bits used by SEV
774
775 $conn->node_suspend_for_duration($target, $duration, $flags=0)
776 Suspend the the host, using mode $target which is one of the NODE
777 SUSPEND constants listed later. The $duration parameter controls
778 how long the node is suspended for before waking up.
779
780 $conn->domain_event_register($callback)
781 Register a callback to received notifications of domain state
782 change events. Only a single callback can be registered with each
783 connection instance. The callback will be invoked with four
784 parameters, an instance of "Sys::Virt" for the connection, an
785 instance of "Sys::Virt::Domain" for the domain changing state, and
786 a "event" and "detail" arguments, corresponding to the event
787 constants defined in the "Sys::Virt::Domain" module. Before
788 discarding the connection object, the callback must be
789 deregistered, otherwise the connection object memory will never be
790 released in garbage collection.
791
792 $conn->domain_event_deregister()
793 Unregister a callback, allowing the connection object to be garbage
794 collected.
795
796 $callback = $conn->domain_event_register_any($dom, $eventID, $callback)
797 Register a callback to received notifications of domain events.
798 The $dom parameter can be "undef" to request events on all known
799 domains, or a specific "Sys::Virt::Domain" object to filter events.
800 The $eventID parameter is one of the EVENT ID constants described
801 later in this document. The $callback is a subroutine reference
802 that will receive the events.
803
804 All callbacks receive a "Sys::Virt" connection as the first
805 parameter and a "Sys::Virt::Domain" object indicating the domain on
806 which the event occurred as the second parameter. Subsequent
807 parameters vary according to the event type
808
809 EVENT_ID_LIFECYCLE
810 Extra "event" and "detail" parameters defining the lifecycle
811 transition that occurred.
812
813 EVENT_ID_REBOOT
814 No extra parameters
815
816 EVENT_ID_RTC_CHANGE
817 The "utcoffset" gives the offset from UTC in seconds
818
819 EVENT_ID_WATCHDOG
820 The "action" defines the action that is taken as a result of
821 the watchdog triggering. One of the WATCHDOG constants
822 described later
823
824 EVENT_ID_IO_ERROR
825 The "srcPath" is the file on the host which had the error. The
826 "devAlias" is the unique device alias from the guest
827 configuration associated with "srcPath". The "action" is the
828 action taken as a result of the error, one of the IO ERROR
829 constants described later
830
831 EVENT_ID_GRAPHICS
832 The "phase" is the stage of the connection, one of the GRAPHICS
833 PHASE constants described later. The "local" and "remote"
834 parameters follow with the details of the local and remote
835 network addresses. The "authScheme" describes how the user was
836 authenticated (if at all). Finally "identities" is an array ref
837 containing authenticated identities for the user, if any.
838
839 The return value is a unique callback ID that must be used when
840 unregistering the event.
841
842 $conn->domain_event_deregister_any($callbackID)
843 Unregister a callback, associated with the $callbackID previously
844 obtained from "domain_event_register_any".
845
846 $callback = $conn->network_event_register_any($net, $eventID,
847 $callback)
848 Register a callback to received notifications of network events.
849 The $net parameter can be "undef" to request events on all known
850 networks, or a specific "Sys::Virt::Network" object to filter
851 events. The $eventID parameter is one of the EVENT ID constants
852 described later in this document. The $callback is a subroutine
853 reference that will receive the events.
854
855 All callbacks receive a "Sys::Virt" connection as the first
856 parameter and a "Sys::Virt::Network" object indicating the network
857 on which the event occurred as the second parameter. Subsequent
858 parameters vary according to the event type
859
860 EVENT_ID_LIFECYCLE
861 Extra "event" and "detail" parameters defining the lifecycle
862 transition that occurred.
863
864 The return value is a unique callback ID that must be used when
865 unregistering the event.
866
867 $conn->network_event_deregister_any($callbackID)
868 Unregister a callback, associated with the $callbackID previously
869 obtained from "network_event_register_any".
870
871 $callback = $conn->storage_pool_event_register_any($pool, $eventID,
872 $callback)
873 Register a callback to received notifications of storage pool
874 events. The $pool parameter can be "undef" to request events on
875 all known storage pools, or a specific "Sys::Virt::StoragePool"
876 object to filter events. The $eventID parameter is one of the EVENT
877 ID constants described later in this document. The $callback is a
878 subroutine reference that will receive the events.
879
880 All callbacks receive a "Sys::Virt" connection as the first
881 parameter and a "Sys::Virt::StoragePool" object indicating the
882 storage pool on which the event occurred as the second parameter.
883 Subsequent parameters vary according to the event type
884
885 EVENT_ID_LIFECYCLE
886 Extra "event" and "detail" parameters defining the lifecycle
887 transition that occurred.
888
889 EVENT_ID_REFRESH
890 No extra parameters.
891
892 The return value is a unique callback ID that must be used when
893 unregistering the event.
894
895 $conn->storage_pool_event_deregister_any($callbackID)
896 Unregister a callback, associated with the $callbackID previously
897 obtained from "storage_pool_event_register_any".
898
899 $callback = $conn->node_device_event_register_any($dev, $eventID,
900 $callback)
901 Register a callback to received notifications of node device
902 events. The $dev parameter can be "undef" to request events on all
903 known node devices, or a specific "Sys::Virt::NodeDevice" object to
904 filter events. The $eventID parameter is one of the EVENT ID
905 constants described later in this document. The $callback is a
906 subroutine reference that will receive the events.
907
908 All callbacks receive a "Sys::Virt" connection as the first
909 parameter and a "Sys::Virt::NodeDevice" object indicating the node
910 device on which the event occurred as the second parameter.
911 Subsequent parameters vary according to the event type
912
913 EVENT_ID_LIFECYCLE
914 Extra "event" and "detail" parameters defining the lifecycle
915 transition that occurred.
916
917 The return value is a unique callback ID that must be used when
918 unregistering the event.
919
920 $conn->node_device_event_deregister_any($callbackID)
921 Unregister a callback, associated with the $callbackID previously
922 obtained from "node_device_event_register_any".
923
924 $callback = $conn->secret_event_register_any($secret, $eventID,
925 $callback)
926 Register a callback to received notifications of secret events.
927 The $secret parameter can be "undef" to request events on all known
928 secrets, or a specific "Sys::Virt::Secret" object to filter events.
929 The $eventID parameter is one of the EVENT ID constants described
930 later in this document. The $callback is a subroutine reference
931 that will receive the events.
932
933 All callbacks receive a "Sys::Virt" connection as the first
934 parameter and a "Sys::Virt::Secret" object indicating the secret on
935 which the event occurred as the second parameter. Subsequent
936 parameters vary according to the event type
937
938 EVENT_ID_LIFECYCLE
939 Extra "event" and "detail" parameters defining the lifecycle
940 transition that occurred.
941
942 EVENT_ID_VALUE_CHANGED
943 No extra parameters.
944
945 The return value is a unique callback ID that must be used when
946 unregistering the event.
947
948 $conn->secret_event_deregister_any($callbackID)
949 Unregister a callback, associated with the $callbackID previously
950 obtained from "secret_event_register_any".
951
952 $conn->register_close_callback($coderef);
953 Register a callback to be invoked when the connection is closed.
954 The callback will be invoked with two parameters, the $conn it was
955 registered against, and the reason for the close event. The reason
956 value will be one of the "CLOSE REASON CONSTANTS" listed later in
957 this document.
958
959 $conn->unregister_close_callback();
960 Remove the previously registered close callback.
961
962 my $xml = $con->baseline_cpu(\@xml, $flags=0)
963 Given an array ref whose elements are XML documents describing host
964 CPUs, compute the baseline CPU model that is operable across all
965 hosts. The XML for the baseline CPU model is returned. The optional
966 $flags parameter can take one of
967
968 Sys::Virt::BASELINE_CPU_EXPAND_FEATURES
969 Expand the CPU definition to list all feature flags, even those
970 implied by the model name.
971
972 Sys::Virt::BASELINE_CPU_MIGRATABLE
973 Only include features which can be live migrated.
974
975 my $xml = $con->baseline_hypervisor_cpu($emulator, $arch, $machine,
976 $virttype, \@xml, $flags=0)
977 Given an array ref whose elements are XML documents describing host
978 CPUs, compute the baseline CPU model that is operable across all
979 hosts. The XML for the baseline CPU model is returned. Either
980 $emulator or $arch must be a valid string referring to an emulator
981 binary or an architecture name respectively. The $machine parameter
982 is an optional name of a guest machine, and $virttype is an
983 optional name of the virtualization type. The optional $flags
984 parameter accepts the same values as "baseline_cpu".
985
986 @names = $con->get_cpu_model_names($arch, $flags=0)
987 Get a list of valid CPU models names for the architecture given by
988 $arch. The $arch value should be one of the architectures listed in
989 the capabilities XML document. The $flags parameter is currently
990 unused and defaults to 0.
991
992 my $info = $con->get_node_security_model()
993 Returns a hash reference summarising the security model of the host
994 node. There are two keys in the hash, "model" specifying the name
995 of the security model (eg 'selinux') and "doi" specifying the
996 'domain of interpretation' for security labels.
997
998 my $xml = $con->get_capabilities();
999 Returns an XML document describing the hypervisor capabilities
1000
1001 my $xml = $con->get_domain_capabilities($emulator, $arch, $machine,
1002 $virttype, flags=0);
1003 Returns an XML document describing the capabilities of the
1004 requested guest configuration. Either $emulator or $arch must be a
1005 valid string referring to an emulator binary or an architecture
1006 name respectively. The $machine parameter is an optional name of a
1007 guest machine, and $virttype is an optional name of the
1008 virtualization type. $flags is unused and defaults to zero.
1009
1010 my $result = $con->compare_cpu($xml, $flags=0);
1011 Checks whether the CPU definition in $xml is compatible with the
1012 current hypervisor connection. This can be used to determine
1013 whether it is safe to migrate a guest to this host. The returned
1014 result is one of the constants listed later The optional $flags
1015 parameter can take one of the following constants
1016
1017 Sys::Virt::COMPARE_CPU_FAIL_INCOMPATIBLE
1018 Raise a fatal error if the CPUs are not compatible, instead of
1019 just returning a special error code.
1020
1021 my $result = $con->compare_hypervisor_cpu($emulator, $arch, $machine,
1022 $virttype, $xml, $flags=0);
1023 Checks whether the CPU definition in $xml is compatible with the
1024 current hypervisor connection. This can be used to determine
1025 whether it is safe to migrate a guest to this host. Either
1026 $emulator or $arch must be a valid string referring to an emulator
1027 binary or an architecture name respectively. The $machine parameter
1028 is an optional name of a guest machine, and $virttype is an
1029 optional name of the virtualization type. The returned result is
1030 one of the constants listed later The optional $flags parameter can
1031 take the same values as the "compare_cpu" method.
1032
1033 $mem = $con->get_node_free_memory();
1034 Returns the current free memory on the host
1035
1036 @mem = $con->get_node_cells_free_memory($start, $end);
1037 Returns the free memory on each NUMA cell between $start and $end.
1038
1039 @pages = $con->get_node_free_pages(\@pagesizes, $start, $end);
1040 Returns information about the number of pages free on each NUMA
1041 cell between $start and $end inclusive. The @pagesizes parameter
1042 should be an arrayref specifying which pages sizes information
1043 should be returned for. Information about supported page sizes is
1044 available in the capabilities XML. The returned array has an
1045 element for each NUMA cell requested. The elements are hash
1046 references with two keys, 'cell' specifies the NUMA cell number and
1047 'pages' specifies the free page information for that cell. The
1048 'pages' value is another hash reference where the keys are the page
1049 sizes and the values are the free count for that size.
1050
1051 $con->node_alloc_pages(\@pages, $start, $end, $flags=0)
1052 Allocate further huge pages for the reserved dev. The <\@pages>
1053 parameter is an array reference with one entry per page size to
1054 allocate for. Each entry is a further array reference where the
1055 first element is the page size and the second element is the page
1056 count. The same number of pages will be allocated on each NUMA node
1057 in the range $start to $end inclusive. The $flags parameter accepts
1058 two contants
1059
1060 Sys::Virt::NODE_ALLOC_PAGES_ADD
1061 The requested number of pages will be added to the existing
1062 huge page reservation.
1063
1064 Sys::Virt::NODE_ALLOC_PAGES_SET
1065 The huge page reservation will be set to exactly the requested
1066 number
1067
1069 The following sets of constants are useful when dealing with APIs in
1070 this package
1071
1072 CONNECTION
1073 When opening a connection the following constants can be used:
1074
1075 Sys::Virt::CONNECT_RO
1076 Request a read-only connection
1077
1078 Sys::Virt::CONNECT_NO_ALIASES
1079 Prevent the resolution of URI aliases
1080
1081 CREDENTIAL TYPES
1082 When providing authentication callbacks, the following constants
1083 indicate the type of credential being requested
1084
1085 Sys::Virt::CRED_AUTHNAME
1086 Identity to act as
1087
1088 Sys::Virt::CRED_USERNAME
1089 Identity to authorize as
1090
1091 Sys::Virt::CRED_CNONCE
1092 Client supplies a nonce
1093
1094 Sys::Virt::CRED_REALM
1095 Authentication realm
1096
1097 Sys::Virt::CRED_ECHOPROMPT
1098 Challenge response non-secret
1099
1100 Sys::Virt::CRED_NOECHOPROMPT
1101 Challenge response secret
1102
1103 Sys::Virt::CRED_PASSPHRASE
1104 Passphrase secret
1105
1106 Sys::Virt::CRED_LANGUAGE
1107 RFC 1766 language code
1108
1109 Sys::Virt::CRED_EXTERNAL
1110 Externally provided credential
1111
1112 CPU COMPARISON CONSTANTS
1113 Sys::Virt::CPU_COMPARE_INCOMPATIBLE
1114 This host is missing one or more CPU features in the CPU
1115 description
1116
1117 Sys::Virt::CPU_COMPARE_IDENTICAL
1118 The host has an identical CPU description
1119
1120 Sys::Virt::CPU_COMPARE_SUPERSET
1121 The host offers a superset of the CPU descriptoon
1122
1123 NODE SUSPEND CONSTANTS
1124 Sys::Virt::NODE_SUSPEND_TARGET_MEM
1125 Suspends to memory (equivalent of S3 on x86 architectures)
1126
1127 Sys::Virt::NODE_SUSPEND_TARGET_DISK
1128 Suspends to disk (equivalent of S5 on x86 architectures)
1129
1130 Sys::Virt::NODE_SUSPEND_TARGET_HYBRID
1131 Suspends to memory and disk (equivalent of S3+S5 on x86
1132 architectures)
1133
1134 NODE VCPU CONSTANTS
1135 Sys::Virt::NODE_CPU_STATS_ALL_CPUS
1136 Request statistics for all CPUs
1137
1138 NODE MEMORY CONSTANTS
1139 Sys::Virt::NODE_MEMORY_STATS_ALL_CELLS
1140 Request statistics for all memory cells
1141
1142 MEMORY PARAMETERS
1143 The following constants are used to name memory parameters of the node
1144
1145 Sys::Virt::NODE_MEMORY_SHARED_FULL_SCANS
1146 How many times all mergeable areas have been scanned.
1147
1148 Sys::Virt::NODE_MEMORY_SHARED_PAGES_SHARED
1149 How many the shared memory pages are being used.
1150
1151 Sys::Virt::NODE_MEMORY_SHARED_PAGES_SHARING
1152 How many sites are sharing the pages
1153
1154 Sys::Virt::NODE_MEMORY_SHARED_PAGES_TO_SCAN
1155 How many present pages to scan before the shared memory service
1156 goes to sleep
1157
1158 Sys::Virt::NODE_MEMORY_SHARED_PAGES_UNSHARED
1159 How many pages unique but repeatedly checked for merging.
1160
1161 Sys::Virt::NODE_MEMORY_SHARED_PAGES_VOLATILE
1162 How many pages changing too fast to be placed in a tree.
1163
1164 Sys::Virt::NODE_MEMORY_SHARED_SLEEP_MILLISECS
1165 How many milliseconds the shared memory service should sleep before
1166 next scan.
1167
1168 Sys::Virt::NODE_MEMORY_SHARED_MERGE_ACROSS_NODES
1169 Whether pages can be merged across NUMA nodes
1170
1171 CLOSE REASON CONSTANTS
1172 The following constants related to the connection close callback,
1173 describe the reason for the closing of the connection.
1174
1175 Sys::Virt::CLOSE_REASON_CLIENT
1176 The client application requested the connection be closed
1177
1178 Sys::Virt::CLOSE_REASON_EOF
1179 End-of-file was encountered reading data from the connection
1180
1181 Sys::Virt::CLOSE_REASON_ERROR
1182 An I/O error was encountered reading/writing data from/to the
1183 connection
1184
1185 Sys::Virt::CLOSE_REASON_KEEPALIVE
1186 The connection keepalive timer triggered due to lack of response
1187 from the server
1188
1189 CPU STATS CONSTANTS
1190 The following constants provide the names of known CPU stats fields
1191
1192 Sys::Virt::NODE_CPU_STATS_IDLE
1193 Time spent idle
1194
1195 Sys::Virt::NODE_CPU_STATS_IOWAIT
1196 Time spent waiting for I/O to complete
1197
1198 Sys::Virt::NODE_CPU_STATS_KERNEL
1199 Time spent executing kernel code
1200
1201 Sys::Virt::NODE_CPU_STATS_USER
1202 Time spent executing user code
1203
1204 Sys::Virt::NODE_CPU_STATS_INTR
1205 Time spent processing interrupts
1206
1207 Sys::Virt::NODE_CPU_STATS_UTILIZATION
1208 Percentage utilization of the CPU.
1209
1210 MEMORY STAS CONSTANTS
1211 The following constants provide the names of known memory stats fields
1212
1213 Sys::Virt::NODE_MEMORY_STATS_BUFFERS
1214 The amount of memory consumed by I/O buffers
1215
1216 Sys::Virt::NODE_MEMORY_STATS_CACHED
1217 The amount of memory consumed by disk cache
1218
1219 Sys::Virt::NODE_MEMORY_STATS_FREE
1220 The amount of free memory
1221
1222 Sys::Virt::NODE_MEMORY_STATS_TOTAL
1223 The total amount of memory
1224
1225 IP address constants
1226 The following constants are used to interpret IP address types
1227
1228 Sys::Virt::IP_ADDR_TYPE_IPV4
1229 An IPv4 address type
1230
1231 Sys::Virt::IP_ADDR_TYPE_IPV6
1232 An IPv6 address type
1233
1235 Hopefully none, but the XS code needs to be audited to ensure it is not
1236 leaking memory.
1237
1239 Daniel P. Berrange <berrange@redhat.com>
1240
1242 Copyright (C) 2006-2009 Red Hat Copyright (C) 2006-2009 Daniel P.
1243 Berrange
1244
1246 This program is free software; you can redistribute it and/or modify it
1247 under the terms of either the GNU General Public License as published
1248 by the Free Software Foundation (either version 2 of the License, or at
1249 your option any later version), or, the Artistic License, as specified
1250 in the Perl README file.
1251
1253 Sys::Virt::Domain, Sys::Virt::Network, Sys::Virt::StoragePool,
1254 Sys::Virt::StorageVol, Sys::Virt::Error, "http://libvirt.org"
1255
1256
1257
1258perl v5.28.1 2019-03-04 Sys::Virt(3)