File: inspect_vm.rb

package info (click to toggle)
libguestfs 1%3A1.18.1-1%2Bdeb7u3
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 49,156 kB
  • sloc: ansic: 282,408; ml: 22,707; sh: 16,121; perl: 5,946; java: 5,047; cs: 4,329; makefile: 3,191; haskell: 2,564; erlang: 1,510; python: 1,502; xml: 509; ruby: 217; pascal: 142; cpp: 11
file content (63 lines) | stat: -rw-r--r-- 1,586 bytes parent folder | download | duplicates (5)
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
# 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
    begin
      g.mount_ro(mp[1], mp[0])
    rescue Guestfs::Error => msg
      printf("%s (ignored)\n", msg)
    end
  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