Aller au contenu
English
Cloud medium

Outils CLI OUTSCALE : octl, osc-cli, aws-cli

20 min de lecture

logo 3ds outscale

OUTSCALE met à disposition trois familles d'outils CLI pour piloter ses ressources en ligne de commande : octl (le CLI actuel, écrit en Go), osc-cli (le CLI historique en Python, en mode maintenance), et aws-cli utilisable sur les API compatibles AWS d'OUTSCALE. Une quatrième, oapi-cli, est archivée depuis juin 2026 et ne doit plus servir à démarrer un projet. Cette page explique comment choisir, comment installer chacun, et comment configurer ses identifiants proprement.

  • Le rôle de chaque CLI et quand l'utiliser.
  • Installer octl sur Linux, macOS et dans un conteneur.
  • Configurer ses identifiants AK/SK de manière sécurisée.
  • Faire vos premiers appels à l'API OAPI depuis la ligne de commande.
  • Configurer aws-cli pour pointer sur les endpoints OUTSCALE.
  • Choisir entre les CLI selon le contexte (nouveau projet, migration, scripting).
  • Un terminal (Bash, Zsh, PowerShell) sur Linux, macOS ou Windows.
  • Un compte OUTSCALE actif avec une paire de clés AK/SK générée depuis le Cockpit.
  • Connaître les bases de la ligne de commande Linux/macOS ou PowerShell.

Les deux lignes décisives sont Statut et API supportée. Elles suffisent à trancher dans la plupart des cas : octl est le seul développé activement tout en couvrant la totalité de l'OAPI native, tandis qu'aws-cli reste cantonné aux services compatibles AWS. Le reste du tableau départage les situations où ce premier critère ne suffit pas, par exemple une équipe déjà outillée autour d'AWS.

Critèreoctloapi-cliosc-cliaws-cli
LangageGoRustPythonPython
InstallationBinaire statique, Homebrew, conteneurAppImageVia PyPI (pip)Via PyPI ou installateur officiel
API supportéeOAPI native, OOS, support préliminaire OKSOAPI nativeOAPI native + API compatibles AWSAPI compatibles AWS uniquement
StatutRecommandé : actif, v0.0.31 en août 2026Archivé en juin 2026, déclaré dépréciéMode maintenance : correctifs seulementOutil tiers AWS, fonctionne par compatibilité
Signature des binairesSigstore, vérifiée par octl updateAucune publiéeChaîne PyPIChaîne AWS
Autocomplétion shellBash, Zsh, fishBashLimitéeBash, Zsh, PowerShell
Filtrage de sortie--jq intégré, formats table, csv, yaml, jsonPipe vers jqPipe vers jq--query (JMESPath)
Attente d'un état--waitfor sur expression jqBoucle à écrireBoucle à écrirewait sur commandes prédéfinies
Recommandation pour un nouveau projetPrivilégierÀ éviter, archivéÀ éviterSi écosystème AWS déjà en place

Le choix dépend du contexte du projet et de l'expérience de l'équipe.

Pour un projet qui démarre sur OUTSCALE, octl est le choix recommandé. Il est maintenu activement, ses binaires sont signés avec Sigstore, et il couvre l'intégralité de l'OAPI native, y compris les services propres à OUTSCALE comme FlexibleGpu ou l'empreinte carbone. Son confort quotidien pèse aussi : --jq intégré, --waitfor pour attendre un état sans écrire de boucle, et la documentation de chaque action dans --help. Le guide dédié La CLI octl le prend en main pas à pas.

Si votre équipe utilise déjà aws-cli au quotidien (scripts, CI/CD, automation), vous pouvez continuer à l'utiliser sur OUTSCALE en pointant les endpoints sur les API compatibles AWS (FCU, LBU, EIM, OOS). Cette approche limite la courbe d'apprentissage initiale, mais ne couvre pas les services propres à OUTSCALE. Pour ces derniers, octl reste nécessaire en complément.

Si vous héritez d'un projet qui utilise osc-cli ou oapi-cli, vous pouvez le conserver le temps d'une migration vers octl. Les deux anciens outils sont dans une impasse : osc-cli est en mode maintenance, et oapi-cli est archivé, donc ne recevra plus ni correctif ni nouvelle opération d'API. La migration n'est pas qu'un renommage : la syntaxe des filtres et des structures composées diffère, et la correspondance vérifiée figure dans le guide octl.

octl est un binaire statique en Go, sans dépendance à installer : ni runtime Python, ni AppImage, ni FUSE.

Fenêtre de terminal
curl -L -o octl https://github.com/outscale/octl/releases/latest/download/octl_Linux_x86_64
chmod +x octl
sudo mv octl /usr/local/bin/
octl --version

Les binaires de release sont signés avec Sigstore. Sur un poste sensible ou un runner partagé, vérifiez la signature avant d'exécuter le binaire : la procédure est publiée dans docs/signature-verification.md.

Avant de pouvoir appeler l'API, il faut fournir vos identifiants. OUTSCALE utilise une paire Access Key (AK) + Secret Key (SK) générée depuis le Cockpit (menu utilisateur > Account Settings > Access Keys).

Trois mécanismes coexistent pour passer les identifiants à octl :

C'est l'approche la plus simple pour des tests ponctuels.

Fenêtre de terminal
export OSC_ACCESS_KEY="<votre AK>"
export OSC_SECRET_KEY="<votre SK>"
export OSC_REGION="eu-west-2"
# Premier appel
octl iaas api ReadAccessKeys

Limite : les variables sont visibles dans l'historique shell et dans la liste des processus. À éviter pour un usage en production.

Approche recommandée pour un usage régulier. Le fichier de configuration permet de définir plusieurs profils (par exemple un profil par compte OUTSCALE ou par environnement).

{
"default": {
"access_key": "<votre AK>",
"secret_key": "<votre SK>",
"region": "eu-west-2"
},
"secnumcloud": {
"access_key": "<votre AK SecNumCloud>",
"secret_key": "<votre SK SecNumCloud>",
"region": "cloudgouv-eu-west-1"
}
}

Permissions du fichier : chmod 600 obligatoire pour empêcher la lecture par d'autres utilisateurs.

Fenêtre de terminal
chmod 600 ~/.osc/config.json

Usage avec un profil spécifique : la sélection se fait via la variable d'environnement OSC_PROFILE.

Fenêtre de terminal
export OSC_PROFILE=secnumcloud
octl iaas api ReadVms

Pour un usage en équipe ou en production, stocker les AK/SK dans un gestionnaire de secrets (OpenBao, HashiCorp Vault, AWS Secrets Manager via OUTSCALE) et les récupérer dynamiquement au moment de l'appel. Cette approche évite que les identifiants traînent dans des fichiers locaux ou dans l'historique shell.

Fenêtre de terminal
# Exemple avec OpenBao (script wrapper)
export OSC_ACCESS_KEY=$(bao kv get -field=ak secret/outscale/dev)
export OSC_SECRET_KEY=$(bao kv get -field=sk secret/outscale/dev)
octl iaas api ReadVms

Une fois l'authentification configurée, voici quelques appels typiques pour valider le setup.

Fenêtre de terminal
octl iaas api ReadRegions

La sortie liste les régions accessibles à votre compte. Vérifiez que eu-west-2 ou cloudgouv-eu-west-1 y figure selon votre contexte.

Fenêtre de terminal
octl iaas api ReadVms

Retourne la liste de vos VMs dans la région courante. Si la liste est vide, c'est normal, vous n'avez encore rien créé.

Fenêtre de terminal
octl iaas api CreateKeypair --KeypairName ma-cle-test

La commande retourne la clé privée dans la réponse JSON, à sauvegarder immédiatement, elle n'est affichée qu'une fois.

octl embarque un filtre jq, ce qui évite d'installer et de chaîner un outil externe. Le filtre s'applique à l'enveloppe complète de la réponse : sur un ReadVms, la liste vit sous la clé Vms.

Fenêtre de terminal
# Lister uniquement les noms et IDs de VMs
octl iaas api ReadVms --jq '.Vms[] | {VmId, State, PublicIp}'

Si vous préférez aws-cli ou si votre équipe en dépend déjà, vous pouvez l'utiliser directement sur les API compatibles AWS d'OUTSCALE.

aws-cli réutilise exactement les mêmes AK/SK que octl : aucune clé supplémentaire à générer. Le point à noter est le nom des variables, qui suit la convention AWS (AWS_ACCESS_KEY_ID) et non la convention Outscale (OSC_ACCESS_KEY). La région, elle, reste une région Outscale valide comme eu-west-2 ou cloudgouv-eu-west-1.

Fenêtre de terminal
# Identifiants OUTSCALE (mêmes AK/SK que pour octl)
export AWS_ACCESS_KEY_ID="<votre AK OUTSCALE>"
export AWS_SECRET_ACCESS_KEY="<votre SK OUTSCALE>"
export AWS_DEFAULT_REGION="eu-west-2"
Fenêtre de terminal
# Lister les instances via FCU (compatible EC2)
aws ec2 describe-instances \
--endpoint-url https://fcu.eu-west-2.outscale.com
# Lister les buckets via OOS (compatible S3)
aws s3 ls \
--endpoint-url https://oos.eu-west-2.outscale.com
# Créer un user via EIM (compatible IAM)
aws iam create-user \
--user-name dev-team \
--endpoint-url https://eim.eu-west-2.outscale.com

Pour un usage régulier, créer un profil dédié OUTSCALE dans ~/.aws/config et un endpoint par défaut par service.

Deux points de départ mènent à octl, et ils ne coûtent pas le même effort.

Depuis osc-cli, la grammaire OAPI étant la même, il suffit de remplacer le préfixe de commande :

Fenêtre de terminal
osc-cli api ReadVms # avant
octl iaas api ReadVms # après

Depuis oapi-cli, le changement de préfixe ne suffit pas. Quatre formes de l'ancienne CLI échouent telles quelles, et une commande recopiée sans adaptation rend une erreur plutôt qu'un résultat :

Ce que faisait oapi-cliSous octl
--Filters.VmStateNames '["running"]'--Filters.VmStateNames running
--Filters.VmStateNames[] runningmême forme que ci-dessus
--Tags '[{"Key":…}]'--payload '{"Tags":[{…}]}'
--colorn'existe plus, la sortie est colorée nativement

Le guide octl détaille la correspondance complète, vérifiée commande par commande.

Trois points d'attention communs aux deux migrations :

  • Le fichier de configuration ne change pas : ~/.osc/config.json garde le même format, vos profils existants fonctionnent tels quels.
  • Les nouvelles opérations de l'API n'arrivent plus que dans octl : oapi-cli étant archivé et osc-cli en maintenance, tout code qui dépend d'un ajout récent doit migrer.
  • La coexistence temporaire est possible : les trois CLI s'installent en parallèle sans conflit, ce qui permet de migrer script par script.

Tous les appels OAPI qui échouent retournent une réponse JSON structurée que les CLI affichent (octl la formate lisiblement, osc-cli peut afficher une stacktrace Python). Comprendre la structure des erreurs accélère le diagnostic.

Chaque erreur retournée par l'OAPI contient trois champs clés :

ChampRôle
CodeIdentifiant numérique unique (par exemple 5023, 10010)
TypeCatégorie fonctionnelle de l'erreur (par exemple InvalidResource, TooManyResources)
DescriptionMessage détaillé, souvent paramétré avec l'ID concerné (par exemple « The ImageId 'ami-12345678' doesn't exist. »)

Le champ Type est le premier à lire, car il oriente directement vers la correction. Un type en AccessDenied ou InvalidParameter pointe vers votre appel (identifiants, format), alors qu'un TooManyResources ou un InternalError renvoie vers la plateforme (quota atteint, incident côté Outscale). Cette distinction évite de chercher un bug dans son script quand le problème est un simple quota.

TypeQuandExemple
AccessDeniedIdentifiants invalides, MFA manquante, API Access Rules non respectéesUnmatched API access rules (1, 5, 14)
InvalidParameter / InvalidParameterValueParamètre absent ou avec une valeur non acceptéeInvalid filter ou valeur hors plage
InvalidResourceIdentifiant de ressource inexistantThe ImageId doesn't exist (5023, 5033, 5063)
InvalidStateAction incompatible avec l'état actuel de la ressourceVM in invalid state (6006, 6031)
MissingParameterParamètre obligatoire absentChamp requis non fourni
ResourceConflictConflit avec une autre ressource (doublon, dépendance)Tentative de suppression d'un Security Group encore référencé
TooManyResourcesQuota atteintMaximum VMs exceeded (10010, 10022)
DependencyProblemUne autre ressource bloque l'opérationSubnet supprimable seulement si vide
InternalErrorErreur côté plateformeÀ remonter au support si reproductible

À chaque type d'erreur correspond une première vérification qui résout la majorité des cas. Le point le plus contre-intuitif concerne InvalidResource : avant de conclure qu'une ressource n'existe pas, vérifiez la région courante, car un ID valide dans eu-west-2 sera introuvable si votre profil pointe sur cloudgouv-eu-west-1.

  • AccessDenied → vérifier les AK/SK (date d'expiration, profil sélectionné), la MFA si l'opération l'exige, et les API Access Rules (filtrage par IP).
  • InvalidParameter → relire la spec OpenAPI de la méthode pour le format exact (souvent un format de date, un préfixe d'ID, ou un type incorrect).
  • InvalidResource → vérifier d'abord la région courante (l'ID peut exister dans une autre région) puis le compte.
  • TooManyResources → consulter My Data > My Quotas dans Cockpit, prévoir une demande d'augmentation au support OUTSCALE.

La liste exhaustive des codes, types et messages d'erreur est documentée dans la référence des erreurs API OUTSCALE. À garder dans les favoris pour les sessions de debug intensives.

  • octl (Go, binaire statique signé Sigstore) est le CLI recommandé pour OUTSCALE : actif, complet, avec --jq et --waitfor intégrés.
  • osc-cli (Python) est en mode maintenance : conserver le temps d'une migration, ne plus l'utiliser pour de nouveaux développements.
  • aws-cli fonctionne sur les 4 API compatibles AWS d'OUTSCALE (FCU, LBU, EIM, OOS) en pointant les endpoints, utile si l'équipe a déjà une expertise AWS.
  • Identifiants AK/SK : variables d'environnement pour les tests, fichier de config (chmod 600) pour l'usage régulier, gestionnaire de secrets pour la production en équipe.
  • Premier appel de validation : octl iaas api ReadRegions (ou aws ec2 describe-regions --endpoint-url …) pour confirmer que l'authentification fonctionne.
  • Ne jamais commiter une AK/SK : gitleaks en pre-commit hook, rotation régulière des clés.
  • Les erreurs API retournent un triplet Code / Type / Description, la liste exhaustive est dans la référence officielle des erreurs.

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