GAM: Gestionar dominios de Google Apps desde la línea de comandos | Algo de Linux

miércoles, 14 de octubre de 2015

GAM: Gestionar dominios de Google Apps desde la línea de comandos

En nuestro centro disponemos de un dominio de Google Apps for Education.

Pues bien, en cursos pasados he utilizado GADS (Google Apps Directory Sync) para crear las cuentas de Google de los usuarios del centro a partir de los datos almacenados en el servidor LDAP. La cuestión es que a principios de curso al menos, la aplicación de sincronización fallaba y me mostraba un mensaje informando de que no era posible contactar con el servidor. Así que, dado que necesitaba crear las cuentas lo antes posible, decidí pasar de esta aplicación y buscar una alternativa.

Enseguida encontré una solución que me encantó: GAM (Google Apps Manager), sobre todo por ser una herramienta de línea de comandos que me permitía crear scripts o aplicaciones ajustadas a mis necesidades.

GAM nos permite gestionar de una manera muy sencilla prácticamente todos los recursos de nuestro dominio de Google Apps:
  • Usuarios.
  • Grupos.
  • Alias.
  • Unidades organizativas.
  • Cloud Print.
  • Classroom.
  • Calendarios.
  • etc...
Además es multiplataforma, estando disponible tanto para Linux, como para Mac o Windows.

En Windows existe un instalador. En cambio, en Linux o Mac, tan sólo tenemos que descargar un fichero comprimido y descomprimirlo en un directorio de nuestra máquina. 

Para disponer de la aplicación tanto en el centro como en casa, lo que he hecho ha sido descomprimir el fichero en mi carpeta de Copy que tengo sincronizada en mis máquinas. Así puedo usar GAM directamente tanto en casa como en el trabajo.

Además, he creado un enlace en /usr/bin, de manera que pueda ejecutar la aplicación sin tener que especificar la ruta completa. Por ejemplo:
# ln -sf /home/enavas/Copy/GAM-3.61/gam.py /usr/bin/gam.py

Una vez descomprimido y creado el enlace, es necesario crear dos ficheros que nos proporcionarán una quota para realizar peticiones a la API:
  • client_secrets.json
  • oauth2service.json
Podéis crearlos y descargarlos siguiendo las siguientes instrucciones:
https://github.com/jay0lee/GAM/wiki/CreatingClientSecretsFile

Una vez descargados ambos ficheros, debemos guardarlos en la carpeta donde se encuentra la aplicación y ya podremos utilizarla.

Para conocer los comandos que podéis usar y su sintaxis os recomiendo consultar la guía de referencia de comandos de GAM:
https://github.com/jay0lee/GAM/wiki/GAM3DirectoryCommands

Veamos algunos ejemplos de uso:

Supongamos que quiero obtener información acerca de la unidad organizativa profesores de mi dominio:
$ gam.py info org profesores
Ésto me mostrará la información de la unidad organizativa y las direcciones de todos los miembros que forman parte de ella.

Ahora supongamos que quiero obtener información acerca de la unidad organizativa profesores de mi dominio sin que me muestre las direcciones de los miembros:
$ gam.py info org profesores nousers
Si quisiéramos crear un nuevo usuario, podríamos hacerlo de la siguiente manera:
$ gam.py create user enavas
   firstname 'Esteban' lastname 'Navas Martín'
   password 'mip@ssW0rd!'
Si quisiéramos crear un nuevo grupo, podríamos hacer lo siguiente:
$ gam.py create group profesores@midominio.es
Ahora supongamos que queremos añadir un nuevo usuario al grupo creado anteriormente. La cosa sería tan sencilla como:
$ gam.py update group profesores add member user enavas@midominio.es
Enfin. Consultando la guía de referencia, veréis que las posibilidades son muchas.

Lo mejor de todo es que podemos utilizar todos estos comandos en un script.
Un ejemplo:
#!/bin/bash

FICHERO="profesoresrayuela.csv"

gam.py info org PROFESORES > /tmp/profesoresgoogleapps.csv

while read LINEA ;do
    nombre=`echo $LINEA | awk -F"," '{print $1}'`
    apellidos=`echo $LINEA | awk -F"," '{print $2}'`
    email=`echo $LINEA | awk -F"," '{print $3}'`
    login=`echo $email | cut -f1 -d"@"`
    password=`echo $LINEA | awk -F"," '{print $4}'`

    if [ $login ] && ! [ "`grep $login /tmp/profesoresgoogleapps.csv`" ]; then 
       echo "Creando usuario $email con login $login"

       gam.py create user "$email" firstname "$nombre" lastname "$apellidos" password "$password"
       gam.py update org PROFESORES add users $email
    else
       echo "$nombre $apellidos no tiene login" > alumnossinlogin.log
    fi
done < $FICHERO

Publicado por primera vez en http://enavas.blogspot.com.es