Christophe Casalegno

Jouons un peu avec l’API OVHCloud en BASH sous Gnu / Linux

ovh cloud api request

Hello, ce petit post vient en complément de la vidéo que je viens de poster à ce sujet et que vous pouvez consulter ci-dessous. Le script bash, dont vous trouverez le lien plus bas, est comme les précédents placés sous licence GPL 3.

BOAP pour Brain Ovh API Player est un script bash permettant de « jouer » avec l’API OVHCloud simplement. Il n’y a pas de dépendance particulière à prévoir, mise à part python -mjson.tool que j’utilise pour décoder le JSON et qui peut également être remplacé par jq.

L’architecture est assez simple :

1) un fichier secret.cfg contient les informations d’identification et d’authentification de l’application sur l’API OVHCloud (anciennement OVH). Son format est très simple :

CONSUMER_KEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
APP_KEY="xxxxxxxxxxxx"
APP_SECRET="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

2) api_request est la fonction centrale du script : elle permet d’exécuter les requêtes sur l’API OVH. Rien de très spécial dans cette fonction qui se contente d’appeler curl avec les bons headers. Une remarque cependant : la génération de l’entête X-Ovh-Signature m’a demandé quelques essais car il s’agit à la fois d’une concaténation d’éléments fixes et dynamiques qui sont ensuite « hachées » en sha1 pour générer une clef unique par requête. J’ai écrit le code de manière à ce qu’il reste cependant lisible et compréhensible.

ovh cloud api request

3) Une fonction answer (issue de mon script de morpion / tic-tac-toe en bash) permet d’ajouter à volonté des messages de réponse pour des évolutions futures.

4) La sortie du script peut être repassée à ce dernier, ainsi par exemple un ./boap.sh vrack_list |xargs -l ./boap.sh vrack_info affichera l’intégralité des informations de l’intégralité des vracks. L’essentiel des fonctions que j’ai implémenté ici sont volontairement des GET (des fonctions en lecture seulement). Je n’ai mis que la fonction de reboot en POST pour éviter une utilisation dangereuse du script par quelqu’un qui ne le maîtriserait pas. Attention aux opérations massives. Ainsi par exemple un ./boap.sh servers_list |xargs -l ./boap.sh serveur_NEFAITEPASCACHEZVOUS_reboot lancera un reboot de l’intégralité de vos serveurs même s’il y en a 5000…

5) Les fonctions tel que server_info, nasha_info, lb_farms ou encore lb_frontends contiennent également des boucles for simples qui vous donnent de bons exemples que vous pouvez facilement répliquer sur d’autres endpoints. Au final beaucoup de requêtes peuvent être effectuées avec un simple api_request « GET/POST » « /endpoint »

6) L’exemple pour la facturation contient un filtre sur les champs url, password et text. Il suffit de supprimer le |grep xxxx correspondant pour avoir l’intégralité de la sortie avec les liens vers les factures.

7) Un simple case « $OPTION13 in gère à la fin du fichier l’ensemble des options, il est là encore très facile d’en supprimer ou d’en rajouter :

8) La commande « help » affiche l’ensemble des options disponibles (pensez à la mettre à jour si vous rajoutez des options) et si vous affichez une commande qui n’existe pas, vous serez invité à utiliser la commande help. Je ne l’ai fait que pour les options principales, pas pour les éventuelles options secondaires comme « status », mais je le rajouterai peut être.

N’hésitez pas à me faire part de vos retours et questions.

Vous pouvez télécharger le script via le lien suivant : boap.sh

Enjoy!


Christophe Casalegno
​Vous pouvez me suivre sur : Twitter | Facebook | Linkedin | Telegram | Youtube

5 Commentaires

  1. Bonjour,

    Je vous remercie de ce script qui fonctionne parfaitement, et il est très pratique pour faire un inventaire OVH.

    Cordialement

  2. julien durdilly · octobre 7, 2021 at 10:15 am · Répondre

    Bonjour,
    et merci!
    le wrapper php fourni par OVH étant tout cassé pour certains appels (dont j’ai besoin :) )
    je me suis permis de réutiliser votre fonction api-request pour mon usage.

    Simple, efficace, merci encore.

    Je vous crédite dans les commentaires du script (même si personne d’autre que moi ne les lira jamais ;) )

  3. Merci beaucoup pour ce script !

    J’en ai profité pour rajouter une fonction domains_list afin de pouvoir lister les domaines, pour pouvoir ensuite exporter les zones DNS :

    function domains_list()
    {
    api_request « GET » « /domain/zone » |cut -d ‘ »‘ -f2
    }

    (…)
    function help()
    (…)
    domains_list) domains_list ;;
    (…)
    case « $OPTION1 » in
    (…)
    domains_list) domains_list ;;

    • Bonjour Florent et merci pour ta contribution. Entre temps j’avais rajouté un exportateur de zone, je ne sais pas si c’est la même chose que ce que tu fais : (

      [code]
      function zone_export()
      {
      api_request "GET" "/domain/zone/${OPTION2}/export" |sed 's/,//g' |sed 's/\\n/\'$'\n''/g'
      }
      [/code]

Laisser un commentaire

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