Kourou is coming (Pourquoi vous devriez utiliser notre CLI)

Aujourd’hui on voit des CLI de partout, tout le monde veut sa CLI : Heroku, Vue.js, React, et j’en passe.

 

Mais pourquoi cet engouement ?

 

 

English version here: https://blog.kuzzle.io/kourou-kuzzle-cli

 

Chez Kuzzle on s’est aussi posé la question de ce que nous apporterait d’avoir une belle CLI pleine de fonctionnalités, parce qu’on en avait un peu marre de curl et de wscat.

 

On a donc commencé à développer une CLI pour nous permettre de travailler plus efficacement dans nos projets quotidiens, et maintenant on aimerait la partager officiellement avec tous nos utilisateurs :-)

Have you met Kourou ?

Kourou est donc une interface en ligne de commande qui permet d’administrer son Kuzzle.

 

Mais pourquoi Kourou ? Les français qui nous lisent connaissent peut-être ce nom : il s’agit de la base de lancement des fusées Ariane en Guyane.

 

C’est une CLI multi-commandes qui utilise Oclif le framework de CLI de Heroku, et bonus pour être encore plus hype : on l’a même développé en Typescript.

 

 

 

Actuellement Kourou est en plein développement et nous ajoutons des commandes toutes les semaines.

 

Ces commandes interagissent bien sûr avec l’API de Kuzzle en se connectant et s'identifiant, mais pas que!

 

Bon allez on se lance:

$ npm install -g kourou

Lancer une stack Kuzzle

La première commande est bien sûr une commande qui lance une stack Kuzzle complète !

 

Vous pouvez même en lancer plusieurs, les numéros de port seront automatiquement décalés (7512, 7513, ...)

 

Et vous pouvez même voir les logs de vos instances ;-)

 

$ kourou instance:spawn

$ kourou instance:logs

Gérer ses clés d’API

Vous ne le saviez peut-être pas mais depuis Kuzzle v2 vous pouvez vous connecter avec des clés d’API.

 

Kourou propose de les créer, de les supprimer et de les lister depuis votre terminal.

 

$ kourou api-key:create aschen --description "Awesome API key"

🚀 Kourou - Creates a new API Key for a user

[] Connecting to http://localhost:7512 ...

Successfully created API Key "8Og2wnABna5MX9iEmgsX" for user "aschen"

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJhc2NoZW4iLCJpYXQiOjE1ODM4MDYzMjN9.hWV3Y2QJKH_AFYa9DoFRRmzM4EvMFWzeIzYEDwUpCYU

 

$ kourou api-key:search aschen

🚀 Kourou - Lists a user's API Keys.

[] Connecting to http://localhost:7512 ...

2 API Keys found for user aschen

- Key "8Og2wnABna5MX9iEmgsX"
Description: Awesome API key
Expires at: -1

- Key "8ug3wnABna5MX9iEtwua"
Description: Too lazy to login key
Expires at: -1

 

Vu la simplicité, vous n’avez plus d’excuses pour ne pas les utiliser ;-)

Dumper et restaurer les données de Kuzzle

On connait tous la frustration d’un bug présent sur le serveur mais pas reproductible en local à cause de différences en base de données.

 

Avec Kourou il est possible de facilement dumper tout un index, ou une collection, pour ensuite les ré-importer ailleurs !

 

$ kourou index:dump corona-data --path /backups
 🚀 Kourou - Dump an entire index content (JSONL format)
 
 [] Connecting to https://localhost:7512 ...
 Dumping index "corona-data" in ./backups/corona-data/ ...
 Dumping france |========================================| 100% || 42/42 documents
 Dumping italie |========================================| 100% || 21/21 documents
 Dumping espagne |========================================| 100% || 84/84 documents
 [] Index corona-data dumped

 

$ kourou index:restore /backups/corona-data  
🚀 Kourou - Restore the content of a previously dumped index
 
 [] Connecting to http://localhost:7512 ...
 [] Start importing dump from /backups/corona-data in same index
  [] Successfully imported 42 documents in "corona-data:france"
  [] Successfully imported 21 documents in "corona-data:italie"
  [] Successfully imported 84 documents in "corona-data:espagne" 
 [] Dump directory /backups/corona-data successfully imported

 

Le format utilisé est du JSONL, portable et lisible. Kourou gère les forts volumes permettant d'importer ou d'exporter des millions de documents facilement.

Chiffrer et déchiffrer le Vault

Le Vault pour partager les secrets d’un projet c’est cool mais utiliser Kourou pour le gérer c’est carrément hype !

 

Vous pouvez facilement ajouter une clé à un fichier existant sans devoir tout déchiffrer puis chiffrer à nouveau.

 

$ kourou vault:add secrets.enc.json kuzzle.apiKey some-key --vault-key vault-password
 
 🚀 Kourou - Adds an encrypted key to a secrets file
 
 [] Key "kuzzle.apiKey" has been securely added to "secrets.enc.json"

 

Et si vous avez oublié ce que contenait telle ou telle clé d’API, rien de plus simple, vous pouvez afficher le contenu d’une clé en une seule ligne.

 

$ kourou vault:show secrets.enc.json kuzzle.apiKey --vault-key vault-password     
 
 🚀 Kourou - Prints an encrypted key.
 
 [] Key "kuzzle.apiKey" content:
 some-key

Balancer des requêtes directement à Kuzzle

L’API de Kuzzle est assez conséquente et on ne va pas la reproduire à l’identique dans Kourou (du moins pas tout de suite).


Mais pas de panique, on a ajouté la commande query qui permet d’envoyer directement une requête en spécifiant contrôleur, action, arguments et body ;-)

 

$ kourou query index:create --arg index=corona-data
 
 🚀 Kourou - Executes an API query
 
 [] Connecting to http://localhost:7512 ...
 Successfully executed "index:create"

 

$ kourou query admin:loadMappings < mappings.json
 
 🚀 Kourou - Executes an API query
 
 [] Connecting to http://localhost:7512 ...
 Successfully executed "admin:loadMappings"

Et plein d’autre choses !

De nouvelles commandes sont ajoutées dès qu’on en trouve l’utilité, vous pouvez par exemple gérer vos documents ou envoyer des requêtes directement à Elasticsearch.

 

La liste complète est disponible dans le README sur Github ou en tapant kourou --help

Conclusion

Vous l’aurez compris, Kourou c’est l’outil dont vous aviez besoin pour être encore plus productif avec Kuzzle ;-)

 

Si vous avez des idées de fonctionnalités à ajouter, n’hésitez pas à nous le proposer en ouvrant une issue sur Github!
Ou encore mieux, essayez de la développer vous-même et faites une PR, on adore ça :-)

Alexandre Bouthinon

Postes associés