Alfresco Shell Tools

Las Alfresco Shell Tools ofrecen una un conjunto de scripts de shell para administradores e integradores de sistemas en Alfresco que utilizan el API REST / Webscript. Estas herramientas de shell son muy interesantes en la gestión, mantenimiento y automatización de entornos de Alfresco, por ejemplo para crear un entorno con cientos de sites o tenants, la recreación de miles de usuarios y grupos locales, tareas de backup y mantenimiento de permisos, o la sincronización avatares o generación de thumbnails. Te las puedes descargar desde aquí:

https://code.google.com/p/alfresco-shell-tools/

En la instalación (por ejemplo en Ubuntu) requerimos de algunas dependencias como el paquete jshon y de las librerías jasson, tal y como se describe en la documentación wiki. Para ejecutar los scripts de Alfresco Shell Tools necesitamos de ciertas variables de entorno, que apuntan a la capa de servicios de Alfresco así como de un usuario y contraseña con permisos de admin. Supongamos que estas herramientas se ejecutan desde nuestro servidor Alfresco, aunque pueden ejecutarse desde un cliente y atacar a diferentes Alfresco remotos segun se definan las siguientes variables de entorno.

$ source exportENVVARS.sh

#! /bin/bash
export PATH="$PATH:."
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:."
export ALFTOOLS_ENDPOINT=http://localhost:8080/alfresco
export ALFTOOLS_SHARE_ENDPOINT=http://localhost:8080/share
export ALFTOOLS_USER=admin
export ALFTOOLS_PASSWORD=secret

Para comprobar que todo esta listo podemos ejecutar:

$ alfSearch.sh alfresco


que busca los nodos con el texto alfresco, y debe dar un listado de nodos. En la página de googlecode existen bastantes ejemplos.

A continuación, voy a ilustrar su uso con algunos comandos típicos que pueden ser útiles en una hipotética migración potencial de sitios y usuarios de un Alfresco a otro. Nota: Es necesario tener en cuenta que los scripts de a continuación pueden necesitar filtrados adicionales y convenios, y que el proceso es meramente ilustrativo. También hay que tener en cuenta en los ejemplos de a continuación que cuando se crea un Site en Alfresco hay una estructura de grupos de usuarios detrás.

Comencemos por ejemplo listando los grupos de Alfresco con:

$ alfListGroups.sh

GROUP_ALFRESCO_ADMINISTRATORS
GROUP_EMAIL_CONTRIBUTORS
GROUP_alfrescoSiteCreators
GROUP_site_swsdp
GROUP_site_swsdp_SiteCollaborator
GROUP_site_swsdp_SiteConsumer
GROUP_site_swsdp_SiteContributor
GROUP_site_swsdp_SiteManager


Podemos diferenciar dos tipos de grupos de manera sencilla, los de sitio (GROUP_site_) y los que no. De modo que los grupos que no son de sitios (locales + ldap) se pueden listar de la siguiente manera:

$ alfListGroups.sh | grep -v "_site_"

GROUP_ALFRESCO_ADMINISTRATORS
GROUP_EMAIL_CONTRIBUTORS
GROUP_alfrescoSiteCreators


Por lo tanto, podriamos obtener los nombres cortos de los sitios de la siguiente manera:

$ ./alfListGroups.sh | grep "_site_" | awk -F"_" '{print $3}' | uniq
swsdp


Considerando este listado en un archivo sites.txt podemos crear un archivo de comandos para nuestro target Alfresco como:

#! /bin/bash
for i in `cat sites.txt`;
 do
   alfCreateSite.sh -s "$1" -d "Descripcion de $1" -a PRIVATE "Titulo de $1"
 done


o bien si en el archivo sites.txt disponemos de los datos del nombre corto del sitio, descripción y titulo separado por comas podríamos generar un archivo de comandos para nuestro servidor target.

$ awk -F"," '{print "alfCreateSite.sh -s "$1" -d "$2" -a PRIVATE " $3""}' sites.txt | sort | uniq

alfCreateSite.sh -s "nombre-sitio-1" -d "Descripcion de sitio 1" -a PRIVATE "Titulo de sitio 1"
alfCreateSite.sh -s "nombre-sitio-2" -d "Descripcion de sitio 2" -a PRIVATE "Titulo de sitio 2"
alfCreateSite.sh -s "nombre-sitio-3" -d "Descripcion de sitio 3" -a PRIVATE "Titulo de sitio 3"
alfCreateSite.sh -s "nombre-sitio-4" -d "Descripcion de sitio 4" -a PRIVATE "Titulo de sitio 4"


Para ejecutarlo contra el servidor target sería necesario cambiar las variables de entorno y ejecutar ese archivo de comandos generado. También podemos obtener la estructura completa de grupos y usuarios con el siguiente script de extracción (AlfrescoAllGroups.sh) y filtrarla según nuestras necesidades:

#! /bin/bash
for i in `./alfListGroups.sh`;
  do
  LISTA=`./alfListGroupMembers.sh $i`;
  for j in $LISTA;
    do
      echo $i,$j
    done
  done


que daría algo así:

GROUP_ALFRESCO_ADMINISTRATORS,admin
GROUP_ALFRESCO_ADMINISTRATORS,cesar
GROUP_EMAIL_CONTRIBUTORS,admin
GROUP_EMAIL_CONTRIBUTORS,cesar
GROUP_site_swsdp_SiteCollaborator,abeecher
GROUP_site_swsdp_SiteManager,admin
GROUP_site_swsdp_SiteManager,mjackson
GROUP_site_swsdp_SiteManager,cesar


y que puede ser la entrada de la asignación de usuarios locales a otro servidor Alfresco (usuarios-carga.txt) mediante el comando sed (transformacion):

$ AlfrescoAllGroups.sh | sed -e 's/GROUP_//g' > usuarios-carga.txt

ALFRESCO_ADMINISTRATORS,admin
ALFRESCO_ADMINISTRATORS,cesar
EMAIL_CONTRIBUTORS,admin


Con lo que podemos crear un archivo de comandos de carga como este para ejecutar:

$ awk -F"," '{print "alfAddAuthorityToGroup.sh " $1 " " $2}' usuarios-carga.txt | sort | uniq

$ alfAddAuthorityToGroup.sh ALFRESCO_ADMINISTRATORS cesar
$ alfAddAuthorityToGroup.sh EMAIL_CONTRIBUTORS cesar
$ alfAddAuthorityToGroup.sh site_swsdp_SiteManager cesar


En este último paso, se utiliza un comando que permite añadir usuarios a grupos (y por tanto a Sites) y sería necesario excluir los datos ya existentes o por defecto en nuestro repositorio.

En definitiva, toda una navaja suiza para administradores e integradores de Alfresco. Las pruebas de arriba estan hechas con las versiones 4.2.c CE y 4.1.x EE de Alfresco.

00

Más entradas de blog

Añadir comentarios