Augeas, herramienta para manejo de archivos de configuración

Augeas es una aplicación de código abierto( escrita en C) la cual permite administrar configuraciones, que mapean el sistema de archivos a un árbol XML el cual puede ser consumido de forma bidireccional.

Como parte de sus herramientas esta augtool, la cual es una aplicación que nos permite modificar los archivos de configuración desde la linea de comandos para poder ser utilizada es necesario instalar el paquete de augeas-tools.

Instalacion usando puppet

electrocucaracha@precise64:~$ cat <site.pp
> package { 'augeas-tools':
>   ensure => installed,
> }
> EOL
electrocucaracha@precise64:~$ sudo puppet apply site.pp
notice: /Stage[main]//Package[augeas-tools]/ensure: ensure changed 'purged' to
present'
notice: Finished catalog run in 6.92 seconds

Para poder realizar modificaciones de manera segura es necesario crear un sandbox el cual nos servirá como respaldo, para ello es necesario declarar la variable de entorno AUGEAS_ROOT.

electrocucaracha@precise64:~$ export AUGEAS_ROOT=/tmp/augeas-sandbox
electrocucaracha@precise64:~$ mkdir $AUGEAS_ROOT
electrocucaracha@precise64:~$ sudo cp -pr /etc $AUGEAS_ROOT
electrocucaracha@precise64:~$ sudo chown -R $(id -nu):$(id -ng) $AUGEAS_ROOT

Augtool es una herramienta interactiva, la cual una vez iniciada permite ejecutar una serie de comandos

electrocucaracha@precise64:~$ augtool -b
augtool> help
Commands:

    quit       - exit the program
    clear      - clear the value of a node
    defnode    - set a variable, possibly creating a new node
    defvar     - set a variable
    get        - get the value of a node
    ins        - insert new node
    insert     - insert new node (alias of 'ins')
    load       - (re)load files under /files
    ls         - list children of a node
    match      - print matches for a path expression
    mv         - move a subtree
    move       - move a subtree (alias of 'mv')
    print      - print a subtree
    dump-xml   - print a subtree as XML
    rm         - delete nodes and subtrees
    save       - save all pending changes
    set        - set the value of a node
    setm       - set the value of multiple nodes
    clearm     - clear the value of multiple nodes
    span       - Print information get the filename, label and value position in the text of this node
    help       - print help

Type 'help ' for more information on a command

Como primer ejemplo, cambiaremos el valor de IP para la maquina en cuestión. Cuando se inicia augtool con el argumento de -b, nos permite mantener un archivo de respaldo con la extension de .augsave.

augtool> ls /files/etc/hosts/1
ipaddr = 127.0.0.1
canonical = localhost
augtool> set /files/etc/hosts/1/ipaddr 192.168.0.1
augtool> save
Saved 1 file(s)
augtool> print /files/etc/hosts/1/ipaddr
/files/etc/hosts/1/ipaddr = "192.168.0.1"

La herramienta indexa cada entrada del archivo de /etc/hosts secuencialmente iniciando desde 1. Por otra parte el comando set, asigna el valor a un nodo especifico y en caso de no existir lo crea, también existe el comando ins que sirve para crear un nodo y permite tener mejor control. También existen formas para buscar algún valor en particular

augtool> match /files/etc/hosts/*/ipaddr 192.168.0.1
/files/etc/hosts/1/ipaddr

Por ultimo podemos comparar los cambios que hasta el momento hemos hecho en el archivo de configuración. Para ello haremos la comparación contra el archivo de respaldo que automáticamente se ha generado

augtool> quit
electrocucaracha@precise64:~$ cd ${AUGEAS_ROOT} && diff -u ./etc/hosts ./etc/hosts.augsave
--- ./etc/hosts 2014-05-31 20:57:58.680250336 +0000
+++ ./etc/hosts.augsave 2012-09-14 05:35:17.897584251 +0000
@@ -1,4 +1,4 @@
-192.168.0.1    localhost
+127.0.0.1      localhost
 127.0.1.1      precise64

 # The following lines are desirable for IPv6 capable hosts

Para mas ejemplos e información de esta herramienta se puede encontrar una guía inicial en su sitio oficial.