Open IT Experts for Enterprise

Zylk empresa de desarrollo de ecommerce

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.

Si te ha parecido interesante comparte este post en RRS

Facebook
LinkedIn
Telegram
Email

Leer más sobre temas relacionados

Deja un comentario

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