Aller au contenu principal

ADR-001 : Conception du CLI stoactl

Statut : Proposé Date : 2026-01-24 Auteur : Christophe ABOULICAM Référence : CAB-899

Contexte

STOA nécessite un CLI qui permet les workflows GitOps et l'intégration CI/CD. Les équipes DevOps s'attendent à une expérience déclarative de type kubectl pour les patterns infrastructure-as-code.

Exigences

  1. Natif GitOps : stoactl apply -f comme workflow principal
  2. UX familière : automatismes kubectl/helm/terraform
  3. Compatible CI/CD : Non-interactif, scriptable, codes de sortie
  4. Multi-contexte : Basculer facilement entre environnements
  5. Idempotent : Sûr à exécuter plusieurs fois

Décision

Créer stoactl comme un CLI séparé et déclaratif suivant le pattern kubectl.

Convention de nommage

stoactl <verbe> <ressource> [nom] [flags]
VerbeDescriptionExemple
getLister/décrire les ressourcesstoactl get apis
applyCréer ou mettre à jour depuis un fichierstoactl apply -f api.yaml
deleteSupprimer une ressourcestoactl delete api billing-api
describeVue détailléestoactl describe api billing-api
logsDiffuser les logsstoactl logs api billing-api -f
configGérer les contextesstoactl config use-context prod

Ressources

RessourceAliasDescription
apiapisDéfinitions d'API
subscriptionsub, subsSouscriptions aux API
apikeykey, keysIdentifiants API
tenanttenantsConfigurations tenant
contractuac, contractsContrats UAC
policypoliciesRate limits, CORS, etc.

Définitions de ressources (YAML)

Définition d'API

apiVersion: stoa.io/v1
kind: API
metadata:
name: billing-api
namespace: acme # tenant
labels:
team: finance
spec:
version: v2
description: "Gestion des factures et paiements"
upstream:
url: https://billing.internal.acme.com
timeout: 30s
retries: 3
routing:
path: /billing
stripPath: true
methods: [GET, POST, PUT, DELETE]
authentication:
required: true
providers:
- type: apikey
header: X-API-Key
- type: jwt
issuer: https://auth.<YOUR_DOMAIN>/realms/acme
policies:
rateLimit:
requestsPerHour: 10000
cors:
origins: ["https://*.acme.com"]
cache:
enabled: true
ttlSeconds: 300
catalog:
visibility: public
categories: [Finance, Billing]

Définition de souscription

apiVersion: stoa.io/v1
kind: Subscription
metadata:
name: mobile-app-billing
namespace: acme
spec:
apiRef:
name: billing-api
plan: premium
application:
name: ACME Mobile App
owner: mobile-team@acme.com
quotas:
requestsPerMonth: 1000000

Fichier de configuration

Emplacement : ~/.stoa/config

apiVersion: stoa.io/v1
kind: Config
current-context: production

contexts:
- name: production
context:
server: https://api.<YOUR_DOMAIN>
tenant: acme

- name: staging
context:
server: https://api.staging.gostoa.dev
tenant: acme-staging

- name: local
context:
server: http://localhost:8080
tenant: dev

Exemples de commandes

# Gestion du contexte
stoactl config set-context prod --server=https://api.<YOUR_DOMAIN> --tenant=acme
stoactl config use-context prod
stoactl auth login

# Opérations CRUD
stoactl get apis
stoactl get api billing-api -o yaml
stoactl apply -f api.yaml
stoactl apply -f api.yaml --dry-run
stoactl diff -f api.yaml
stoactl delete api billing-api

# Formats de sortie
stoactl get apis -o wide
stoactl get apis -o yaml
stoactl get apis -o json

Codes de sortie

CodeSignification
0Succès
1Erreur générale
2Mauvaise utilisation (flags incorrects)
3Authentification échouée
4Ressource introuvable
5Conflit
6Erreur de validation

Implémentation

Technologie : Go

  • Distribution en binaire unique
  • Bibliothèques CLI Cobra/Viper
  • Compilation multiplateforme
  • Familiarité avec l'écosystème kubectl/helm

Distribution

CanalCommandeStatut
Homebrewbrew install stoa-platform/tap/stoactlPrévu T3 2026
BinaireGitHub ReleasesPrévu T3 2026
Dockerdocker run ghcr.io/stoa-platform/stoactlPrévu T3 2026

Les canaux de distribution seront disponibles lorsque le CLI quittera la bêta privée. Demandez l'accès pour participer.

Conséquences

Positives

  • Les équipes DevOps disposent d'un workflow GitOps familier
  • L'intégration CI/CD est triviale
  • Les définitions de ressources sont auto-documentées
  • Gestion multi-environnements intégrée

Négatives

  • Deux CLI à maintenir (stoa interactif + stoactl GitOps)
  • Fatigue YAML pour les opérations simples

Références