diff options
author | Richard Jones <rjones@redhat.com> | 2009-04-09 13:19:38 +0100 |
---|---|---|
committer | Richard Jones <rjones@redhat.com> | 2009-04-09 13:19:38 +0100 |
commit | e7eca50046e9a69dac27c0bee832af0a3014e02c (patch) | |
tree | 0d3adfb16768d7068e180dba7cc49c706ece38f3 /perl | |
parent | a2e1d51acda406fd4193f121ac9f879e60cf4302 (diff) | |
download | libguestfs-e7eca50046e9a69dac27c0bee832af0a3014e02c.tar.gz libguestfs-e7eca50046e9a69dac27c0bee832af0a3014e02c.tar.xz libguestfs-e7eca50046e9a69dac27c0bee832af0a3014e02c.zip |
Added Augeas support.
Diffstat (limited to 'perl')
-rw-r--r-- | perl/Guestfs.xs | 138 | ||||
-rw-r--r-- | perl/lib/Sys/Guestfs.pm | 128 |
2 files changed, 266 insertions, 0 deletions
diff --git a/perl/Guestfs.xs b/perl/Guestfs.xs index 3cc47750..99eb3190 100644 --- a/perl/Guestfs.xs +++ b/perl/Guestfs.xs @@ -485,3 +485,141 @@ PREINIT: } free (lines); +void +aug_init (g, root, flags) + guestfs_h *g; + char *root; + int flags; + PPCODE: + if (guestfs_aug_init (g, root, flags) == -1) + croak ("aug_init: %s", last_error); + +void +aug_close (g) + guestfs_h *g; + PPCODE: + if (guestfs_aug_close (g) == -1) + croak ("aug_close: %s", last_error); + +SV * +aug_defvar (g, name, expr) + guestfs_h *g; + char *name; + char *expr; +PREINIT: + int nrnodes; + CODE: + nrnodes = guestfs_aug_defvar (g, name, expr); + if (nrnodes == -1) + croak ("aug_defvar: %s", last_error); + RETVAL = newSViv (nrnodes); + OUTPUT: + RETVAL + +void +aug_defnode (g, name, expr, val) + guestfs_h *g; + char *name; + char *expr; + char *val; +PREINIT: + struct guestfs_int_bool *r; + PPCODE: + r = guestfs_aug_defnode (g, name, expr, val); + if (r == NULL) + croak ("aug_defnode: %s", last_error); + EXTEND (SP, 2); + PUSHs (sv_2mortal (newSViv (r->i))); + PUSHs (sv_2mortal (newSViv (r->b))); + guestfs_free_int_bool (r); + +SV * +aug_get (g, path) + guestfs_h *g; + char *path; +PREINIT: + char *val; + CODE: + val = guestfs_aug_get (g, path); + if (val == NULL) + croak ("aug_get: %s", last_error); + RETVAL = newSVpv (val, 0); + free (val); + OUTPUT: + RETVAL + +void +aug_set (g, path, val) + guestfs_h *g; + char *path; + char *val; + PPCODE: + if (guestfs_aug_set (g, path, val) == -1) + croak ("aug_set: %s", last_error); + +void +aug_insert (g, path, label, before) + guestfs_h *g; + char *path; + char *label; + int before; + PPCODE: + if (guestfs_aug_insert (g, path, label, before) == -1) + croak ("aug_insert: %s", last_error); + +SV * +aug_rm (g, path) + guestfs_h *g; + char *path; +PREINIT: + int nrnodes; + CODE: + nrnodes = guestfs_aug_rm (g, path); + if (nrnodes == -1) + croak ("aug_rm: %s", last_error); + RETVAL = newSViv (nrnodes); + OUTPUT: + RETVAL + +void +aug_mv (g, src, dest) + guestfs_h *g; + char *src; + char *dest; + PPCODE: + if (guestfs_aug_mv (g, src, dest) == -1) + croak ("aug_mv: %s", last_error); + +void +aug_match (g, path) + guestfs_h *g; + char *path; +PREINIT: + char **matches; + int i, n; + PPCODE: + matches = guestfs_aug_match (g, path); + if (matches == NULL) + croak ("aug_match: %s", last_error); + for (n = 0; matches[n] != NULL; ++n) /**/; + EXTEND (SP, n); + for (i = 0; i < n; ++i) { + PUSHs (sv_2mortal (newSVpv (matches[i], 0))); + free (matches[i]); + } + free (matches); + +void +aug_save (g) + guestfs_h *g; + PPCODE: + if (guestfs_aug_save (g) == -1) + croak ("aug_save: %s", last_error); + +void +aug_load (g) + guestfs_h *g; + PPCODE: + if (guestfs_aug_load (g) == -1) + croak ("aug_load: %s", last_error); + diff --git a/perl/lib/Sys/Guestfs.pm b/perl/lib/Sys/Guestfs.pm index 7706ae40..29414662 100644 --- a/perl/lib/Sys/Guestfs.pm +++ b/perl/lib/Sys/Guestfs.pm @@ -112,6 +112,134 @@ image). This is equivalent to the qemu parameter C<-drive file=filename>. +=item $h->aug_close (); + +Close the current Augeas handle and free up any resources +used by it. After calling this, you have to call +C<$h-E<gt>aug_init> again before you can use any other +Augeas functions. + +=item ($nrnodes, $created) = $h->aug_defnode (name, expr, val); + +Defines a variable C<name> whose value is the result of +evaluating C<expr>. + +If C<expr> evaluates to an empty nodeset, a node is created, +equivalent to calling C<$h-E<gt>aug_set> C<expr>, C<value>. +C<name> will be the nodeset containing that single node. + +On success this returns a pair containing the +number of nodes in the nodeset, and a boolean flag +if a node was created. + +=item $nrnodes = $h->aug_defvar (name, expr); + +Defines an Augeas variable C<name> whose value is the result +of evaluating C<expr>. If C<expr> is NULL, then C<name> is +undefined. + +On success this returns the number of nodes in C<expr>, or +C<0> if C<expr> evaluates to something which is not a nodeset. + +=item $val = $h->aug_get (path); + +Look up the value associated with C<path>. If C<path> +matches exactly one node, the C<value> is returned. + +=item $h->aug_init (root, flags); + +Create a new Augeas handle for editing configuration files. +If there was any previous Augeas handle associated with this +guestfs session, then it is closed. + +You must call this before using any other C<$h-E<gt>aug_*> +commands. + +C<root> is the filesystem root. C<root> must not be NULL, +use C</> instead. + +The flags are the same as the flags defined in +E<lt>augeas.hE<gt>, the logical I<or> of the following +integers: + +=over 4 + +=item 1 C<AUG_SAVE_BACKUP> + +Keep the original file with a C<.augsave> extension. + +=item 2 C<AUG_SAVE_NEWFILE> + +Save changes into a file with extension C<.augnew>, and +do not overwrite original. Overrides C<AUG_SAVE_BACKUP>. + +=item 4 C<AUG_TYPE_CHECK> + +Typecheck lenses (can be expensive). + +=item 8 C<AUG_NO_STDINC> + +Do not use standard load path for modules. + +=item 16 C<AUG_SAVE_NOOP> + +Make save a no-op, just record what would have been changed. + +=item 32 C<AUG_NO_LOAD> + +Do not load the tree in C<$h-E<gt>aug_init>. + +=back + +To close the handle, you can call C<$h-E<gt>aug_close>. + +To find out more about Augeas, see L<http://augeas.net/>. + +=item $h->aug_insert (path, label, before); + +Create a new sibling C<label> for C<path>, inserting it into +the tree before or after C<path> (depending on the boolean +flag C<before>). + +C<path> must match exactly one existing node in the tree, and +C<label> must be a label, ie. not contain C</>, C<*> or end +with a bracketed index C<[N]>. + +=item $h->aug_load (); + +Load files into the tree. + +See C<aug_load> in the Augeas documentation for the full gory +details. + +=item @matches = $h->aug_match (path); + +Returns a list of paths which match the path expression C<path>. +The returned paths are sufficiently qualified so that they match +exactly one node in the current tree. + +=item $h->aug_mv (src, dest); + +Move the node C<src> to C<dest>. C<src> must match exactly +one node. C<dest> is overwritten if it exists. + +=item $nrnodes = $h->aug_rm (path); + +Remove C<path> and all of its children. + +On success this returns the number of entries which were removed. + +=item $h->aug_save (); + +This writes all pending changes to disk. + +The flags which were passed to C<$h-E<gt>aug_init> affect exactly +how files are saved. + +=item $h->aug_set (path, val); + +Set the value associated with C<path> to C<value>. + =item $content = $h->cat (path); Return the contents of the file named C<path>. |