Simulation de l'API VMware Cloud on AWS à l'aide de Docker et Stoplight Prism ...
Tags: aws, vmware, openapi, docker
Published: 2020-03-19 19:37:07

![](https://telegra.ph/file/9d09b42e8b0e0f8ef7248.png)

Dans un article précédent, j'avais parlé de VCSIM et plus globalement de Gvmomi, une bibliothèque en Go pour interagir avec les APIs VMware vSphere (ESXi et/ou vCenter) ou Pyvmomi (SDK Python pour l'API VMware vSphere qui permet également de gérer ESX, ESXi et vCenter) :

![](https://telegra.ph/file/cefee7e7c42d23405f641.jpg)

<https://dev.to/deep75/vcsim-un-simulateur-base-sur-vcenter-et-l-api-esxi-nmm>

Les API VMware Cloud sont basées sur OpenAPI (avec Swagger) et disposent d'un écosystème très riche d'outils disponibles pour les développeurs et les utilisateurs finaux. Avec OpenAPI, il est possible de "simuler" les API simplement en fonction de spécifications.

<https://code.vmware.com/apis/603/vmware-cloud-on-aws>

![](https://telegra.ph/file/4b4cf686ef1591cc1ab57.jpg)

![](https://telegra.ph/file/9e65006ca29f83a9b1b95.png)

Pour rappel, VMware Cloud on AWS fournit la pile logicielle VMware SDDC au cloud AWS hautement évolutif, y compris vSphere, vSAN, NSX et vCenter Server. Chaque SDDC comprend entre 3 à 16 hôtes, avec chacun 36 cœurs, une mémoire de 512 Go et une capacité de stockage NVMe brute de 15,2 To.

![](https://telegra.ph/file/f9aad4e4a0d631ee1f672.png)

On peut déployer un cluster VMware SDDC entièrement configuré en moins de quelques heures, et mettre la capacité de l'hôte à grande ou petite échelle en quelques minutes ...

<https://aws.amazon.com/fr/vmware/features/>

![](https://telegra.ph/file/e6ab15ec840f7569f31e5.png)

C'est vraiment utile pour le développement d'API, mais cela peut également être utile pour les utilisateurs finaux pour pouvoir essayer ces APIs. Prism Mock de Stoplight.io est un outil de simulation OpenAPI qui peut être utilisé dans ce cas ...

<https://stoplight.io/open-source/prism/>

![](https://telegra.ph/file/ba3c6fa77f5102c7c1829.jpg)

Pour cette expérience, je pars d'une instance Ubuntu 18.04 LTS dans Hetzner Cloud :

![](https://telegra.ph/file/d8fce06033acfaf71f2b1.jpg)

Avec Docker et Docker-Compose pré-installés :

<https://get.docker.com/>

<https://github.com/docker/compose/releases>

![](https://telegra.ph/file/5426c1e56de1a527676ce.png)

![](https://telegra.ph/file/d5a3c5edd1573fa92d871.jpg)

Bien que les spécifications JSON de l'API VMware vCloud on AWS soient disponibles publiquement :

-   **Cloud Services Platform Spec:** <https://raw.githubusercontent.com/lamw/vmc-api-simulation/master/vmware-cloud-services.json>
-   **VMware Cloud on AWS Spec:** <https://raw.githubusercontent.com/lamw/vmc-api-simulation/master/vmware-cloud-on-aws.json>
-   **NSX-T Policy Spec:** <https://raw.githubusercontent.com/lamw/vmc-api-simulation/master/nsx-vmc-policy-api.json>

Je peux utiliser Swagger Editor pour visualiser la documentation induite avec ces spécifications JSON. Utilisation pour cela de l'image Docker correspondante dans mon instance Ubuntu :

<https://swagger.io/tools/swagger-editor/>

![](https://telegra.ph/file/63c5f4add9572b21a17ce.jpg)

![](https://telegra.ph/file/b23aad7339decc6503bf2.jpg)

Je peux charger la spécification JSON VMware Cloud on AWS par exemple :

![](https://telegra.ph/file/e32ad2c2607e8650753c9.jpg)

![](https://telegra.ph/file/5186434eb63debea3cb5d.jpg)

![](https://telegra.ph/file/25f07c8901a5a9ee37b25.jpg)

ou celle concernant NSX :

![](https://telegra.ph/file/46c43cde887ef9732debd.jpg)

![](https://telegra.ph/file/1ac2bdb4f50fb2ae270c7.jpg)

Il faut installer l'outil Prism localement via l'utilisation d'un conteneur Docker qui facilite la configuration. Il y a deux options pour charger une spécification OpenAPI/Swagger, la première est à partir d'un fichier téléchargé localement et la seconde est de pointer vers un fichier hébergé :

![](https://telegra.ph/file/95e5cfcde3f5e69b42efe.png)

![](https://telegra.ph/file/cf6be137ad6cd0a393835.jpg)

En utilisant le client Postman, je peux expédier une requête vers Prism pour manipuler le mock de l'API :

<https://www.postman.com/downloads/>

![](https://telegra.ph/file/b2b1a8e94e83f616b7efe.jpg)

On doit fournir un en-tête obligatoire qui est le **jeton csp-auth** qui transmet normalement l'authentification et l'autorisation pour l'API VMware Cloud on AWS :

![](https://telegra.ph/file/a52552662fede1d614d65.jpg)

![](https://telegra.ph/file/8f755f56ba213125bba3e.jpg)

On peut aussi voir la réponse local avec les logs du conteneur Docker en exécution :

![](https://telegra.ph/file/0ca35ab5811fc621007a2.jpg)

Ou bien via cURL :

![](https://telegra.ph/file/3cb27757ff93413a0494e.png)

voire HTTPie :

![](https://telegra.ph/file/8f0097be9904504cd0238.png)

Création d'un SDDC avec Prism :

![](https://telegra.ph/file/aa1b5fa410487c589fe7e.jpg)

![](https://telegra.ph/file/4b2eacbd31ac9581b6926.jpg)

![](https://telegra.ph/file/1dd09d33aaad330a3a594.jpg)

ou simuler l'ajout d'un hôte ESXi :

-   **Method:** POST
-   **URL:** http://localhost:4010/orgs/1d1c83ee-e0b7-4de9-b660-9a9ca1d22f32/sddcs/1d1c83ee-e0b7-4de9-b660-9a9ca1d22f32/esxs

![](https://telegra.ph/file/0727e0be8a9120abae918.png)

Il est possible de d'obtenir une liste de définitions de services via les spécification JSON de l'API Cloud Services Platform. Lancement de l'image Docker Prism avec le chargement de ce fichier JSON :

![](https://telegra.ph/file/68ce868ba477322218cd1.jpg)

et invocation du mock de l'API pour lister ces définitions de services :

![](https://telegra.ph/file/c3dd59ad22d20f27b71e3.png)

La même chose avec les spécification JSON des politiques de NSX-T :

![](https://telegra.ph/file/fb6429a1719b0e6060686.jpg)

![](https://telegra.ph/file/1f6c553c0bf2b1ae0dc64.png)

Pour terminer, il est possible d'effectuer un mock de toutes ces APIs via Prism qui normalement ne prend en charge que le chargement d'une seule spécification OpenAPI / Swagger à un moment donné. Pour cela on peut démarrer plusieurs conteneurs Docker et on s'assure qu'ils s'exécutent tous sur des ports différents pour éviter toute collision avec Nginx en Reverse-Proxy comme seul endpoint .

Je me base pour cela sur le dépôt de William Law de VMware qui propose ces spécifications JSON à l'aide de Docker-Compose et Prism :

![](https://telegra.ph/file/3e5958a88c1868158d980.png)

![](https://telegra.ph/file/edddd43b71d7a5caeaa09.jpg)

En effet, je peux par ce biais lancer la stack YAML avec Docker-Compose à l'aide de l'image Docker de Prism pour recréer plus facilement les environnements précédents :

![](https://telegra.ph/file/6514ea7e9f43d77eeeb86.png)

![](https://telegra.ph/file/6684fd7ac4829ca27305a.jpg)

![](https://telegra.ph/file/5a99682a69841dd197cc5.jpg)

Avec cette invocation test :

![](https://telegra.ph/file/164cb1963ce73ed96a032.jpg)

![](https://telegra.ph/file/72550c350442aedc34623.jpg)

Pour conclure, VMware donne la possibilité de créer un SDDC à 1 nœud comprenant la pile complète (vSphere, vSAN et NSX-T), entièrement configuré et prêt à l'emploi pour moins de 8$/heure (prix catalogue) et commencer à explorer les API fournies par le Service VMware Cloud on AWS. D'où l'intérêt d'utilisation de mock pour avoir la possibilité de tester une partie de l'automatisation avant de recourir à un vrai SDDC ...

À suivre ! ...

![](https://telegra.ph/file/6a7c866a7ed8c4182bdfe.png)