wiki:la-cli

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.)=>
Last modified 16 months ago Last modified on 07/03/20 13:35:30