PICA: Perl Installation and Configuration Agent: Una soluci�n inteligente para administraci�n de sistemas | ||
---|---|---|
Anterior | Siguiente |
Como dijimos al principio, todos los ficheros de configuraci�n y de distribuci�n de PICA se preprocesan antes de pasar por el analizador sint�ctico. Este componente es uno de los puntos m�s importantes de PICA, porque es el que le da gran parte de su flexibilidad. Es f�cil de usar y entender y da unas posibilidades a la hora de tratar los ficheros a distribuir que, al menos de forma tan sencilla, no hemos encontrado en ninguna otra herramienta.
El preprocesador es una funci�n escrita en Perl que hace las sustituciones necesarias en el fichero, generando uno nuevo ya preprocesado. Es muy parecido al preprocesador de C, pero con algunas diferencias importantes:
Hay dos primitivas para incluir programas en Perl, para generar din�micamente partes de los ficheros.
Las expresiones que ponemos en las condiciones y similares son Perl puro (que se eval�an), que pueden consultar el espacio de nombres de la aplicaci�n para consultar ciertas variables del estado interno, como el fichero o la m�quina actual que se est�n procesando, etc.
La lista completa de opciones que nos da el preprocesador es:
Una directiva #if/#elsif/#else/#fi para condiciones simples. En estas condiciones podemos poner expresiones gen�ricas en Perl.
Una directiva #include para incluir ficheros (que ser�n procesados recursivamente), como en el caso del C.
Una directiva #perl/#lrep para generar din�micamente partes del fichero a distribuir. Lo que se devuelva en el entorno #perl/#lrep quedar� en el fichero final a copiar.
Una directiva <#/#> que funciona igual que la anterior, pero es una versi�n reducida, m�s c�moda, para usar en una sola l�nea.
Veamos un ejemplo del preprocesador de PICA en acci�n, con uno de los ficheros de ejemplo que vienen en la distribuci�n oficial:
Ejemplo 11. Ejemplo de fichero de distribuci�n de PICA
Well, this is just a test file to see if it worked... The value of the (local) variable myvar is '<# $myvar #>' The value of the (local) variable mythirdvar is '<# $mythirdvar #>' $myvar is <# ($myvar lt $mythirdvar)?'less':'greater' #> than $mythirdvar... The crypt'ed version of $mythirdvar is '<# crypt $mythirdvar, 'aa' #>'. Now, a little list from 0 to <# $limit #>: #perl my @result; for (my $i = 0; $i < $limit; ++$i) { push @result, "$i\n"; } @result; #lrep |
Suponiendo una definici�n como la siguiente:
Ejemplo 12. Ejemplo de definici�n del fichero pica-rules en objects.conf
file pica-rules { path = '<#$picaroot#>/rules'; # Esto tambi�n se # preprocesar� source = 'pica-rules'; vars { myvar = 'foo'; limit = '2'; mythirdvar = 'enough'; } } |
el resultado del fichero, ya preprocesado, ser�a:
Ejemplo 13. Fichero preprocesado por PPP
Well, this is just a test file to see if it worked...
The value of the (local) variable myvar is 'foo'
The value of the (local) variable mythirdvar is 'enough'
$myvar is greater than $mythirdvar...
The crypt'ed version of $mythirdvar is 'aaVxUBNI9d3lI'.
Now, a little list from 0 to 2:
0
1
Esta versi�n es, naturalmente, la que se instalar�a en las m�quinas. N�tese adem�s que el fichero de configuraci�n de definici�n de objetos (objects.conf) y los ficheros de distribuci�n vuelven a leerse y preprocesarse por cada m�quina, as� que podemos hacer que �stos dependan del objetivo donde se instalar�n (ver ejemplo "Creaci�n de varios ficheros a partir de un solo fuente" en el siguiente apartado).