Open IT Experts for Enterprise

Alfresco Shell Tools

Cesar Capillas
Cesar Capillas

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.

Más entradas

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *