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
Selectionner les résultat d'une recherche
La fonction search permet de chercher des objets:
latmostest cli=> search user memberOf=alkitty alice allan
On peut selectionner le résultat de la dernière recherche avec l'argument @:
latmostest cli=> select @ Selecting user alice, allan latmostest user/(2 obj.)=>
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=>
Pipe et tri
Tri
Les fonctions sort, sortn, sortr et sortnr tri les objets selectionnés en fonction de la valeur d'un attribut.
Les fonctions sort et sortr effectuent un tri alphabétique normal ou inverse, les variantes sortn effectuent un tri numérique.
latmostest user/(2 obj.)=> show uidNumber alice: 7026 allan: 7025 latmostest user/(2 obj.)=> sortn uidNumber select is now user: allan, alice latmostest user/(2 obj.)=> show uidNumber allan: 7025 alice: 7026 latmostest user/(2 obj.)=>
Redirections
Pipe
En plaçant le caractère | seul la sortie est redirigé vers un shell appelé avec la fin de la commande:
latmostest user/(2 obj.)=> show uidNumber | grep allan allan: 7025 latmostest user/(2 obj.)=> show uidNumber | grep allan | sed 's/a/e/g' ellen: 7025
Rediriger vers un fichier
La sortie d'une commande sera écrite dans le fichier qui suit le caractère >
latmostest user/(2 obj.)=> show uidNumber > /tmp/list latmostest user/(2 obj.)=>