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.