Manipuler les ressources en ligne de commande
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.
installation de la CLI
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
Sur Ubuntu 24.04 :
- installer d'autres gems :
sudo gem install --http-proxy=http://cache.univ-nantes.fr:3128/ nokogiri sudo gem install --http-proxy=http://cache.univ-nantes.fr:3128/ treetop sudo gem install --http-proxy=http://cache.univ-nantes.fr:3128/ parse-cron sudo gem install --http-proxy=http://cache.univ-nantes.fr:3128/ activesupport
- corriger l'utilisation d'une fonction qui n'existe plus dans Ruby3.2. Remplacer File.exists par File.exist dans /usr/lib/one/ruby/cli/one_helper.rb line 1144.
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.
Configuration de la CLI
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.
instancier une VM
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
Voir les informations d'une VM
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"
Arrêter ou démarrer une VM
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
Faire un snapshot de disque
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 ...
Supprimer un snapshot de disque
Pour supprimer un snapshot, onevm disk-snapshot-delete <vmid> <diskid> <snapshotid>
:
abelard-a@UN-5CG54835CN:~$ onevm disk-snapshot-delete 1187 0 0