ruby: Translate C examples into Ruby and include documentation.
[libguestfs.git] / ruby / examples / inspect_vm.rb
diff --git a/ruby/examples/inspect_vm.rb b/ruby/examples/inspect_vm.rb
new file mode 100644 (file)
index 0000000..032dec4
--- /dev/null
@@ -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