Ajouter un commentaire

Contrôlez votre Cloud Ikoula sous NodeJS !

NodeJS devient de plus en plus une plate-forme de choix pour développer de nouvelles applications. On peut dorénavant contrôler son Cloud Ikoula de façon programmatique avec NodeJS ! Nous allons voir comment.

Pour expérimenter rapidement comment interagir avec le Cloud Ikoula sous NodeJS, quoi de plus naturel que d'utiliser des containers Docker et les déployer dans ce même Cloud Ikoula ?

 

Déployons 

Pour ce faire, il vous faudra déployer l'image CoreOS qui a récemment fait son entrée parmi les nombreuses images disponibles. Nous n'allons pas trop nous attarder sur cet aspect car ce n'est pas le sujet principal de cet article.

Une fois connecté sur votre toute fraîche coreOS, déployez un container Docker spécialisé dans le développement nodeJS depuis la registry :

core@coreos ~ $ docker pull mc2labs/nodejs-dev

Nous allons mettre en place un mini environnement de développement dans CoreOS et éditer les fichiers js node du container, nous pourrons ainsi voir le résultat de nos développements en temps réel ! 

core@coreos ~ $ mkdir nodejs

core@coreos ~ $ cd nodejs

core@coreos ~/nodejs $ mkdir app

core@coreos ~/nodejs $ mkdir logs

Le répertoire nodejs va contenir les fichiers de notre petit projet nodeJS. Dans le répertoire app nous retrouverons les fichiers de notre application et enfin logs contiendra les journaux de notre application.

 

Un meilleur vim sous CoreOS (si c'est possible)

Notez au passage que pour développer décemment sous CoreOS il vous faudra peut-être utiliser un container vim comme guyschaos/docker-spf13-vim, vous profiterez ainsi de tous les plugins utiles au développement de la distribution vim spf13, sous coreOS !

core@coreos ~ $ docker pull guyschaos/docker-spf13-vim

Ensuite pour éditer un fichier dans le répertoire courant il suffira de lancer cette commande :

core@coreos ~ $ docker run -ti -v `pwd`:/root/files/:rw --rm --name vim guyschaos/docker-spf13-vim vim /root/files/fichier_a_editer

 

Lancement du container

Nous allons devoir, pour contrôler le Cloud Ikoula, installer au sein du container le module npm csclient. C'est ce module qui intègre toute la logique de connexion, d'authentification et de passage de méthodes à l'API du Cloud Ikoula.

Pour lancer le container, un script bash suffira amplement. Créez un fichier container_launch.sh dans le répertoire nodejs avec ce contenu :

#!/bin/bash

PWD=`pwd`

docker run \

    -it \

    -p 5000:5000 \

    -v $PWD/logs:/logs \

    -v $PWD/app:/app \

    --rm \

 

    mc2labs/nodejs-dev:latest

 

Sauvegardez le fichier, puis passez le en mode exécutable :

core@coreos ~/nodejs $ chmod +x container_lauch.sh

Lancez le container :

core@coreos ~/nodejs $ ./container_launch 

 

Vous vous retrouvez à l'intérieur du container (l'id varie) dans le répertoire app (répertoire qui est le même que celui créé aux étapes ci-dessus) :

root@8549ebd011d8:/app#

 

Lancez l'installation du module node csclient qui va nous permettre d'interagir avec le Cloud Ikoula :

root@8549ebd011d8:/app# npm install csclient

csclient@0.2.4 node_modules/csclient

 

C'est fait le module est installé ! Vous pouvez quitter le container en tapant :

root@8549ebd011d8:/app# exit

 

De retour sur l'host, vous verrez dans le répertoire app/ un répertoire node_modules qui contient la librairie que vous venez "d'installer".

 

Programmons !

Maintenant que notre environnement est complet, nous pouvons commencer à créer notre premier programme de contrôle de notre Cloud Ikoula en node. Ce premier programme destiné a nous familiariser avec l'API et node ne fera rien de plus que d'afficher les machines virtuelles de notre compte :

 

Créez un fichier cs1.js dans le répertoire app et insérez-y ce code :

 

(bien évidemment  vous devez y placer vos clé secrète et API)

 

1 var CloudStackClient = require('csclient');

2

3 var options = {

4     apiKey: 'votre cle api',

5     secretKey: 'votre cle secrete',

6     serverURL: 'https://cloudstack.ikoula.com/client/api?'

7 };

8

9 var client = new CloudStackClient(options);

10

11 var handleError = function (err) {

12     if (err.name === 'APIError') {

13         switch (err.code) {

14         case 401:

15             return console.log('Unauthorized.');

16         case 530:

17             return console.log('Parameter error: ' + err.message);

18         default:

19             return console.log('API error ' + err.code + ': ' + err.message);

20         }

21     } else {

22         return console.log('Oops, I did it again. ' + err.message);

23     }

24 }

25

26 // Liste des Machines Virtuelles

27

28 client.execute('listVirtualMachines', {}, function (err, response) {

29     if (err) return handleError(err);

30

31     response = response.listvirtualmachinesresponse;

32     for (var i = 0; i < response.virtualmachine.length; i++) {

33         var vm = response.virtualmachine[i];

34         console.log(vm.name + " is in state " + vm.state);

35     }

36 });

 

Vous noterez à la ligne 28 l'appel à la fonction API de CloudStack : 'listvirtualmachines'.

Pour exécuter ce bout de code rien de plus simple ! Retournez dans le répertoire nodejs puis lancez un nouveau container et tout de suite lancez l'interprétation du fichier cs1.js:

core@coreos ~/nodejs $ ./container_launch

root@28ce7f6a614b:/app# node cs1.js

coreOS is in state Running

coreOS1 is in state Running

coreOS2 is in state Running

coreOS3 is in state Running

coreOS4 is in state Running

coreOS5 is in state Running

coreOS6 is in state Running

coreOS7 is in state Running

root@28ce7f6a614b:/app# exit

 

On constate que le programme se connecte bien et récupère une liste des machines virtuelles de notre compte et leur état de fonctionnement.

Nous avons vu comment interagir rapidement avec le Cloud Ikoula et NodeJS. On peut d'ores et déjà imaginer des cas d'usages comme la création de nouvelles machines virtuelles lancées et détruites en fonctions de tâches spécifiques nécessitant d'être accomplies, tout cela par le biais d'un site sous NodeJS, sans avoir recours à des processus externes !