[Obm] Automate et mise à jour incrémentale, via PHP

Anthony Prades anthony.prades at obm.org
Thu Nov 5 11:33:25 CET 2009


Thomas Chemineau <thomas.chemineau at gmail.com> wrote on 11/04/2009 02:16 PM:
> Bonjour,
> 
> Je développe actuellement sur la bibliothèque LemonLDAP d'OBM.
> 
> Récemment, pour permettre la synchronisation d'information depuis un
> annuaire LDAP externe vers OBM puis annuaire OBM, j'ai ajouté une
> quinzaine de lignes permettant d'appeler l'automate de mise à jour via
> PHP. Seulement, n'arrivant pas à formater correctement les tableaux et
> autres informations PHP attendus pour une mise à jour incrémentale,
> j'ai délibérément forcé la mise à jour à 'global'. Ça marche très
> bien, l'annuaire OBM est correctement mis à jour, inutile de valider
> cette mise à jour via la GUI d'OBM.
> 
> Mais voilà, il s'agit d'une mise à jour globale. Certes, pour une
> dizaine d'utilisateurs, ça passe, mais pour 5000, ça n'est plus
> possible. Je me suis donc plongé dans les méandres d'OBM afin
> d'essayer de comprendre comment les données de mises à jour
> incrémentales étaient construites. J'avoue, je suis perdu. J'aurais
> donc besoin d'un coup de main.
> 
> Pour le moment, j'utilise php/tools/tools_query.inc, comme ceci:
> 
> 8<--------
> $params['domain_id'] = $domain_id;
> $params['update_type'] = 'incremental';
> $params['realm'] = 'user';
> 
> store_update_data($params);
> $res = exec_tools_update_update($params);
> 8<--------
> 
> Or, en mise à jour incrémentale, la fonction "store_update_data" a
> besoin de la variable global "$entities". Et c'est là ou je coince, je
> ne sais pas comment la construire. Après pas mal de coup de grep dans
> le code (il s'avère que "$entities" semble n'être utilisé que dans
> calendar), j'en suis arrivé à la fabriquer comme suit:
> 
> 8<--------
> $entities['user'][$user_id] = array(
>     'name'  => $user_data[$this->_sqlMap['userobm_lastname']] . ' ' .
> $user_data[$this->_sqlMap['userobm_firstname']],
>     'class' => 'eventOwner',
>     'type'  => 'user',
>     'id'    => $user_id
>   );
> 8<--------
> 
> Bon, ça ne s'invente pas. Mais je tilt tout de même sur "class", et
> sur "name" (qui est fabriqué en dur). Malheureusement, même avec ce
> tableau, OBM me jette avec cette erreur SQL :
> 
> 8<--------
> Database error: Invalid SQL: INSERT INTO Updated ( updated_domain_id,
> updated_user_id, updated_delegation, updated_table, updated_entity_id,
> updated_type ) SELECT 2, 23, '', '', , 'U' FROM as Current JOIN P_ as
> Production ON WHERE () AND (1=1 AND (Current._userupdate = 23 OR
> (Current._userupdate IS NULL AND Current._usercreate = 23)) AND
> Current._domain_id = 2)
> MySQL Error: 1064 (You have an error in your SQL syntax; check the
> manual that corresponds to your MySQL server version for the right
> syntax to use near ' 'U' FROM as Current JOIN P_ as Production ON
> WHERE () ' at line 13)
> Session halted.
> 8<--------
> 
> Qqun pourrait-il me filer des billes sur comment avancer sur ce sujet
> ? J'ai réellement besoin de coder l'appel à une mise à jour
> incrémentale pour des utilisateurs et des groupes.
> 
> Merci et bon après midi,
> Thomas.
> 

Salut,

sinon à partir d'OBM 2.3 il est possible de demander la mise à jour
d'une entité sans passer par le mode incrémental :
$ update.pl --domain-id <ID> --entity <<EOF
<entity>:<id>
EOF

Entity peut être : 'user', 'mailshare', 'group' ou 'host'
id :
   - userobm_login pour le type 'user'
   - mailshare_name pour le type 'mailshare'
   - group_name pour le type 'group'
   - host_name pour le type 'host'

Pour info, on a toute ces informations avec la commande :
$ update.pl --help
et la perldoc va être mise à jour.

Anthony


> PS: Désolé de poster sur cette liste, pour un sujet si technique. Mais
> c'est le seul moyen que j'ai trouvé.
> 



More information about the Obm mailing list