Aller au contenu
English
Cloud medium

Brancher les CLI officiels Scaleway, Outscale et Exoscale

Read this page in English

9 min de lecture

Les trois CLI officiels pilotent feint sans modification, avec une nuance de configuration par client que feint env signale au lieu de vous laisser la découvrir. Cette page déroule les commandes courantes des trois fournisseurs, puis les familles qui vont plus loin : le stockage bloc chez Scaleway et Exoscale, la séquence d'image dorée, et les quotas.

À la fin de cette page, les trois CLI officiels créeront des ressources sur votre machine : un serveur chez Scaleway, un Net chez Outscale, un volume chez Exoscale, chacun listé par sa propre commande.

  • Pointer chaque CLI officiel sur l'émulateur sans copier une variable.
  • Lire ce que renvoie l'API quand elle diffère de ce que le CLI affiche.
  • Créer un volume bloc chez Scaleway comme chez Exoscale.
  • Dérouler la séquence d'image dorée, dans l'ordre que l'API impose.

feint env scaleway produit l'environnement dont le client officiel a besoin. La commande n'écrit que des lignes export sur la sortie standard, ce qui rend eval sûr ; les remarques partent sur la sortie d'erreur.

Fenêtre de terminal
eval "$(feint env scaleway)"
scw instance server create name=web-01 type=DEV1-S image=ubuntu_jammy zone=fr-par-1
scw instance server list zone=fr-par-1

Les variables produites pointent SCW_API_URL sur http://127.0.0.1:4599 et fournissent des identifiants bien formés mais fictifs. C'est suffisant : les SDK valident la forme des identifiants côté client avant d'émettre quoi que ce soit, et l'émulateur ne vérifie aucune signature.

Le serveur créé apparaît immédiatement en running dans la liste, alors que le protocole renvoie stopped à la création. L'explication n'est pas dans l'émulateur : scw instance server create envoie une action de démarrage juste après la création. Interrogé directement, l'émulateur répond ce que répondrait Scaleway :

{"name":"etat-initial","state":"stopped"}

Scaleway sert block : les volumes, leurs instantanés et le catalogue de types. Deux détails de forme méritent d'être connus parce qu'ils font échouer la commande avant même d'atteindre l'émulateur.

Fenêtre de terminal
scw block volume create name=donnees from-empty.size=10G perf-iops=5000 zone=fr-par-1
{"name":"donnees","type":"sbs","size":10000000000,"class":"sbs","iops":5000,"status":"available"}

La taille se note en 10G, un nombre d'octets étant refusé par le CLI là où la commande instance l'accepte, et perf-iops est obligatoire. Un détail d'implémentation vaut d'être signalé pour qui écrit un script : scw interroge /block/v1alpha1 quand le provider Terraform interroge /block/v1. Les deux orthographes répondent, ce qui évite d'avoir à choisir entre deux clients officiels du même cloud.

La séquence d'image dorée est servie de bout en bout : un instantané du volume, une image taillée dans cet instantané, puis la suppression dans l'ordre que l'API impose.

Fenêtre de terminal
snap=$(scw instance snapshot create name=snap-source volume-id="$vol" zone=fr-par-1 -o json | jq -r .id)
img=$(scw instance image create name=image-doree snapshot-id="$snap" arch=x86_64 zone=fr-par-1 -o json | jq -r .id)
scw instance image list zone=fr-par-1
["image-doree","ubuntu_jammy","debian_bookworm","debian_trixie","alpine","ubuntu_noble"]

L'image que vous créez apparaît à côté du catalogue figé, et l'ordre de suppression est celui du vrai cloud : tant que l'image existe, l'instantané dont elle est tirée refuse de partir, avec un message qui nomme le coupable.

{"precondition":"resource_still_in_use","resource":"snapshot",
"help_message":"the image 7f1db7e3-… is cut from this snapshot"}

C'est exactement l'ordre que Terraform parcourt quand un même plan retire les deux, ce qui rend ce refus utile plutôt que gênant. Une image taillée ici ne démarre toutefois rien : les octets d'un disque sont la seule chose qu'un émulateur ne peut pas fournir, et la limite est signalée au démarrage plutôt qu'à la création.

Le client officiel d'Outscale est octl, qui remplace oapi-cli, archivé en amont. Il lit l'environnement, et feint env outscale lui donne directement la bonne forme d'adresse.

Fenêtre de terminal
eval "$(feint env outscale)"
octl iaas net create --ip-range 10.0.0.0/16
octl iaas net list
Resolving alias to [octl iaas api CreateNet --output yaml --single --IpRange=10.0.0.0/16]
IpRange: 10.0.0.0/16
NetId: vpc-e3ece407
State: available

La première ligne mérite un mot : octl annonce qu'il résout un alias vers l'action d'API sous-jacente. Les alias couvrent les cas courants, et la forme générique reste disponible pour toute action, ce qui en fait le remplacement direct des anciennes commandes :

Fenêtre de terminal
octl iaas api CreateKeypair --KeypairName=lab --PublicKey="$(cat ./id.pub)"
octl iaas api CreatePublicIp
{"Keypair": {"KeypairFingerprint": "2c:d6:e1:c9:22:d7:69:ee:ec:21:af:1e:0e:af:5c:1d",
"KeypairName": "lab", "KeypairType": "ssh-ed25519"}}

En sortie JSON, la même liste montre l'enveloppe Outscale au complet, celle que votre code devra décoder : un tableau nommé par le type de ressource, et un ResponseContext qui porte l'identifiant de requête.

{
"Nets":[
{
"IpRange":"10.0.0.0/16",
"NetId":"vpc-3a31b260",
"State":"available",
"Tags":[],
"Tenancy":"default"
}
],
"ResponseContext":{"RequestId":"3b25f637-a288-4839-b4aa-c3b1a709f6bb"}
}

Le CLI exo prend son point d'accès dans son fichier de configuration, où endpoint doit valoir http://127.0.0.1:4599/v2. Notez le suffixe /v2, qui fait partie de l'adresse chez ce fournisseur.

Fenêtre de terminal
eval "$(feint env exoscale)"
exo compute instance-type list
| ID | FAMILY | SIZE |
|--------------------------------------|----------|-------|
| 21624abb-764e-4def-81d7-9fc54b5957fb | standard | tiny |
| b6cd1ff5-3a2f-4e9d-a4d1-8988c1191fe8 | standard | small |

Deux types d'instances seulement : c'est le catalogue figé de l'émulateur, pas l'inventaire d'Exoscale.

Le stockage bloc d'Exoscale est servi : volumes, instantanés, redimensionnement et chaîne d'attachement, pilotés par le CLI officiel.

Fenêtre de terminal
exo compute block-storage create lab-vol --size 10 --zone "$EXOSCALE_ZONE"
exo compute block-storage list
| ID | NAME | ZONE | SIZE | STATE |
|--------------------------------------|---------|---------|--------|----------|
| 7d4ca985-3365-44e4-aa5c-2ade17d51453 | lab-vol | ch-dk-2 | 10 GiB | detached |

L'état detached est celui d'un volume que rien ne porte encore. Chaque nombre publié par un volume dit que le stockage ne contient aucun octet : la taille est une déclaration, pas une allocation, et la page Ce que feint prouve le pose noir sur blanc.

Les quotas répondent aussi, et ils sont plus intéressants qu'ils n'en ont l'air : la limite est une valeur inventée, comme le catalogue, mais l'usage est compté depuis le magasin interne. Un exo limits sur un émulateur vierge annonce zéro instance, et un de plus après chaque création.

| RESOURCE | USED | MAX |
|----------------------------|------|-----|
| Compute instances | 0 | 100 |
| Compute instance snapshots | 0 | 100 |
| Compute instance templates | 0 | 100 |
  • feint env <fournisseur> produit l'environnement attendu ; eval suffit pour scw.
  • octl lit l'environnement avec une adresse qui porte déjà /api/v1, et exo lit son fichier de configuration avec le suffixe /v2.
  • Le CLI peut ajouter des appels : un serveur affiché running a été démarré par scw, pas par l'émulateur.
  • Le stockage bloc est servi chez Scaleway et Exoscale, avec des tailles qui ne recouvrent aucun octet.
  • La séquence d'image dorée respecte l'ordre de suppression du vrai cloud, celui que Terraform parcourt.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn