wiki:documentation:avance:cli

Opennebula offre une API de type REST, accessible en http (http://iaas.intra.univ-nantes.fr:2633/RPC2), et un jeu de commandes CLI (command line interface) qui permettent de gérer ses ressources comme il est possible de le faire avec l'interface web. Cette interface est particulièrement intéressante pour scripter des déploiements.

Il faut tout d'abord installer les outils opennebula, en commençant par installer le repository :

abelard-a@UN-5CG54835CN:~$ cat /etc/apt/sources.list.d/opennebula.list
deb http://downloads.opennebula.org/repo/5.4/Ubuntu/17.04 stable opennebula

Puis il faut importer la clé de signature du repository :

root@UN-5CG54835CN:~$ gpg --keyserver pool.sks-keyservers.net --recv-key --keyserver-options http-proxy=http://cache.univ-nantes.fr:3128 592F7F0585E16EBF
gpg --keyserver pool.sks-keyservers.net --recv-key 592F7F0585E16EBF
gpg: requesting key 85E16EBF from hkp server pool.sks-keyservers.net
gpg: key 85E16EBF: public key "OpenNebula Repository <contact@opennebula.org>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
root@UN-5CG54835CN:~$ gpg -a --export 592F7F0585E16EBF | sudo apt-key add -
OK

Et enfin, il faut installer le paquet opennebula-tools :

abelard-a@UN-5CG54835CN:~$ sudo http_proxy=http://cache.ha.univ-nantes.fr:3128 apt-get install  opennebula-tools
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following package was automatically installed and is no longer required:
  libjpeg62:i386
Use 'sudo apt autoremove' to remove it.
The following NEW packages will be installed:
  opennebula-tools
0 upgraded, 1 newly installed, 0 to remove and 152 not upgraded.
Need to get 108 kB of archives.
After this operation, 677 kB of additional disk space will be used.
WARNING: The following packages cannot be authenticated!
  opennebula-tools
Install these packages without verification? [y/N] y
Get:1 http://downloads.opennebula.org/repo/5.4/Ubuntu/17.04 stable/opennebula amd64 opennebula-tools all 5.4.1-1 [108 kB]
Fetched 108 kB in 0s (111 kB/s)          
Selecting previously unselected package opennebula-tools.
(Reading database ... 329741 files and directories currently installed.)
Preparing to unpack .../opennebula-tools_5.4.1-1_all.deb ...
Unpacking opennebula-tools (5.4.1-1) ...
Processing triggers for man-db (2.7.5-1) ...
Setting up opennebula-tools (5.4.1-1) ...
Please remember to execute /usr/share/one/install_gems to install all the
required gems.

Si gem est d'une version >=2.4.0 (Ubuntu 18.04, par exemple), il faut installer xmlrpc

sudo gem install --http-proxy=http://cache.univ-nantes.fr:3128/ xmlrpc

Il est désormais possible d'utiliser la CLI, par exemple :

abelard-a@UN-5CG54835CN:~$ oneuser list --user abelard-a --password '---------------------' --endpoint http://iaas.intra.univ-nantes.fr:2633/RPC2
ID NAME            GROUP      AUTH           VMS            MEMORY         CPU
   5 abelard-a       users      ldap       1 /   5    256M /    9.8G   0.2 / 8.0

Devoir préciser ses identifiants à chaque commande est fastidieux et contre-productif. Il est donc nécessaire de configurer son poste pour ne pas avoir à les saisir systématiquement.

Bien qu'il soit possible de préciser l'url de gestion de la CLI (“endpoint”) à chaque commande, avec le flag –endpoint, il est préférable de configurer celle-ci une fois pour toute. Pour ce faire, il faut au préalable créer le dossier ~/.one et y ajouter le fichier one_endpoint contenant la bonne url :

abelard-a@UN-5CG54835CN:~$ echo http://iaas.intra.univ-nantes.fr:2633/RPC2 > ~/.one/one_endpoint

Il faut ensuite générer un token qui permettra de ne pas avoir à saisir ses identifiants à chaque commande (il faut saisir son identifiant même s'il est précisé dans la ligne de commande) :

abelard-a@UN-5CG54835CN:~$ oneuser token-create abelard-a --time -1  --user abelard-a
Password: 
Authentication Token is:
abelard-a:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Un nouveau token est créé et le fichier ~/.one/one_auth est automatiquement créé.

Il est désormais possible de manipuler ses VM sans préciser d'identifiants :

abelard-a@UN-5CG54835CN:~$ onevm list
    ID USER     GROUP    NAME            STAT UCPU    UMEM HOST             TIME
  1111 abelard- DSI-IRTS test            runn  0.0  497.4M iaas-vm-1.  23d 22h59

L'affichage des informations retournées par les commandes peut être modifié : ordre, ajout/suppression des colonnes, nombre de caractères affichés. Il faut créer/éditer les fichiers YAML correspondant à chaque commande dans ~/.one/cli/. Les fichiers de base sont à récupérer sur le github d'OpenNebula.

Il est possible et très utile de pouvoir instancier une VM à partir d'un modèle en ligne de commande. Cela se fait avec la commande onetemplate instantiate <id_modele> –nic <nomreseau>.

Pour obtenir l'id du modèle à utiliser, il faut préalablement lister les modèles disponibles :

abelard-a@UN-5CG54835CN:/tmp$ onetemplate list
  ID USER            GROUP           NAME                                REGTIME
   2 oneadmin        DSI-IRTS        windows 2008R2               01/23 15:47:23
  30 oneadmin        oneadmin        Ubuntu 16.04 (LTS) - univna  11/10 20:56:14
  31 oneadmin        oneadmin        CentOS 7.2 - univnantes      11/16 17:26:01
  56 oneadmin        oneadmin        Machine avec disque vierge   03/22 15:10:15
  65 oneadmin        oneadmin        Serveur LAMP (linux, apache  05/16 15:46:37
  66 feufeu-jc       IUTNA           Debian 8.4 (Jessie) - IUT    05/30 14:46:54
  71 oneadmin        oneadmin        Debian 8 (Jessie) - univnan  06/19 16:45:55
  73 oneadmin        oneadmin        Debian 9 (Stretch) - univna  06/20 09:59:03

La commande onevnet nous permet d'avoir la liste des réseaux virtuels (vnet) disponibles :

abelard-a@UN-5CG54835CN:~$ onevnet list
  ID USER            GROUP        NAME                CLUSTERS   BRIDGE   LEASES
  66 oneadmin        oneadmin     IRTS_UNIV           0          IRTS_UNI     11
  67 oneadmin        oneadmin     IRTS_INTRA          0          IRTS_INT     14

Nous allons instancier un nouveau serveur web. Nous allons donc utiliser le patron “Serveur LAMP” qui a l'id 65, et démarrer la VM sur le réseau IRTS_INTRA qui a l'id 67 :

abelard-a@UN-5CG54835CN:/tmp$ onetemplate instantiate 65 --nic 67
There are some parameters that require user input. Use the string <<EDITOR>> to launch an editor (e.g. for multi-line inputs)
  * (ROOT_PASSWORD) root password
    Password: 
  * (SET_HOSTNAME) nom de l'utilisateur (qui determine aussi le hostname et le nom de la base donnée)
    toto
  * (USER_PASSWORD) mot de passe de l'utilisateur
    Password: 
VM ID: 1142

Notre nouvelle VM est désormais démarrée :

abelard-a@UN-5CG54835CN:/tmp$ onevm list
    ID USER     GROUP    NAME            STAT UCPU    UMEM HOST             TIME
  1111 abelard- DSI-IRTS test            runn  0.0  497.4M iaas-vm-1.  23d 23h27
  1147 abelard- DSI-IRTS é en main-1142  runn  0.0    512M iaas-vm-6.   0d 00h01

La commande onevm permet de manipuler vos VM, notamment d'afficher les informations complètes concernant une VM :

abelard-a@UN-5CG54835CN:~$ onevm show 1147
VIRTUAL MACHINE 1147 INFORMATION                                                
ID                  : 1147                
NAME                : Serveur LAMP (linux, apache, mysql, php)  clé en main-1147
USER                : abelard-a           
GROUP               : DSI-IRTS            
STATE               : ACTIVE              
LCM_STATE           : RUNNING             
RESCHED             : No                  
HOST                : iaas-vm-5.u07.univ-nantes.prive
CLUSTER ID          : 0                   
CLUSTER             : ERROR               
START TIME          : 03/06 12:28:05      
END TIME            : -                   
DEPLOY ID           : one-1147            

VIRTUAL MACHINE MONITORING                                                      

PERMISSIONS                                                                     
OWNER               : um-                 
GROUP               : ---                 
OTHER               : ---                 

VM DISKS                                                                        
 ID DATASTORE  TARGET IMAGE                               SIZE      TYPE SAVE
  0 ceph-image vda    debian8-univnantes-v7-lamp-v9       -/2G      rbd    NO
  1 -          hda    CONTEXT                             -/-       -       -

VM NICS                                                                         
 ID NETWORK              BRIDGE       IP              MAC               PCI_ID  
  0 IRTS_INTRA           IRTS_INTRA   172.26.78.17    1a:a5:78:01:00:07

SECURITY                                                                        

NIC_ID NETWORK                   SECURITY_GROUPS                                
     0 IRTS_INTRA                0

SECURITY GROUP   TYPE     PROTOCOL NETWORK                       RANGE          
  ID NAME                          VNET START             SIZE                  
   0 Ssh et ping inbound  TCP                                    22
   0 Ssh et ping inbound  ICMP-8
   0 Ssh et ping outbound UDP           172.26.4.20       1      53
   0 Ssh et ping outbound UDP           172.20.12.31      1      123
   0 Ssh et ping outbound UDP           193.52.101.123    1      123
   0 Ssh et ping outbound TCP           193.52.104.20     1      3128
   0 Ssh et ping outbound TCP           172.20.12.34      1
   0 Ssh et ping outbound TCP           172.20.12.55      2      25

VIRTUAL MACHINE HISTORY                                                         
SEQ UID  REQ   HOST         ACTION       DS           START        TIME     PROLOG
  0 -    -     iaas-vm-5.u0 none          0  03/06 12:28:33  -1d 23h58m   0h00m00s

USER TEMPLATE                                                                   
DESCRIPTION="Serveur en debian 8 avec autoconfiguration du hostname, du compte utilisateur et de la base de données. Accès utilisateur en sftp only.
20160623: image v8 : sshd PermitRootLogin: Yes"
INPUTS_ORDER="ROOT_PASSWORD,SET_HOSTNAME,USER_PASSWORD"
LABELS="DSIN"
LOGO="images/logos/debian.png"
ROOT_PASSWORD="*****"
SET_HOSTNAME="toto"
USER_INPUTS=[
  ROOT_PASSWORD="M|password|root password",
  SET_HOSTNAME="M|text|nom de l'utilisateur (qui determine aussi le hostname et le nom de la base donnée)",
  USER_PASSWORD="M|password|mot de passe de l'utilisateur" ]
USER_PASSWORD="*****"

VIRTUAL MACHINE TEMPLATE                                                        
AUTOMATIC_DS_REQUIREMENTS="\"CLUSTERS/ID\" @> 0"
AUTOMATIC_REQUIREMENTS="(CLUSTER_ID = 0) & !(PUBLIC_CLOUD = YES)"
CONTEXT=[
  DISK_ID="1",
  ETH0_CONTEXT_FORCE_IPV4="",
  ETH0_DNS="172.26.4.20",
  ETH0_GATEWAY="172.26.78.1",
  ETH0_GATEWAY6="",
  ETH0_IP="172.26.78.17",
  ETH0_IP6="",
  ETH0_IP6_PREFIX_LENGTH="",
  ETH0_IP6_ULA="",
  ETH0_MAC="1a:a5:78:01:00:07",
  ETH0_MASK="255.255.255.128",
  ETH0_MTU="",
  ETH0_NETWORK="",
  ETH0_SEARCH_DOMAIN="",
  ETH0_VLAN_ID="781",
  ETH0_VROUTER_IP="",
  ETH0_VROUTER_IP6="",
  ETH0_VROUTER_MANAGEMENT="",
  FILES_DS="/var/lib/one//datastores/2/d759a1dd941f7f5c66e06e235493f635:'context-lamp.sh' ",
  INIT_SCRIPTS="context-lamp.sh",
  NETWORK="YES",
  ONEGATE_ENDPOINT="http://one-ctrl-1.dprv.univ-nantes.prive:5030",
  ROOT_PASSWORD="*****",
  SET_HOSTNAME="toto",
  SSH_PUBLIC_KEY="ssh-rsa AAAAB3NzaC1yc2EAAAAFAPNxT6kAAAEBAIasOBPjKxfO625U92lYkw7phh1YyKk+v3Xq7ko7ID1S0GshjtrAdaQ+ihQvem3Ux6lb0LyXGRpk6I2DmaWVV87qWCB4SblgqRrtf2YBg5bMPlV6DcFapMbUUXzjZ5gwuvXJFL5AYzGnlv61OYIT8gr5+HifG/VCEcoYeWYejDlyhrzVIOJcgdnW2sm4yoaBEWncOPwCHye9+pwMqaOVRaByZE8zul+rSTVsrKdwdbpqhhw9ELg4sLjQQWkoHjkWlHEwfWEtynqU1Dcmaw6EJY1iewHCR95w+jK6zD7vS42bsnecLeAnGBDhuemDb0isHjzQOuwhYa1rnTWd1O0kQRU=",
  TARGET="hda",
  TOKEN="YES",
  USER_PASSWORD="**********",
  VMID="1147" ]
CPU="0.2"
CPU_COST="11.11"
CREATED_BY="5"
GRAPHICS=[
  KEYMAP="fr",
  LISTEN="0.0.0.0",
  PORT="7047",
  TYPE="VNC" ]
MEMORY="256"
MEMORY_COST="6"
OS=[
  ARCH="x86_64",
  BOOT="" ]
TEMPLATE_ID="65"
VMID="1147"

Une fois instanciée, une VM peut se manipuler avec la commande onevm. Par exemple, pour arrêter une VM :

abelard-a@UN-5CG54835CN:/tmp$ onevm poweroff 1142
abelard-a@UN-5CG54835CN:/tmp$ onevm list
    ID USER     GROUP    NAME            STAT UCPU    UMEM HOST             TIME
  1111 abelard- DSI-IRTS test            runn  0.0  497.4M iaas-vm-1.  23d 23h36
  1147 abelard- DSI-IRTS é en main-1142  shut  1.0    512M iaas-vm-6.   0d 00h10

Pour démarrer une VM arrêtée :

abelard-a@UN-5CG54835CN:/tmp$ onevm resume 1142
abelard-a@UN-5CG54835CN:/tmp$ onevm list
    ID USER     GROUP    NAME            STAT UCPU    UMEM HOST             TIME
  1111 abelard- DSI-IRTS test            runn  0.0  497.4M iaas-vm-1.  23d 23h45
  1147 abelard- DSI-IRTS é en main-1142  runn  0.0      0K iaas-vm-6.   0d 00h19

Il est très intéressant de pouvoir faire des snapshots de disque en guise de sauvegarde. L'usage de l'interface en ligne de commande permet en plus de pouvoir programmer ces snapshots avec un crontab. La commande à utiliser est onevm snapshot-create <vmid> <diskid> <nomsnapshot>. Le disque racine est généralement le disque 0 :

abelard-a@UN-5CG54835CN:~$ onevm show 1187
...
VM DISKS                                                                        
 ID DATASTORE  TARGET IMAGE                               SIZE      TYPE SAVE
  0 ceph-image vda    debian8-univnantes-v7-lamp-v9       -/3G      rbd    NO
  1 -          hda    CONTEXT                             1M/-      -       -
...
abelard-a@UN-5CG54835CN:~$ onevm disk-snapshot-create 1187 0 snap-$(date +"%Y%m%d")
abelard-a@UN-5CG54835CN:~$ onevm show 1187
...
VM DISK SNAPSHOTS                                                               
AC  ID DISK PARENT            DATE SIZE         NAME                            
=>   0    0     -1  04/10 21:27:08 -/3G         snap-20180410
...

Pour supprimer un snapshot, onevm disk-snapshot-delete <vmid> <diskid> <snapshotid> :

abelard-a@UN-5CG54835CN:~$ onevm disk-snapshot-delete 1187 0 0
  • wiki/documentation/avance/cli.txt
  • Dernière modification: 2020/05/19 21:13
  • de abelard-a