Articles sur : Développement

Aperçu des possibilités d'automatisation avec l'API Nua.ge

Cet article vous guidera pour vous montrer quelques possibilités d'automatisation avec l'API Nua.ge.


Avant de commencer ...

Nous vous conseillons grandement :



Outils nécessaires

Cet article vous demandera :

  • curl, un client HTTP (installé de base sur MAC et Linux).
  • jq, un outil de manipulation de JSON
  • bash ainsi que des compétences de base dans ce langage.


Objectif de cet article

  • Découvrir et manipuler jq
  • Aborder quelques concepts de l'API Nua.ge
  • Démarrer 5 nouvelles instances en quelques secondes ...
  • Eteindre et rallumer toutes les instances d'un projet


Connexion au service

Comme nous l'avons vu précédemment, nous devons obtenir un token JWT afin de faire tous nos appels au service. Cette fois nous allons utiliser jq afin de récupérer directement le token dans une variable d'environnement :

export TOKEN=$(curl -s -XPOST https://api.nua.ge/arya/auth -H "Content-Type: application/json" -d '{"name": "test@example.com", "password": "Sup3rP4assw0rd", "organization": "acmecorp"}' |jq -r .token)


Récupération d'une image

Nous voulons maintenant récupérer l'ID de la dernière image Ubuntu disponible :

IMAGE=$(curl -s -g -H "Accept: application/json" 'https://api.nua.ge/rockefeller/images?osName=ubuntu&order[createdAt]=desc' |jq -r '.[0].id')

Ici, nous avons filtré sur le nom de l'OS, demandé à avoir les enregistrements par date de création inversée, et avec jq nous avons récupéré l'ID du premier élément.


Récupération d'une flavor

Nous voulons récupérer une flavor avec 2 coeurs, 4Go de RAM et 100Go de disque :

FLAVOR=$(curl -s -g -H "Accept: application/json" 'https://api.nua.ge/rockefeller/flavors?core=2&ram=4&disk=100' |jq -r '.[0].id')


Récupération de notre keypair

Si notre keypair a bien été créé au préalable, il nous faut son ID:

KEYPAIR=$(curl -s -g 'https://api.nua.ge/arya/keypairs?isDefault=true' -H "Content-Type: application/json" -H "Accept: application/json" -H "Authorization: Bearer $TOKEN" |jq -r '.[] | select(.isDefault == true).id')

Ici nous avons voulu montrer comment, avec jq, récupérer la clé par défaut même quand plusieurs clés sont retournées.


Récupération de notre projet

Nous avons au préalable créer notre projet qui s'appelle "runner". On récupère donc son ID:

PROJECT=$(curl -s -g 'https://api.nua.ge/arya/projects?description=runner' -H "Content-Type: application/json" -H "Accept: application/json" -H "Authorization: Bearer $TOKEN" |jq -r '.[0].id')
Attention de bien utiliser le champ description et non name : le premier est le nom que vous avez donné au projet, alors que name est un nom interne


Création de nos serveurs

Nous allons maintenant faire une belle boucle pour créer 5 serveurs avec la configuration souhaitée.


Vérifiez bien d'avoir un quota suffisant avant de lancer vos créations, sinon vous obtiendrez des erreurs. Les quotas par défaut sur Nua.ge sont plutôt bas, vous devez faire une demande via le support pour les augmenter.


for server in $(seq 1 5); do
echo "Creation du serveur #$server ..."
curl -s -XPOST https://api.nua.ge/rockefeller/servers -H "Content-Type: application/json" -H "Accept: application/json" \
-H "Authorization: Bearer $TOKEN" -d '{"name":"runner-$server", "keypair": "/arya/keypairs/$KEYPAIR",
"project": "$PROJECT", "image": "/rockefeller/images/$IMAGE", "flavor": "/rockefeller/flavors/$FLAVOR"}' | jq -r '.id'
done


Attendons quelques secondes et récupérons l'état de nos serveurs :

curl -s -g 'https://api.nua.ge/rockefeller/servers?project=$PROJECT' -H "Content-Type: application/json" -H "Accept: application/json" -H "Authorization: Bearer $TOKEN" |jq -r '.[].state'

Ici nous avons récupéré tous les serveurs dans notre projet, puis affiché seulement le champ "state" pour chacun. Si nous avons du "on" de partout, c'est gagné !


Eteindre tous les serveurs d'un coup

Une fois encore, curl et jq vont faire le travail à notre place.

for server in $(curl -s -g 'https://api.nua.ge/rockefeller/servers?project=$PROJECT' -H "Content-Type: application/json" -H "Accept: application/json" -H "Authorization: Bearer $TOKEN" |jq -r '.[].id'); do 
echo "Extinction du serveur #$server ..."
curl -s -g -XPATCH 'https://api.nua.ge/rockefeller/servers/$server' -H 'Content-Type: application/merge-patch+json' \
-H 'Accept: application/json' -d '{"status":"off"}' -H "Authorization: Bearer $TOKEN" | jq -r '.status'
done

Vous remarquerez l'usage d'un nouveau content-type, application/merge-patch+json. Il s'agit d'un format particulier utilisé ici pour décrire une modification de notre objet de départ. En l'occurrence, nous avons changé son attribut status pour le passer à off.


Quelques pistes pour améliorer notre script

  • vous devez modifier votre script pour appliquer un ou plusieurs securityGroup, correspondant à la sécurité que vous voulez sur vos instances.
  • il serait de bon ton de rajouter du contrôle d'erreur sur tous vos appels Aidez-vous du code retour de curl.


Mis à jour le : 20/12/2021

Cet article a-t-il répondu à vos questions ?

Partagez vos commentaires

Annuler

Merci !