1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
/* Example showing how to inspect a virtual machine disk. */
package main
import (
"fmt"
"os"
"libguestfs.org/guestfs"
)
func main() {
if len(os.Args) < 2 {
panic ("usage: inspect-vm disk.img")
}
disk := os.Args[1]
g, errno := guestfs.Create ()
if errno != nil {
panic (fmt.Sprintf ("could not create handle: %s", errno))
}
/* Attach the disk image read-only to libguestfs. */
optargs := guestfs.OptargsAdd_drive{
Format_is_set: true,
Format: "raw",
Readonly_is_set: true,
Readonly: true,
}
if err := g.Add_drive (disk, &optargs); err != nil {
panic (err)
}
/* Run the libguestfs back-end. */
if err := g.Launch (); err != nil {
panic (err)
}
/* Ask libguestfs to inspect for operating systems. */
roots, err := g.Inspect_os ()
if err != nil {
panic (err)
}
if len(roots) == 0 {
panic ("inspect-vm: no operating systems found")
}
for _, root := range roots {
fmt.Printf ("Root device: %s\n", root)
/* Print basic information about the operating system. */
s, _ := g.Inspect_get_product_name (root)
fmt.Printf (" Product name: %s\n", s)
major, _ := g.Inspect_get_major_version (root)
minor, _ := g.Inspect_get_minor_version (root)
fmt.Printf (" Version: %d.%d\n", major, minor)
s, _ = g.Inspect_get_type (root)
fmt.Printf (" Type: %s\n", s)
s, _ = g.Inspect_get_distro (root)
fmt.Printf (" Distro: %s\n", s)
/* XXX Incomplete example. Sorting the keys by length
* is unnecessarily hard in golang.
*/
}
}
|