Nutanix – Calm : Automatiser la création d’image disque avec un Runbook

Runbook

Pour différents cas d’usage vous pouvez être amené à devoir créer des images disques à partir de VMs existantes pour les réutiliser dans plusieurs scénarios (Image disque dans des blueprints ou comme template pour la création de nouvelle VM).

Cette opération uniquement possible en CLI sur CVM (et depuis peu en GUI sur Prism Central : Source ) peut s’avérer fastidieuse et nécessiter des droits que vous n’avez pas délégué à vos utilisateurs (surtout pour la CLI).

Pour automatiser cette partie là, j’ai créé un petit Runbook sur Nutanix CALM qui moyennant quelques appels API va venir automatiser ce process.

C’est aussi l’occasion de présenter au travers de cet article les possibilités offertes par un Runbook dans Nutanix CALM.

Le runbook est disponible sur mon github ici : Github runbook

Les Runbooks

Sur Nutanix CALM, les runbooks donnent la possibilité d’exécuter des tâches redondantes sur des points de terminaisons (appelés Endpoints) en se basant sur des conditions/dépendances. Par ce biais, on est en mesure par exemple d’exécuter la mise à jour d’un serveur applicatif ou BDD en arrêtant au préalable un proxy qui permet d’y accéder.

Les endpoints peuvent être de type :

  • HTTP (pour attaquer une API par exemple)
  • VM (Windows ou Linux)
  • IP Address (pour par exemple attaquer des machines physiques Windows/Linux)

Sur ces endpoints, nous allons pouvoir exécuter des actions de types :

  • Exécutions de scripts (Escript, Shell, Powershell)
  • Faire des appels API
  • Exécuter des actions baser sur une décision
  • Exécuter des Loop While

Ces dernières nous permettent donc de conditionner nos actions.

Présentation du Runbook d’automatisation des création d’image

Note : les procédures d’utilisation détaillées sont disponibles dans le CALM Administration Guide

Pré-requis :

  • Avoir activé CALM
  • Avoir créé un projet dans CALM
  • Avoir un compte local à Prism (dédié à cet usage) en mesure d’utiliser l’API

Création du Endpoint

Dans mon cas, je vais essentiellement faire des appels à l’API de Prism Element. J’ai donc créé mon Prism Element comme un endpoint HTTP :

Endpoint
Endpoint

Création des différentes étapes

Pour créer une image de disque, il faut que la machine soit au préalable éteinte. Voici donc les

différentes étapes du runbook qui vont utiliser différents types de tasks.

  • Récupération de l’UUID de la VM en fonction d’un nom de VM en paramètre
  • Récupération des informations sur le vdisk (dans mon exemple, mon disque système est très souvent labelisé scsi.0, c’est toujours le disque que je créé en premier et dont je me sers pour les images, libre à vous de modifier cette partie là)
  • Vérification du status de la VM (ON ou OFF)
  • Décision sur la nécessité d’éteindre la VM
  • Création de l’image
  • Loop sur la fin de la tâche de création de l’image
  • Allumage du modèle source

Ce qui va donner dans le Runbook :

 

Runbook
Runbook

 

Création des variables

Lors de la création du runbook, j’ai ajouté les variables suivantes, qui vont pour certaines être instanciées par des actions et pour d’autres être spécifiées par l’utilisateur au lancement du runbook (Nom de la VM, Nom de l’image).

Runbook Variables
Runbook Variables

 

Quelques étapes

Vous pouvez retrouver l’intégralité des étapes dans le blueprint en question. Mais voici quelques exemples de plusieurs types de tâches :

 

Tâche HTTP request pour récupérer les informations sur la VM

http-request
http-request

Dans cet exemple, je vais récupérer les informations sur la VM (UUID, Status) qui vont m’être nécessaires dans la suite du runbook via un call API. Ici j’appel la ressources vms, sur mon endpoint PrismElement de type HTTP. Ensuite je viens setter mes variables VM_State et VM_UUID avec du JSONpath en filtrant sur le nom de ma VM.

Tâche de décision sur l’état de ma machine

decision
decision
Decision task
Decision task

Comme la machine à besoin d’être éteinte pour construire l’image, le runbook vient s’assurer vérifier que le status récupérer dans les informations de la VM est bien sur OFF. Donc avec une tâche de type Décision, je viens vérifier (avec un EScript) cette valeur et éteindre ma VM (via un call API en POST) si la valeur n’est pas sur OFF.

Tâche de type WhileLoop

 

WhileLoop Step
WhileLoop Step
Loop task
Loop task

Via un call API visible dans le runbook, après l’extinction de la machine, une tâche de création de VM a été créé (et a renvoyé un task_uuid) mais sans me donner le status de la tâche.

J’ai donc créé une tâche de type WhileLoop qui vient vérifier que la tâche est bien terminée (status de la tâche en succeed) par un appel à l’api tasks à chaque itération dans la limite de 20 itérations. Le script python arrête de s’exécuter si le status est sur succeed avec un exit(0).

Ces différentes tâches nous donnent donc le runbook suivant qui est conditionné par des decisions et qui automatise le processus de création d’image de bout en bout, de l’extinction de la VM à son rallumage.

Runbook Global
Runbook Global

Il ne reste plus qu’a le lancer et monitorer l’exécution de chaque steps… et vérifier son image :

Image Verification
Image Verification

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *