Si vous utilisez régulièrement Vmware, cette présentation de Vmrest vous permettra d’automatiser le lancement ou l’arrêt de vos VMs.
Vmrest est donc l’API Rest de Vmware Workstation linux qui est fournit à l’installation de Vmware Workstation Pro.
Lancer vmrest, le demon de vmware workstation linux)
Pour lancer vmrest, rien de plus simple :
vmrest
En retour de la commande on obtient :
VMware Workstation REST API
Copyright (C) 2018-2020 VMware Inc.
All Rights Reserved
vmrest 1.2.0 build-15785246
-
Using the VMware Workstation UI while API calls are in progress is not recommended and may yield unexpected results.
-
Serving HTTP on 127.0.0.1:8697
-
Press Ctrl+C to stop.
On nous indique que l’API est disponible en localhost sur le port 8697
Petit recap des différents paramètres :
vmrest --help
VMware Workstation REST API
Copyright (C) 2018-2020 VMware Inc.
All Rights Reserved
vmrest 1.2.0 build-15785246
Usage of /usr/lib/vmware/bin/vmrest:
-c, --cert-path <cert-path>
REST API Server certificate path
-C, --config
Configure credential
-d, --debug
Enable debug logging
-h, --help
Print usage
-i, --ip <ip>
REST API Server IP binding (default 127.0.0.1)
-k, --key-path <key-path>
REST API Server private key path
-p, --port <port>
REST API Server port (default 8697)
-v, --version
Print version information
Avec ses paramètres on peut customiser un peu + notre API (créer/modifier le login/password, changer le port ou l’ip, ajouter un cert et une key ssl, etc…)
Une fois son login et password créée avec la commande vmrest -C, on peut accéder à l’interface web puis s’y connecter sur http://127.0.0.1:8697/
Une fois connecté, la liste des différentes requêtes est affichée :
On peut entre autres :
- voir l’état des VMs
- afficher les configurations réseaux
- les démarrer/stopper
- créer, modifier, supprimer des dossiers partagés
- mettre à jours, cloner et supprimer des VMs
Dans la suite de la présentation j’utilise Python pour exécuter les différentes requêtes et je vous fournirais également des fonctions automatiser Vmware.
Exemples de requêtes avec Python:
Lister toutes les VM :
http://127.0.0.1:8697/api/vms
url_liste = "http://127.0.0.1:8697/api/vms"
all_vm = requests.get(url_liste,auth=('mon_login','password'))
print(all_vm.json())
On obtient une liste en JSON de nos VM avec ID, nom et chemin.
Démarrer une VM
http://127.0.0.1:8697/api/vms/{id}/power
Pour démarrer ma VM ansible :
headers = {'Content-Type': 'application/vnd.vmware.vmw.rest-v1+json'}
vm_ansible_id = "PLHA21A50Q75U2LON5OIR0JAKE1LV9RH"
url_vm = f"http://127.0.0.1:8697/api/vms/{str(vm_ansible_id)}/power"
requete_start = requests.put(url_vm,auth=('','password'),data='on',headers=headers)
print("VM start")
Stopper une VM
http://127.0.0.1:8697/api/vms/{id}/power
vm_ansible_id = "PLHA21A50Q75U2LON5OIR0JAKE1LV9RH"
url_vm = f"http://127.0.0.1:8697/api/vms/{str(vm_ansible_id)}/power"
requete_start = requests.put(url_vm,auth=('','password'),data='off',headers=headers)
print("VM start")
Voir l’IP d’une VM :
http://127.0.0.1:8697/api/vms/{id}/ip
vm_ansible_id = "PLHA21A50Q75U2LON5OIR0JAKE1LV9RH"
url_ip = f"http://127.0.0.1:8697/api/vms/{str(vm_ansible_id)}/ip"
request_ip = requests.get(url_ip,auth=('mon_login','password'))
print(request_ip.json())
Afficher l’état d’une machine :
http://127.0.0.1:8697/api/vms/{id}
vm_ansible_id = "PLHA21A50Q75U2LON5OIR0JAKE1LV9RH"
url_vm = f"http://127.0.0.1:8697/api/vms/{id}"
r_state = requests.get(url_vm,auth=('mon_login','password'))
print(r_state.content)
Pour automatiser nos tâches sur nos VM on peut commencer par transformer ces requêtes en fonctions.
Requêtes ➡️ fonctions
On commence par initialiser notre fichier de configurations, on va y mettre nos credentials et les id de nos VMs.
config.py :
# Token :
username = "mon_login
password = "password"
# ID VMs :
vm_kali_id = "QTRUD9SGBDNRIIVDNPTLEMPQ27EGGRJI"
vm_ansible_id = "PLHA21A50Q75U2LON5OIR0JAKE1LV9RH"
id_tor = "7SG78C2NUVC74OMG8DD7PED9B06NAFLJ"
vm_postgre_id = "AMUQO97NQ0KOCG9TBBCQF4PDIQ96SA49"
On va ensuite créer nos différentes fonctions dans un fichier qui se nommera vm_fonctions.py (original hein 🙃)
vm_fonctions.py :
#! /usr/bin/python3
# -*utf-8*
import requests
import subprocess
import os
import config
headers = {'Content-Type': 'application/vnd.vmware.vmw.rest-v1+json'}
url_liste = "http://127.0.0.1:8697/api/vms"
def list_vms():
all_vm = requests.get(url_liste,auth=(config.username,config.password))
print(all_vm.json())
return all_vm
def power_on(id):
url_vm = f"http://127.0.0.1:8697/api/vms/{str(id)}/power"
requete_start = requests.put(url_vm,auth=(config.username,config.password),data='on',headers=headers)
print(f"VM start")
vm = "start"
return vm
def power_off(id):
url_vm = f"http://127.0.0.1:8697/api/vms/{str(id)}/power"
requete_start = requests.put(url_vm,auth=(config.username,config.password),data='off',headers=headers)
print(f"VM Stop")
vm = "stop"
return vm
def show_ip(id):
url_ip = f"http://127.0.0.1:8697/api/vms/{str(id)}/ip"
request_ip = requests.get(url_ip,auth=(config.username,config.password))
print(request_ip.json())
def show_state(id):
url_vm = f"http://127.0.0.1:8697/api/vms/{id}"
r_state = requests.get(url_vm,auth=(config.username,config.password))
print(r_state.content)
Voila, dorénavant vous pourrez ajouter dans vos scripts Python des fonctions pour gérer vos VMs 🚀
Si l’automatisation de machine virtuelles t’intéresses n’hésite pas à jeter un coup d’oeil à nos tutos vagrant : ICI
La Doc de Vmrest : ICI