Usos comunes de PICA

A continuación de presentan algunos de los casos comunes de uso de PICA, no sin antes explicar brevemente el formato de la llamada.

Formato general de la llamada a PICA

En general, el formato de una llamada a PICA se compone de: una operación y opciones generales, una lista de objetos sobre los que operar y una lista de máquinas sobre las que operar. La sintaxis es muy similar a la del PIKT, por aquello de no tener que aprender una nueva sintaxis, y porque nos pareció apropiada (al fin y al cabo, queríamos aprovechar todo lo posible del PIKT).

Las opciones y la operación van precedidas de un guión, al estilo de las opciones normales de UNIX. Pueden agruparse o separarse, por legibilidad.

Para especificar las listas de máquinas y objetos hay toda una sintaxis de aritmética, también tomada prestada del PIKT. Debido a esta aritmética, podemos ir sumando y restando máquinas, objetos y grupos de ambos. Para sumar o restar máquinas, precedemos la lista con +H o -H, y para sumar o restar objetos (ficheros o alarmas), +F o -F.

Ejemplos de llamadas a PICA

Algunos ejemplos terminarán de aclarar el uso de la aritmética de objetos y máquinas. Empecemos por el caso más común de todos, la instalación (copia) de un objeto (pica-rules) en una máquina (demiurgo):

Ejemplo 4. Llamada a PICA (instalación de pica-rules en demiurgo)

  pica -i +F pica-rules +H demiurgo

Supongamos ahora que tenemos definido un grupo de máquinas con los servidores DNS (dnsservers) a las que queremos copiar todos los ficheros definidos para esas máquinas. El problema es que hay dos máquinas pertenecientes al grupo que están en pruebas o apagadas y por esta vez no vamos a procesarlas (w2k y w98). En ese caso, podríamos perfectamente «restarlas» del grupo con algo como:

Ejemplo 5. Resta de dos máquinas a un grupo

  pica -i +F all +H dnsservers -H w2k w98

Nótese que en este ejemplo acabamos de introducir un concepto nuevo: el de grupos implícitos. Para hacernos la vida más fácil, PICA define algunos grupos implícitamente. Tanto para máquinas como para objetos está definido el grupo all, que se refiere a todas las máquinas/objetos (depende del contexto). También vale la pena comentar que los espacios de nombres de los objetos y las máquinas son completamente independientes, así que podemos tener tanto una máquina (o grupo de máquinas) como un objeto (o grupo de objetos) llamado «dns». Sin embargo, para evitar confusiones suele ser una buena costumbre no repetir nombres.

Si, en vez de copiar un objeto, queremos comparar la versión que se instalaría y la que está realmente instalada en todas las máquinas definidas, podríamos usar lo siguiente:

Ejemplo 6. Comparación de un objeto

  pica -f +F fichero-importante +H all

La salida será un diff unificado entre ambas versiones.

El borrado de objetos es igual de simple, pero usando la opción -t:

Ejemplo 7. Borrado de objetos

  pica -t +F fichero-menos-importante +H all

En la ejecución hay dos casos: por un lado, podemos ejecutar un objeto de PICA que sea una orden (si tiene permiso de ejecución y está instalado); por otro lado, podemos ejecutar órdenes instaladas en la máquina remota aunque no estén declaradas en objects.conf. Por ejemplo, supongamos que uno de los objetos que distribuimos es un programa llamado postupdate que actualiza la configuración del postfix. Si lo tuviéramos declarado como objeto de PICA, aunque no se instalara en un directorio dentro de la ruta de búsqueda de ejecutables, podríamos ejecutarlo en todas las máquinas del grupo mailservers escribiendo

Ejemplo 8. Ejecución del objeto postupdate en los componentes del grupo mailservers

  pica -x +F postupdate +H mailservers

Si, por el contrario, lo único que queremos es ejecutar una orden cualquiera de la máquina (incluso con parámetros), podemos escribir algo como lo siguiente:

Ejemplo 9. Ejecución de órdenes remotas con parámetros

  pica -x +F "killall netscape" +H alumnos-3

La razón de poner las comillas es que PICA interpreta diferentes parámetros como distintas órdenes a ejecutar. Si no pusiéramos comillas, intentaría ejecutar killall sin parámetros y la aplicación netscape en remoto.

Todo el manejo de PICA se basa en estos ejemplos. Podemos añadir objetos que nos solucionen problemas u objetos que sean órdenes para ejecutar remotamente, pero todo lo haremos con la instalación y ejecución remota. Incluso las alarmas, que veremos en el siguiente apartado, se basan en estos principios.