VMREST l’API Vmware workstation linux

api vmware workstation linux vm

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/

api vmware localhost

Une fois connecté, la liste des différentes requêtes est affichée :

vmrest python
api vmrest vmware

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

Laisser un commentaire