La commande {{{la-cli}}} ouvre un environnement en ligne de commande facilitant la gestion de masse des objets au sein de Link::Accounts. = Premiers pas = == Lancer la-cli == {{{ [root@yuko ~]# la-cli latmostest cli=> }}} Classiquement la touche tab permet d’accéder à la completion: {{{ latmostest cli=> ! commit create exit expires help log newalias quit rollback select unexported user begin config exchangeip expired group loadcsv ls query rmalias search transaction updalias latmostest cli=> }}} et la commande help donne l'aide: sans argument elle liste les commandes disponibles, elle accepte le nom d'une fonction en argument: {{{ latmostest cli=> help !, begin, commit, config, create, exchangeip, exit, expired, expires, group, help, loadcsv, log, ls, newalias, query, quit, rmalias, rollback, search, select, transaction, unexported, updalias, user latmostest cli=> help search search objecttype filter1 [filter2...] - search object according filter latmostest cli=> }}} A noter que {{{commande --help}}} donne le même résultat que {{{help commande}}} {{{ latmostest cli=> search --help search objecttype filter1 [filter2...] - search object according filter latmostest cli=> }}} == Sélections et envirronement == === Sélectionner des objets === Avec la commande select il est possible de... sélectionner un ou plusieurs objets. Un nouvel environnement est créé: {{{ latmostest cli=> select user bob Selecting user bob latmostest user/bob=> }}} On peut ajout ou retirer des objets avec les commandes {{{+}}} et {{{-}}}: {{{ latmostest user/bob=> + alice select is now user: bob, alice latmostest user/(2 obj.)=> }}} Notez le changement du prompt qui indique le type d'objets sélectionnés et soit l'id de l'objet ou leur nombre. On peut connaitre la sélection avec {{{list}}} (ou {{{ls}}}) {{{ latmostest user/(2 obj.)=> ls user: bob alice }}} === Sous Selection === ==== Par attribut réferent ==== Lorsqu'un attribut fait référence à d'autres objets ils possible de sous sélectionner tout les objets pointé par la sélection. Exemple: l'attribut {{{memberOf}}} d'un utilisateur référence des groupes. Avec {{{la-cli}}} il est possible de sélectionner tout les groupes dont sont membres des utilisateurs: {{{ latmostest cli=> select user bob alice Selecting user bob, alice latmostest user/(2 obj.)=> ls user: bob alice latmostest user/(2 obj.)=> select memberOf Selecting group alkitty bokitty kitty test latmostest user/group/(4 obj.)=> }}} En faisant cela les environnements s'empilent, en tapant exit on revient à environnement de niveau supérieur: {{{ latmostest user/group/(4 obj.)=> ls group: alkitty bokitty kitty test latmostest user/group/(4 obj.)=> exit latmostest user/(2 obj.)=> ls user: bob alice latmostest user/(2 obj.)=> exit latmostest cli=> }}} Il est possible d'appeler une commande au sein de l'environnement parent sans quitter l'environnement courant en préfixant la commande par des {{{../}}}, comme sous UNIX: {{{ latmostest user/group/(4 obj.)=> ls group: alkitty kitty bokitty test latmostest user/group/(4 obj.)=> ../ls user: bob alice latmostest user/group/(4 obj.)=> }}} == Requêtes et modification d'objets == Avec la selection de plusieurs objet {{{la-cli}}} permet d'interroger et modifier en un seul appel un groupe d'objets. La commande {{{show}}} permet de voir un attribut: {{{ latmostest cli=> select user allan alice Selecting user Allan Kitty, Alice Kitty latmostest user/(2 obj.)=> show givenName allan: Allan alice: Alice latmostest user/(2 obj.)=> }}} Avec les commandes {{{set}}} et {{{unset}}} il est possible modifier les attributs: {{{ latmostest user/(2 obj.)=> show sn allan: Kitty alice: Kitty latmostest user/(2 obj.)=> set sn KITTY Done. latmostest user/(2 obj.)=> show sn allan: KITTY alice: KITTY latmostest user/(2 obj.)=> }}} Dans ce cas tout l'attribut concerné prendra la même valeur sur tout les objets. Pour les attributs multivalués on peut ajouter ou retirer une valeur à chaque objet sans modifier les valeurs déjà placées avec les commandes {{{add}}} et {{{remove}}}: {{{ latmostest user/(3 obj.)=> show memberOf allan: alkitty allan: test alice: alkitty alice: test bob: bokitty bob: kitty bob: test latmostest user/(3 obj.)=> add memberOf admcmpt done latmostest user/(3 obj.)=> show memberOf allan: admcmpt allan: alkitty allan: test alice: admcmpt alice: alkitty alice: test bob: admcmpt bob: bokitty bob: kitty bob: test latmostest user/(3 obj.)=> }}} = Utilisation avancée = == Transaction == Les transactions de la-cli sont reportés tel quel sur la base SQL et le fonctionnement de {{{la-cli}}} reprends les même règles que le client {{{psql}}} de PostgreSQL: * par défaut chaque commande démarre et termine une transaction * {{{begin}}} démarre une transaction explicite, elle se termine soit par l'utilisation de {{{commit}}} ou {{{rollback}}} soit parce qu'une erreur SQL intervient Rappelez-vous également que les modifications posent des verrous sur la base et que seul la fin de la transaction retire ces verrous (ou la mort du processus). === begin, commit et rollback === {{{begin}}} démarre un transaction: {{{ latmostest cli=> begin latmostest cli-> }}} Notez le subtile changement de prompt indiquant qu'une transaction est en cours. A partir de là, aucune modification ne sera visible tant que {{{commit}}} n'aura pas été appelé. A l'inverse toutes les modifications en cours seront annulé avec {{{rollback}}} {{{ latmostest user/bob=> begin latmostest user/bob-> set givenName pangolin Done. latmostest user/bob-> show givenName bob: pangolin latmostest user/bob-> rollback latmostest user/bob=> show givenName bob: Bob latmostest user/bob=> }}} === Mode de transaction automatique === Dans ce mode chaque nouvelle commande démarre une nouvelle transaction s'il n'y en a pas une déjà en cours. Ce mode s'active et se désactive avec la commande transaction (notez le changement de prompt): {{{ latmostest cli=> transaction on latmostest cli=# }}} La première commande démarre une transaction: {{{ latmostest user/bob=# set givenName pangolin Done. latmostest user/bob-# rollback latmostest user/bob=# transaction off latmostest user/bob=> }}}