sábado, 14 de junio de 2014

Errores con Google Apps Directory Sync

Eres administrador de Google Apps? Entonces quizás utilizas la herramienta Directory Sync, para sincronizar información entre los usuarios de un directorio activo de Microsoft y  los usuarios de Google Apps.

Hace poco me encontré con que la herramiento Directory Sync daba un error al realizar la sincronización. Al mirar el log encontré la siguiente información:

[2014-06-09 12:23:21,785] [pool-8-thread-2] [ERROR] [plugin.google.GDataRetryPolicy] Retry attempts exhausted for Updating person Pepito Sánchez, with attempt # 0
[2014-06-09 12:23:21,785] [pool-8-thread-2] [ERROR] [plugin.google.GDataRetryPolicy] Last encountered exception: com.google.gdata.util.InvalidEntryException: Bad Request
External id value can't be empty.

[2014-06-09 12:23:21,785] [pool-8-thread-2] [DEBUG] [usersyncapp.util.RetryImpl] Retry attempts exhausted for Updating person Pepito Sánchez with attempt # 0

Buscando en Google por este apenas lograba encontrar información, así que decidí rebuscar un poco por micuenta. Como se puede ver en el registro de error los usuarios que tienen problemas son usuarios que tienen un valor nulo en el campo externalIDs. Parece ser una especie de campo libre donde podemos introducir identificadores para nuestros usuarios que funcionen de manera independiente del ID único que tienen en Google Apps. Hasta aquí todo bien si no fuera porque en los usuarios de mi organización este campo ni siquiera lo tienen, ya que si no lo creas expresamente el campo ni existe. Así que me dispuse a buscar qué usuarios podían tener ese campo creado. Puedes consultar los usuarios que te dan problemas des de la web de la API (eso sí, debes tener habilitada la API en tu dominio):

https://developers.google.com/admin-sdk/directory/v1/reference/users/get#try-it

Activamos el interruptor "Authorize requests using OAuth 2.0 " para que nos deje realizar la consulta:


 Poniendo la dirección de correo del usuario problemático en el campo UserKey y dándole al botón "Execute" observo la siguiente respuesta:

200 OK
- Show headers -
{
 [...]
,
 "externalIds": [
  {
   "value": "",
   "type": "organization"
  }
 ],
 [...]
}

Como se puede ver el campo externalIDs (de tipo lista) contiene en mi caso un elemento de tipo "organization" pero con valor NULL, y Google Directory Sync se queja de que ese valor no puede estar vacío.

Así que si modificamos el campo "value" poniéndole un valor cualquiera que no sea null. Lo podemos cambiar desde la siguiente web:

https://developers.google.com/admin-sdk/directory/v1/reference/users/patch#try-it

En el campo UserKey volvemos a poner la dirección de correo de ese usuario, y ponemos el campo "Patch body" en modo Freeform:



 Le ponemos un valor cualquiera de la siguiente forma (hay que poner el editor ):

{
  "externalIds":[
    {
     "value": "xxx",
     "type": "organization"
    }
   ]
}

Después de ejecutar esta consulta el programa dejará de dar error y sincronizará el resto de datos. No sé en qué punto ese campo se ha rellenado, es el misterio que me queda por resolver. Pero en cualquier caso ese es el problema, espero que le sirva a alguien.

Saludos!

No hay comentarios:

Publicar un comentario