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.