Grouper:Adaptation Grouper LDAPPC

Un article de Wiki ESCO-Portail.

Sommaire

Adaptations de Grouper et LDAPPC

Besoins

  1. Synchronisation avec le LDAP en temps réel.
  2. Pouvoir spécifier plusieurs branches possibles pour contenir les groupes.
  3. Retrouver l'équivalent de groupes PAGS dans grouper.

Disponibilité des groupes : synchronisation de Grouper vers LDAP

Fonctionnement de LDAPPC

L'utilisateur définis les paramètres suivants :

  • La branche LDAP destinée à recevoir les groupes.
  • Un critère de sélection des groupes à exporter dans Grouper.
  • Un intervalle de temps entre deux approvisionnements.


L'export des groupes est réalisé de la manière suivante :

  1. LDAPPC liste tous les noeuds de la branche de destination et les place dans une liste d'éléments à supprimer.
  2. La listes des groupes à exporter est construite à partir du critère de sélection.
    • Les noeuds parents sont retirés de la liste d'éléments à supprimer s'ils sont présents.Dans le cas contraire ils sont créés dans le LDAP.
    • Le statut du groupe est déterminé par ses dates de création/modification. Suivant son statut, le groupe est créé/modifié dans le LDAP
  3. Le noeuds encore présents dans la liste des éléments à supprimer sont effacés du LDAP.
  4. Attente puis retour en 2.



Cette option semble répondre au besoin d'une disponibilité rapide, au niveau de LDAP, des groupes définis dans Grouper. Il reste la question de la résistance à la montée en charge.

Voir la page de tests de LDAPPC pour la configuration et l'invocation dans ce mode.


Exportation vers plusieurs branches LDAP

Nativement LDAPPC ne peut exporter que vers une seule branche du LDAP. L'idée est de lancer une seule instance de LDAPPC qui prenne en compte un ensemble de fichiers de configuration. C'est la fonction de la classe MultiContextLdappcGrouperProvisioner dans le module cvs ESCO-MultiContextLdappcProvisioner (sur Mozart).
Le comportement de cette classe est le suivant :

  • Recherche dans le class path de tous les fichiers xml dont le nom commence par le préfixe esco-ldappc.
  • Pour chaque fichier de configuration une occurrence de GrouperProvisionerOptionsAdapter est créée :
private void initializeProvisioners(final InputOptions options) {
   // Initialization of the provisioners list.
   provisioners.clear();
 
   for (String confFile : configurationFiles) {
 
      final GrouperProvisionerOptionsAdapter newOptions = new GrouperProvisionerOptionsAdapter(options);
      final ConfigManager configuration = ConfigManager.load(confFile);
      newOptions.setNewConfigurationManagerLocation(confFile);
      LdapContext ldapContext = null;
      try {
         ldapContext = LdapUtil.getLdapContext(configuration.getLdapContextParameters(), null);
      } catch (NamingException e) {
         e.printStackTrace();
      }
      provisioners.add(new GrouperProvisioner(configuration, newOptions, ldapContext));
   }
}
  • Lors de l'approvisionnement, les instances de GrouperProvisioner sont invoquées séquentiellement.
for (GrouperProvisioner provisioner : provisioners) {
   try {
      provisioner.provision();
   } catch (MultiErrorException e) {
      e.printStackTrace();
     (...)
   }
}

Remarques :

  • Une adaptation de la classe GrouperProvisionerOptions est utilisée, qui permet la modification de l'attribut contenant l'URL du ConfigManager.
  • Le ConfigManager n'est pas utilisé comme singleton et chaque instance de GrouperProvisioner en possède sa propre instance.
  • Les invocations des instances de GrouperProvisioner pourraient être réalisées en parallèle.
pages développeurs
pages "communauté ESCO"