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.
Ce que vous allez obtenir
Section intitulée « Ce que vous allez obtenir »À 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.
Scaleway avec scw
Section intitulée « Scaleway avec scw »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.
eval "$(feint env scaleway)"scw instance server create name=web-01 type=DEV1-S image=ubuntu_jammy zone=fr-par-1scw instance server list zone=fr-par-1Les 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"}Le stockage bloc Scaleway
Section intitulée « Le stockage bloc Scaleway »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.
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
Section intitulée « La séquence d'image dorée »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.
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.
Outscale avec octl
Section intitulée « Outscale avec octl »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.
eval "$(feint env outscale)"octl iaas net create --ip-range 10.0.0.0/16octl iaas net listResolving alias to [octl iaas api CreateNet --output yaml --single --IpRange=10.0.0.0/16]IpRange: 10.0.0.0/16NetId: vpc-e3ece407State: availableLa 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 :
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"}}Exoscale avec exo
Section intitulée « Exoscale avec exo »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.
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 Exoscale
Section intitulée « Le stockage bloc Exoscale »Le stockage bloc d'Exoscale est servi : volumes, instantanés, redimensionnement et chaîne d'attachement, pilotés par le CLI officiel.
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
Section intitulée « Les quotas »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 |À retenir
Section intitulée « À retenir »feint env <fournisseur>produit l'environnement attendu ;evalsuffit pourscw.octllit l'environnement avec une adresse qui porte déjà/api/v1, etexolit son fichier de configuration avec le suffixe/v2.- Le CLI peut ajouter des appels : un serveur affiché
runninga été démarré parscw, 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.