26.4. Utilisation de libStorageMgmt

Pour utiliser libStorageMgmt de manière interactive, exécutez la commande lsmcli.
l'outil lsmcli a besoin de deux choses pour fonctionner :
  • Un URI (Uniform Resource Identifier) à utiliser pour identifier le plug-in auquel se connecter dans l'aire de stockage et toutes les options de configuration possibles nécessaires.
  • Un nom d'utilisateur et un mot de passe pour l'aire de stockage.
L'URI a la forme suivante :
plugin+optional-transport://username@host:port/?query-string-parameters
Chaque plug-in a des prérequis différents selon les besoins.

Exemple 26.1. Exemples de prérequis de plug-in

Plug-in de simulateur ne nécessitant ni nom d'utilisateur, ni mot de passe

sim://

Plug-in NetApp via SSL avec le root du nom d'utilisateur

ontap+ssl://root@filer.company.com/

SMI-S plug-in over SSL for EMC array

smis+ssl://admin@provider.com:5989/?namespace=root/emc

Pour des exemples supplémentaires, voir https://sourceforge.net/p/libstoragemgmt/wiki/URISyntax/.
Il y a trois options pour utiliser l'URI :
  1. Passer l'URI comme partie de la commande.
    $ lsmcli -u sim://...
  2. Stocker l'URI dans une variable d'environnement.
    $ export LSMCLI_URI=sim:// && lsmcli ...
  3. Mettre l'URI dans le fichier ~/.lsmcli, qui contient les paires nom-valeur séparées par "=". La seule configuration actuellement prise en charge est 'uri'.
Déterminer quel URI utiliser doit être fait dans cet ordre. Si les trois sont fournis, seul le premier qui figure sur la ligne de commande sera utilisé.
Fournir le mot de passe en indiquant -P sur la ligne de commande ou en la mettant dans la variable environnementale LSMCLI_PASSWORD.

Exemple 26.2. Exemples de lsmcli

Exemple d'utilisation en ligne de commande pour créer un nouveau volume et le rendre visible à un initiateur.
Lister les aires de stockages mises en service par cette connexion.
$ lsmcli list --type SYSTEMS
ID     | Name                          | Status
-------+-------------------------------+--------
sim-01 | LSM simulated storage plug-in | OK
Lister les pools de stockage.
$ lsmcli list --type POOLS -H
ID   | Name          | Total space          | Free space           | System ID
-----+---------------+----------------------+----------------------+-----------
POO2 | Pool 2        | 18446744073709551616 | 18446744073709551616 | sim-01
POO3 | Pool 3        | 18446744073709551616 | 18446744073709551616 | sim-01
POO1 | Pool 1        | 18446744073709551616 | 18446744073709551616 | sim-01
POO4 | lsm_test_aggr | 18446744073709551616 | 18446744073709551616 | sim-01
Créer un volume.
$ lsmcli volume-create --name volume_name --size 20G --pool POO1 -H
ID   | Name        | vpd83                            | bs  | #blocks  | status | ...
-----+-------------+----------------------------------+-----+----------+--------+----
Vol1 | volume_name | F7DDF7CA945C66238F593BC38137BD2F | 512 | 41943040 | OK     | ...
Créer un groupe d'accès avec un initiateur à l'intérieur.
$ lsmcli --create-access-group example_ag --id iqn.1994-05.com.domain:01.89bd01 --type ISCSI --system sim-01
ID                               | Name       | Initiator ID                     |SystemID
---------------------------------+------------+----------------------------------+--------
782d00c8ac63819d6cca7069282e03a0 | example_ag | iqn.1994-05.com.domain:01.89bd01 |sim-01
Créer un groupe d'accès avec un initiateur à l'intérieur.
$ lsmcli access-group-create --name example_ag --init iqn.1994-05.com.domain:01.89bd01 --init-type ISCSI --sys sim-01
ID                               | Name       | Initiator IDs                    | System ID
---------------------------------+------------+----------------------------------+-----------
782d00c8ac63819d6cca7069282e03a0 | example_ag | iqn.1994-05.com.domain:01.89bd01 | sim-01
Autoriser la visibilité du groupe d'accès au volume nouvellement créé :
$ lsmcli access-group-grant --ag 782d00c8ac63819d6cca7069282e03a0 --vol Vol1 --access RW
Le design de la bibliothèque prévoit une séparation des processus entre le client et le plug-in au moyen d'un IPC communication inter processus. Cela empêche des bugs du plug-in de faire échouer l’application cliente. Il fournit également un moyen pour les rédacteurs de plug-in d’écrire des plug-ins avec une licence de leur choix. Lorsqu’un client ouvre la bibliothèque en passant un URI, la bibliothèque cliente examine l’URI pour déterminer quel plug-in doit être utilisé.
Les plug-ins sont techniquement des applications autonomes, mais sont conçus pour avoir un descripteur de fichier qui leur sont attribués par la ligne de commande. La bibliothèque cliente ouvre ensuite le socket de domaine Unix approprié qui entraîne le démon bifurquer et exécuter le plug-in. Cela donne à la bibliothèque cliente un canal de communication point à point avec le plug-in. Le démon peut être redémarré sans affecter les clients existants. Tant que le client a la bibliothèque ouverte pour que plug-in, le processus de plug-in sera en cours d’exécution. Après qu'une ou plusieurs commandes soient exécutées, le plug-in est fermé, le processus de plug-in est nettoyé, puis se termine.
Pour obtenir un diagramme séquentiel sur ce processus, voir https://sourceforge.net/p/libstoragemgmt/wiki/Architecture/.
Le comportement par défaut de lsmcli est d’attendre que l’opération soit completée. Selon les opérations demandées, cela peut durer plusieurs heures. Pour permettre un retour aux conditions normales d’utilisation, il est possible d’utiliser l'option -b en ligne de commande. Si le code de sortie vaut 0, la commande est exécutée. Si le code de sortie est de 7, la commande est en cours et un identificateur de tâche s'inscrit sur la sortie standard. L’utilisateur ou le script peut alors prendre l'ID de la tâche et interroger l’état de la commande au besoin à l’aide de lsmcli--jobstatus JobID. Si la tâche est terminée, la valeur de sortie sera 0 et les résultats seront inscrits dans la sortie standard. Si la commande est toujours en cours, la valeur de retour sera le 7 et le pourcentage complet sera imprimé sur la sortie standard.

Exemple 26.3. Exemple asynchrone

Créer un volume en passant l'option -b pour que la commande renvoie immédiatement.
$ lsmcli volume-create --name async_created --size 20G --pool POO1 -b JOB_3
Vérifier la valeur de sortie, et souvenez-vous qu'un 7 indique que la tâche est toujours en cours.
$ echo $?
7
Vérifier si la tâche est terminée.
$ lsmcli job-status --job JOB_3
33
Vérifiez la valeur de sortie, et souvenez-vous que 7 indique que la tâche est toujours en cours, donc la sortie standard est le pourcentage effectué ou 33% de l'écran ci-dessus.
$ echo $?
7
Attendez un peu et vérifiez à nouveau, et souvenez-vous bien qu'une sortie correspondant à 0 indique que cela a réussi et standard out affichera le nouveau volume.
$ lsmcli job-status --job JOB_3 
ID   | Name          | vpd83                            | Block Size  | ...
-----+---------------+----------------------------------+-------------+-----
Vol2 | async_created | 855C9BA51991B0CC122A3791996F6B15 | 512         | ...
Pour les scripts, passer l'option -t SeparatorCharacters. Cela facilitera l'analyse de la sortie.

Exemple 26.4. Exemples de scipt

$ lsmcli list --type volumes -t#
Vol1#volume_name#049167B5D09EC0A173E92A63F6C3EA2A#512#41943040#21474836480#OK#sim-01#POO1
Vol2#async_created#3E771A2E807F68A32FA5E15C235B60CC#512#41943040#21474836480#OK#sim-01#POO1
$ lsmcli list --type volumes -t " | "
Vol1 | volume_name | 049167B5D09EC0A173E92A63F6C3EA2A | 512 | 41943040 | 21474836480 | OK | 21474836480 | sim-01 | POO1
Vol2 | async_created | 3E771A2E807F68A32FA5E15C235B60CC | 512 | 41943040 | 21474836480 | OK | sim-01 | POO1
$ lsmcli list --type volumes -s
---------------------------------------------
ID         | Vol1                            
Name       | volume_name                     
VPD83      | 049167B5D09EC0A173E92A63F6C3EA2A
Block Size | 512                             
#blocks    | 41943040                        
Size       | 21474836480                     
Status     | OK                              
System ID  | sim-01                          
Pool ID    | POO1                            
---------------------------------------------
ID         | Vol2                            
Name       | async_created                   
VPD83      | 3E771A2E807F68A32FA5E15C235B60CC
Block Size | 512                             
#blocks    | 41943040                        
Size       | 21474836480                     
Status     | OK                              
System ID  | sim-01                          
Pool ID    | POO1                            
---------------------------------------------
Il est conseillé d'utiliser la bibliothèque Python pour les scripts difficiles.
Pour plus d'informations sur lsmcli, voir les pages man ou la commande lsmcli --help.