X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=python%2Fguestfs.py;h=0bc041e6300a99f406dc68fbc709a10bcbb9e320;hp=1596bcdb002a7b41ab81a6a01b501e3a38161eec;hb=bcb3fc0c3336c05e9ecbbfb25c7c31b42bd3e32e;hpb=8c3b820c2b687345448e3d74a7101b07ff32688e diff --git a/python/guestfs.py b/python/guestfs.py index 1596bcd..0bc041e 100644 --- a/python/guestfs.py +++ b/python/guestfs.py @@ -78,6 +78,87 @@ class GuestFS: def __del__ (self): libguestfsmod.close (self._o) + def test0 (self, str, optstr, strlist, b, integer, filein, fileout): + return libguestfsmod.test0 (self._o, str, optstr, strlist, b, integer, filein, fileout) + + def test0rint (self, val): + return libguestfsmod.test0rint (self._o, val) + + def test0rinterr (self): + return libguestfsmod.test0rinterr (self._o) + + def test0rint64 (self, val): + return libguestfsmod.test0rint64 (self._o, val) + + def test0rint64err (self): + return libguestfsmod.test0rint64err (self._o) + + def test0rbool (self, val): + return libguestfsmod.test0rbool (self._o, val) + + def test0rboolerr (self): + return libguestfsmod.test0rboolerr (self._o) + + def test0rconststring (self, val): + return libguestfsmod.test0rconststring (self._o, val) + + def test0rconststringerr (self): + return libguestfsmod.test0rconststringerr (self._o) + + def test0rstring (self, val): + return libguestfsmod.test0rstring (self._o, val) + + def test0rstringerr (self): + return libguestfsmod.test0rstringerr (self._o) + + def test0rstringlist (self, val): + return libguestfsmod.test0rstringlist (self._o, val) + + def test0rstringlisterr (self): + return libguestfsmod.test0rstringlisterr (self._o) + + def test0rintbool (self, val): + return libguestfsmod.test0rintbool (self._o, val) + + def test0rintboolerr (self): + return libguestfsmod.test0rintboolerr (self._o) + + def test0rpvlist (self, val): + return libguestfsmod.test0rpvlist (self._o, val) + + def test0rpvlisterr (self): + return libguestfsmod.test0rpvlisterr (self._o) + + def test0rvglist (self, val): + return libguestfsmod.test0rvglist (self._o, val) + + def test0rvglisterr (self): + return libguestfsmod.test0rvglisterr (self._o) + + def test0rlvlist (self, val): + return libguestfsmod.test0rlvlist (self._o, val) + + def test0rlvlisterr (self): + return libguestfsmod.test0rlvlisterr (self._o) + + def test0rstat (self, val): + return libguestfsmod.test0rstat (self._o, val) + + def test0rstaterr (self): + return libguestfsmod.test0rstaterr (self._o) + + def test0rstatvfs (self, val): + return libguestfsmod.test0rstatvfs (self._o, val) + + def test0rstatvfserr (self): + return libguestfsmod.test0rstatvfserr (self._o) + + def test0rhashtable (self, val): + return libguestfsmod.test0rhashtable (self._o, val) + + def test0rhashtableerr (self): + return libguestfsmod.test0rhashtableerr (self._o) + def launch (self): u"""Internally libguestfs is implemented by running a virtual machine using qemu(1). @@ -116,7 +197,13 @@ class GuestFS: to modify the image). This is equivalent to the qemu parameter "-drive - file=filename". + file=filename,cache=off". + + Note that this call checks for the existence of + "filename". This stops you from specifying other types + of drive which are supported by qemu such as "nbd:" and + "http:" URLs. To specify those, use the general + "g.config" call instead. """ return libguestfsmod.add_drive (self._o, filename) @@ -126,9 +213,37 @@ class GuestFS: This is equivalent to the qemu parameter "-cdrom filename". + + Note that this call checks for the existence of + "filename". This stops you from specifying other types + of drive which are supported by qemu such as "nbd:" and + "http:" URLs. To specify those, use the general + "g.config" call instead. """ return libguestfsmod.add_cdrom (self._o, filename) + def add_drive_ro (self, filename): + u"""This adds a drive in snapshot mode, making it + effectively read-only. + + Note that writes to the device are allowed, and will be + seen for the duration of the guestfs handle, but they + are written to a temporary file which is discarded as + soon as the guestfs handle is closed. We don't currently + have any method to enable changes to be committed, + although qemu can support this. + + This is equivalent to the qemu parameter "-drive + file=filename,snapshot=on". + + Note that this call checks for the existence of + "filename". This stops you from specifying other types + of drive which are supported by qemu such as "nbd:" and + "http:" URLs. To specify those, use the general + "g.config" call instead. + """ + return libguestfsmod.add_drive_ro (self._o, filename) + def config (self, qemuparam, qemuvalue): u"""This can be used to add arbitrary qemu command line parameters of the form "-param value". Actually it's not @@ -152,10 +267,6 @@ class GuestFS: You can also override this by setting the "LIBGUESTFS_QEMU" environment variable. - The string "qemu" is stashed in the libguestfs handle, - so the caller must make sure it remains valid for the - lifetime of the handle. - Setting "qemu" to "NULL" restores the default qemu binary. """ @@ -176,10 +287,6 @@ class GuestFS: The default is "$libdir/guestfs" unless overridden by setting "LIBGUESTFS_PATH" environment variable. - The string "path" is stashed in the libguestfs handle, - so the caller must make sure it remains valid for the - lifetime of the handle. - Setting "path" to "NULL" restores the default path. """ return libguestfsmod.set_path (self._o, path) @@ -192,6 +299,26 @@ class GuestFS: """ return libguestfsmod.get_path (self._o) + def set_append (self, append): + u"""This function is used to add additional options to the + guest kernel command line. + + The default is "NULL" unless overridden by setting + "LIBGUESTFS_APPEND" environment variable. + + Setting "append" to "NULL" means *no* additional options + are passed (libguestfs always adds a few of its own). + """ + return libguestfsmod.set_append (self._o, append) + + def get_append (self): + u"""Return the additional kernel options which are added to + the guest kernel command line. + + If "NULL" then no options are added. + """ + return libguestfsmod.get_append (self._o) + def set_autosync (self, autosync): u"""If "autosync" is true, this enables autosync. Libguestfs will make a best effort attempt to run "g.umount_all" @@ -279,6 +406,15 @@ class GuestFS: """ return libguestfsmod.set_ready (self._o) + def end_busy (self): + u"""This sets the state to "READY", or if in "CONFIG" then + it leaves the state as is. This is only used when + implementing actions using the low-level API. + + For more information on states, see guestfs(3). + """ + return libguestfsmod.end_busy (self._o) + def mount (self, device, mountpoint): u"""Mount a guest disk at a position in the filesystem. Block devices are named "/dev/sda", "/dev/sdb" and so @@ -700,7 +836,7 @@ class GuestFS: def mkfs (self, fstype, device): u"""This creates a filesystem on "device" (usually a - partition of LVM logical volume). The filesystem type is + partition or LVM logical volume). The filesystem type is "fstype", for example "ext3". """ return libguestfsmod.mkfs (self._o, fstype, device) @@ -729,6 +865,8 @@ class GuestFS: you would pass "lines" as a single element list, when the single element being the string "," (comma). + See also: "g.sfdisk_l", "g.sfdisk_N" + This command is dangerous. Without careful use you can easily destroy all your data. """ @@ -743,6 +881,11 @@ class GuestFS: calculated using "strlen" (so in this case the content cannot contain embedded ASCII NULs). + *NB.* Owing to a bug, writing content containing ASCII + NUL characters does *not* work, even if the length is + specified. We hope to resolve this bug in a future + version. In the meantime use "g.upload". + Because of the message protocol, there is a transfer limit of somewhere between 2MB and 4MB. To transfer large files you should use FTP. @@ -804,7 +947,16 @@ class GuestFS: The single parameter is an argv-style list of arguments. The first element is the name of the program to run. Subsequent elements are parameters. The list must be - non-empty (ie. must contain a program name). + non-empty (ie. must contain a program name). Note that + the command runs directly, and is *not* invoked via the + shell (see "g.sh"). + + The return value is anything printed to *stdout* by the + command. + + If the command returns a non-zero exit status, then this + function returns an error message. The error message + string is the content of *stderr* from the command. The $PATH environment variable will contain at least "/usr/bin" and "/bin". If you require a program from @@ -816,6 +968,10 @@ class GuestFS: the correct places. It is the caller's responsibility to ensure all filesystems that are needed are mounted at the right locations. + + Because of the message protocol, there is a transfer + limit of somewhere between 2MB and 4MB. To transfer + large files you should use FTP. """ return libguestfsmod.command (self._o, arguments) @@ -823,7 +979,13 @@ class GuestFS: u"""This is the same as "g.command", but splits the result into a list of lines. + See also: "g.sh_lines" + This function returns a list of strings. + + Because of the message protocol, there is a transfer + limit of somewhere between 2MB and 4MB. To transfer + large files you should use FTP. """ return libguestfsmod.command_lines (self._o, arguments) @@ -1180,6 +1342,8 @@ class GuestFS: *not* enough to securely wipe the device). It should be sufficient to remove any partition tables, filesystem superblocks and so on. + + See also: "g.scrub_device". """ return libguestfsmod.zero (self._o, device) @@ -1242,3 +1406,301 @@ class GuestFS: """ return libguestfsmod.ping_daemon (self._o) + def equal (self, file1, file2): + u"""This compares the two files "file1" and "file2" and + returns true if their content is exactly equal, or false + otherwise. + + The external cmp(1) program is used for the comparison. + """ + return libguestfsmod.equal (self._o, file1, file2) + + def strings (self, path): + u"""This runs the strings(1) command on a file and returns + the list of printable strings found. + + This function returns a list of strings. + + Because of the message protocol, there is a transfer + limit of somewhere between 2MB and 4MB. To transfer + large files you should use FTP. + """ + return libguestfsmod.strings (self._o, path) + + def strings_e (self, encoding, path): + u"""This is like the "g.strings" command, but allows you to + specify the encoding. + + See the strings(1) manpage for the full list of + encodings. + + Commonly useful encodings are "l" (lower case L) which + will show strings inside Windows/x86 files. + + The returned strings are transcoded to UTF-8. + + This function returns a list of strings. + + Because of the message protocol, there is a transfer + limit of somewhere between 2MB and 4MB. To transfer + large files you should use FTP. + """ + return libguestfsmod.strings_e (self._o, encoding, path) + + def hexdump (self, path): + u"""This runs "hexdump -C" on the given "path". The result + is the human-readable, canonical hex dump of the file. + + Because of the message protocol, there is a transfer + limit of somewhere between 2MB and 4MB. To transfer + large files you should use FTP. + """ + return libguestfsmod.hexdump (self._o, path) + + def zerofree (self, device): + u"""This runs the *zerofree* program on "device". This + program claims to zero unused inodes and disk blocks on + an ext2/3 filesystem, thus making it possible to + compress the filesystem more effectively. + + You should not run this program if the filesystem is + mounted. + + It is possible that using this program can damage the + filesystem or data on the filesystem. + """ + return libguestfsmod.zerofree (self._o, device) + + def pvresize (self, device): + u"""This resizes (expands or shrinks) an existing LVM + physical volume to match the new size of the underlying + device. + """ + return libguestfsmod.pvresize (self._o, device) + + def sfdisk_N (self, device, n, cyls, heads, sectors, line): + u"""This runs sfdisk(8) option to modify just the single + partition "n" (note: "n" counts from 1). + + For other parameters, see "g.sfdisk". You should usually + pass 0 for the cyls/heads/sectors parameters. + + This command is dangerous. Without careful use you can + easily destroy all your data. + """ + return libguestfsmod.sfdisk_N (self._o, device, n, cyls, heads, sectors, line) + + def sfdisk_l (self, device): + u"""This displays the partition table on "device", in the + human-readable output of the sfdisk(8) command. It is + not intended to be parsed. + """ + return libguestfsmod.sfdisk_l (self._o, device) + + def sfdisk_kernel_geometry (self, device): + u"""This displays the kernel's idea of the geometry of + "device". + + The result is in human-readable format, and not designed + to be parsed. + """ + return libguestfsmod.sfdisk_kernel_geometry (self._o, device) + + def sfdisk_disk_geometry (self, device): + u"""This displays the disk geometry of "device" read from + the partition table. Especially in the case where the + underlying block device has been resized, this can be + different from the kernel's idea of the geometry (see + "g.sfdisk_kernel_geometry"). + + The result is in human-readable format, and not designed + to be parsed. + """ + return libguestfsmod.sfdisk_disk_geometry (self._o, device) + + def vg_activate_all (self, activate): + u"""This command activates or (if "activate" is false) + deactivates all logical volumes in all volume groups. If + activated, then they are made known to the kernel, ie. + they appear as "/dev/mapper" devices. If deactivated, + then those devices disappear. + + This command is the same as running "vgchange -a y|n" + """ + return libguestfsmod.vg_activate_all (self._o, activate) + + def vg_activate (self, activate, volgroups): + u"""This command activates or (if "activate" is false) + deactivates all logical volumes in the listed volume + groups "volgroups". If activated, then they are made + known to the kernel, ie. they appear as "/dev/mapper" + devices. If deactivated, then those devices disappear. + + This command is the same as running "vgchange -a y|n + volgroups..." + + Note that if "volgroups" is an empty list then all + volume groups are activated or deactivated. + """ + return libguestfsmod.vg_activate (self._o, activate, volgroups) + + def lvresize (self, device, mbytes): + u"""This resizes (expands or shrinks) an existing LVM + logical volume to "mbytes". When reducing, data in the + reduced part is lost. + """ + return libguestfsmod.lvresize (self._o, device, mbytes) + + def resize2fs (self, device): + u"""This resizes an ext2 or ext3 filesystem to match the + size of the underlying device. + + *Note:* It is sometimes required that you run + "g.e2fsck_f" on the "device" before calling this + command. For unknown reasons "resize2fs" sometimes gives + an error about this and sometimes not. In any case, it + is always safe to call "g.e2fsck_f" before calling this + function. + """ + return libguestfsmod.resize2fs (self._o, device) + + def find (self, directory): + u"""This command lists out all files and directories, + recursively, starting at "directory". It is essentially + equivalent to running the shell command "find directory + -print" but some post-processing happens on the output, + described below. + + This returns a list of strings *without any prefix*. + Thus if the directory structure was: + + /tmp/a + /tmp/b + /tmp/c/d + + then the returned list from "g.find" "/tmp" would be 4 + elements: + + a + b + c + c/d + + If "directory" is not a directory, then this command + returns an error. + + The returned list is sorted. + + This function returns a list of strings. + """ + return libguestfsmod.find (self._o, directory) + + def e2fsck_f (self, device): + u"""This runs "e2fsck -p -f device", ie. runs the ext2/ext3 + filesystem checker on "device", noninteractively ("-p"), + even if the filesystem appears to be clean ("-f"). + + This command is only needed because of "g.resize2fs" + (q.v.). Normally you should use "g.fsck". + """ + return libguestfsmod.e2fsck_f (self._o, device) + + def sleep (self, secs): + u"""Sleep for "secs" seconds. + """ + return libguestfsmod.sleep (self._o, secs) + + def ntfs_3g_probe (self, rw, device): + u"""This command runs the ntfs-3g.probe(8) command which + probes an NTFS "device" for mountability. (Not all NTFS + volumes can be mounted read-write, and some cannot be + mounted at all). + + "rw" is a boolean flag. Set it to true if you want to + test if the volume can be mounted read-write. Set it to + false if you want to test if the volume can be mounted + read-only. + + The return value is an integer which 0 if the operation + would succeed, or some non-zero value documented in the + ntfs-3g.probe(8) manual page. + """ + return libguestfsmod.ntfs_3g_probe (self._o, rw, device) + + def sh (self, command): + u"""This call runs a command from the guest filesystem via + the guest's "/bin/sh". + + This is like "g.command", but passes the command to: + + /bin/sh -c "command" + + Depending on the guest's shell, this usually results in + wildcards being expanded, shell expressions being + interpolated and so on. + + All the provisos about "g.command" apply to this call. + """ + return libguestfsmod.sh (self._o, command) + + def sh_lines (self, command): + u"""This is the same as "g.sh", but splits the result into a + list of lines. + + See also: "g.command_lines" + + This function returns a list of strings. + """ + return libguestfsmod.sh_lines (self._o, command) + + def glob_expand (self, pattern): + u"""This command searches for all the pathnames matching + "pattern" according to the wildcard expansion rules used + by the shell. + + If no paths match, then this returns an empty list + (note: not an error). + + It is just a wrapper around the C glob(3) function with + flags "GLOB_MARK|GLOB_BRACE". See that manual page for + more details. + + This function returns a list of strings. + """ + return libguestfsmod.glob_expand (self._o, pattern) + + def scrub_device (self, device): + u"""This command writes patterns over "device" to make data + retrieval more difficult. + + It is an interface to the scrub(1) program. See that + manual page for more details. + + This command is dangerous. Without careful use you can + easily destroy all your data. + """ + return libguestfsmod.scrub_device (self._o, device) + + def scrub_file (self, file): + u"""This command writes patterns over a file to make data + retrieval more difficult. + + The file is *removed* after scrubbing. + + It is an interface to the scrub(1) program. See that + manual page for more details. + """ + return libguestfsmod.scrub_file (self._o, file) + + def scrub_freespace (self, dir): + u"""This command creates the directory "dir" and then fills + it with files until the filesystem is full, and scrubs + the files as for "g.scrub_file", and deletes them. The + intention is to scrub any free space on the partition + containing "dir". + + It is an interface to the scrub(1) program. See that + manual page for more details. + """ + return libguestfsmod.scrub_freespace (self._o, dir) +