diff options
Diffstat (limited to 'ruby/examples/inspect_vm.rb')
-rw-r--r-- | ruby/examples/inspect_vm.rb | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/ruby/examples/inspect_vm.rb b/ruby/examples/inspect_vm.rb new file mode 100644 index 00000000..032dec4f --- /dev/null +++ b/ruby/examples/inspect_vm.rb @@ -0,0 +1,59 @@ +# Example showing how to inspect a virtual machine disk. + +require 'guestfs' + +if ARGV.length == 0 + puts "usage: inspect_vm disk.img" + exit 1 +end +disk = ARGV[0] + +g = Guestfs::Guestfs.new() + +# Attach the disk image read-only to libguestfs. +g.add_drive_opts(disk, :readonly => 1) + +# Run the libguestfs back-end. +g.launch() + +# Ask libguestfs to inspect for operating systems. +roots = g.inspect_os() +if roots.length == 0 + puts "inspect_vm: no operating systems found" + exit 1 +end + +for root in roots do + printf("Root device: %s\n", root) + + # Print basic information about the operating system. + printf(" Product name: %s\n", g.inspect_get_product_name(root)) + printf(" Version: %d.%d\n", + g.inspect_get_major_version(root), + g.inspect_get_minor_version(root)) + printf(" Type: %s\n", g.inspect_get_type(root)) + printf(" Distro: %s\n", g.inspect_get_distro(root)) + + # Mount up the disks, like guestfish -i. + # + # Sort keys by length, shortest first, so that we end up + # mounting the filesystems in the correct order. + mps = g.inspect_get_mountpoints(root) + mps = mps.sort {|a,b| a[0].length <=> b[0].length} + for mp in mps do + g.mount_ro(mp[1], mp[0]) + end + + # If /etc/issue.net file exists, print up to 3 lines. + filename = "/etc/issue.net" + if g.is_file filename then + printf("--- %s ---\n", filename) + lines = g.head_n(3, filename) + for line in lines do + puts line + end + end + + # Unmount everything. + g.umount_all() +end |