Ca faisait longtemps dites-moi ! Longtemps, en effet, que je n’avais pas posté de la bidouille technique ! Pour un vendredi, cela va vous rafraîchir un peu j’en suis sûr, après les nombreux billets plutôt marketingo-stratégiques et les annonces VMUGFR. Aujourd’hui, je vous propose un petit tutoriel qui concernera sans doute un public de niche, puisque je vais détailler un script PowerShell que j’ai construit et qui consiste à provisionner automatiquement un Virtual DataCenter sur vCloud Director et tout ce qu’il est sensé contenir, à savoir les réseaux internes, Edge Gateway, vApp, importation de VMs etc.

Ce travail de scripting fait suite à un projet d’hébergement régional dont nous avons la charge dans les semaines qui viennent. L’objectif, sans rentrer dans le détail, consiste à déployer un certain nombres d’environnements d’une quinzaine de machines virtuelles chacun. Ces environnements sont de type n-tier, utilisant des segments de réseau différents, dont l’interconnexion est assurée par une Edge Gateway filtrante. Globalement, nous avons au moins 4 bulles vCloud à déployer. Autant dire qu’un peu d’automatisation ne peut pas faire de mal ^^.

Le scripte PowerCLI suit une logique compatible avec les concepts de vCloud Director, à savoir :
– Création de l’Organisation et paramétrage
– Création du Virtual DataCenter et paramétrage (notamment vis à vis du Storage Profile)
– Création de la Edge Gateway
– Création des réseaux VDC connectés à cette Edge (7 segments au total)
– Création des vApp et ajout des réseaux utiles à chacune d’entre elles
– Importation des VMs dans les bonnes vApp et connexion réseau sur le bon segment

Même si l’ensemble du code est très dirigé vers l’objectif initial, il est sans problème ré-utilisable pour d’autres Use Cases et d’autres types d’architecture. Il peut donc servir facilement de base de travail pour d’autres chantiers. Ce sera à vous de vous en inspirer au besoin !

Paramètres sources

Tout le script s’appuie sur des paramètres de base définissant les règles de nommage et les connexions des éléments les uns avec les autres :

Les listes de VM, vApp, réseau ect, permettent d’assurer la cohérence et les connexions des éléments entre eux. Les champs son séparés par des espaces et splittés lors de leur parcours dans le code qui suit.

Création de l’organisation et du virtual datacenter

La création de l’organisation et du VDC ne posent pas de souci particulier. Leur paramétrage en revanche m’a pris pas mal de temps, car autant il existe des docs assez simples pour utiliser les directives PowerCLI, autant le paramétrage des objets vCloud nécessite pas mal de connaissance dans la structure de ceux-ci, ainsi que d’utiliser aussi les documents de référence de l’API elle-même. Pas forcément simple quand on débute :)

Création de la Edge Gateway

La création de la Edge gateway est sans doute la partie qui m’a pris le plus de temps, car le code fait appel à de nombreux objets qu’il faut enchaîner correctement. Je me suis beaucoup aidé de threads au sein de la communauté VMware. Je vous mets toutes les références importantes dont je me suis inspiré en fin d’article. Aujourd’hui, je ne suis pas complètement satisfait du résultat car la partie déclaration des règles Firewall est encore trop artisanale pour que je vous la présente. Mais je ne désespère pas de vous faire un petit add-on d’ici quelques temps :)

Création des réseaux et connexion de ceux-ci sur la Edge Gateway

La encore, une fois que la source d’inspiration est trouvé et interprétée, la logique est relativement simple : on décrit les paramètres de base, on indique la référence à la Edge Gatway à laquelle le réseau est rattaché, et instancie. Vous noterez-ici que le tableau “netList” est utilisé en splittant chaque enregistrement de texte grâce au séparateur espace. Ensuite, chaque champ est utilisé pour le paramétrage.

Création des vApp et ajout, pour chacune, des réseaux VDC

Ici, on va utiliser respectivement les deux tableaux $vAppList et $vAppNetList qui vont permettre de constituer le schéma logique d’interconnexion des vApp. Vous devez en effet au préalable ajouter un réseau VDC au sein de la vApp pour pouvoir l’utiliser en suite et connecter des VMs sur celui-ci.

Import des VMs “template” au sein de vCloud Director

Enfin, on termine par la création des VMs dans vCloud.

Les VMs sont donc importées via copie des VMs sources, situées dans le vSphere support de vCloud Director. Une fois l’import terminé, on vient chercher la carte réseau de la machine et la connecter au bon segment de réseau.

Conclusion

Tout d’abord, je précise que ce script n’a pas vocation à être un cadre vraiment générique à toute automatisation d’un import vCloud. En effet, il est tout de même très orienté en matière de structure et adapté à l’architecture souhaitée (une seule Edge Gateway, plusieurs segments réseau, tous en VDC. On aurait pu utiliser aussi les réseaux de vApp, etc). D’autre part, sa présentation est sans doute assez “dirty” comme disent les anglais. Ceci dit, il permet aussi de voir comme il est facile (environ une journée de travail pour le mettre au point) de piloter un vSphere/vCloud pour réaliser des tâches rébarbatives et se simplifier la vie.

J’espère qu’il vous donnera l’envie, si vous n’avez pas déjà eu la curiosité, de vous y mettre. Ce sera d’autant plus facile pour ceux qui maîtrisent déjà PowerShell, évidemment ^^. Je suis à votre disposition dans les commentaires pour détailler certains points ou difficultés que j’ai pu avoir, au besoin.

Mes principales sources :
https://900footvm.wordpress.com/2014/06/03/creating-a-vcloud-director-organization-with-powercli/
https://communities.vmware.com/thread/578644
https://communities.vmware.com/thread/566044
https://code.vmware.com/forums?id=2530

et d’une manière générale : https://code.vmware.com/, une véritable bible pour tout développeur VMware !