Versions et compatibilité
Où en est StackNGO
StackNGO est en préversion. Tout ce qui est documenté ici fonctionne, mais les interfaces peuvent encore évoluer. Chaque page porte un badge qui dit si la fonctionnalité est disponible, en bêta ou en préparation ; ce journal annonce les changements.
Ce que v1alpha1 veut dire
Tous les manifestes sont en version v1alpha1. Concrètement :
- Ajouts sans rupture : de nouveaux champs optionnels, de nouvelles valeurs d'énumération, de nouvelles conditions peuvent apparaître à tout moment. Un manifeste valide aujourd'hui le reste.
- Changements incompatibles possibles, mais annoncés : un champ peut être renommé, déplacé ou rendu obligatoire. Ces changements sont listés ici avec la marche à suivre, et l'ancien champ reste accepté pendant au moins une version intermédiaire quand c'est possible.
- Le passage à
v1beta1marquera la stabilisation : à partir de là, aucune rupture sans nouvelle version d'API et conversion automatique.
Le status des ressources suit la même règle : les reason documentées sont stables, de
nouvelles peuvent s'ajouter.
CLI
La CLI suit un versionnage sémantique. Tant qu'aucune version n'est publiée, elle s'installe
depuis les sources et affiche dev. Les commandes marquées bêta peuvent changer de flags ;
les commandes disponibles ne changent qu'avec une version majeure.
API HTTP
- Le préfixe
/v1est stable. Les routes marquées bêta dans la spécification OpenAPI (x-stackngo-status: beta) peuvent changer de forme. - Les champs de réponse ne sont jamais retirés sans annonce ; de nouveaux champs peuvent apparaître. Un client doit ignorer les champs qu'il ne connaît pas.
- Les champs de requête inconnus sont refusés (
400) : un client qui envoie un champ encore non déployé reçoit une erreur claire plutôt qu'un silence.
Journal
0.0.1 Beta — Authentification de vos utilisateurs
- Annuaire par tenant : les utilisateurs de vos applications ont un annuaire propre à votre tenant, disponible dès sa création (plus de
sng iam init). Invitation ou inscription ouverte, connexion sans mot de passe (lien envoyé par e-mail, Google, GitHub, GitLab, Microsoft, LinkedIn, OpenID Connect, passkeys), blocage de comptes, rôles et permissions. Voir Utilisateurs de vos applications. - OIDC : une
IAMApplicationavecdirectory: tenantse connecte à l'émetteur de votre tenant ; les jetons portenttenant,rolesetpermissions. Voir Authentification de vos applications. - Page de connexion personnalisable (logo, couleurs, thème, textes) avec aperçu dans la console, et nouveau Kind
IAMProviderpour les fournisseurs de connexion. - CLI :
sng iamest refondu (user,invitation,role,app,provider,login-page). Retirés :sng iam init,config,group,user create|update,role assign|unassign|resources|sub|group,app link|unlink; les rôles se créent avecsng iam role create --permission. Voirsng iam. - Manifestes :
IAMApplicationgagne le champdirectory(platformpar défaut,tenant) ;IAMRoleetIAMGroupne déclarent plus les rôles de vos utilisateurs. - Console : nouvelle section Authentification (utilisateurs, rôles, applications, fournisseurs, page de connexion).
0.0.1 Beta — Éditeur de ressources de la console
- Console : un éditeur unique, avec deux onglets synchronisés Formulaire et YAML,
crée et modifie vos ressources (Registre, Supervision, Applications, Créer une ressource).
Création depuis un gabarit ou un squelette minimal, plusieurs objets séparés par
---, refus affichés sur le champ concerné, utilisable sur téléphone. Voir l'éditeur de ressources.
0.0.1 Beta — Correctifs
- Registre : le Kind
ZotRepositoryest renomméRegistryRepository(etZotRobotest devenuRegistryAccessKey) ; réappliquez vos manifestes avec le nouveau Kind. - Registre : l'ancien secret d'un
RegistryAccessKeyreste accepté 24 h après un renouvellement (au lieu d'une heure), réglable de 0 à 720 h avecspec.graceHours. - Identité :
assignableRoles(IAMApplication) etassignableByApplications(IAMRole), qui étaient acceptés sans effet, sont désormais refusés avec la raisonUnsupportedConfiguration.childRolesdésigne maintenant un autreIAMRolepar son nom ; un nom inconnu donneInvalidReference. Les policies gérées affichent une description. - Supervision : un canal de notification dont le secret manque n'empêche plus les autres
canaux d'alerter ; il affiche la raison
SecretNotFound. - DNS : un
DNSRecordappliqué parsng applyexige uneDNSZonedéclarée, commesng dns record set; supprimer uneDNSZonequi a encore des enregistrements est refusé (409) quelle que soit la commande.sng dns zone createaffiche directement leTXTà poser. - Accès CI (OIDC) : un émetteur de la plateforme est refusé dès la création du trust ; sans
audiences, l'URL de l'API est retenue ;sng tenant oidc getaffiche le résultat de la vérification de l'émetteur. - API : les erreurs
415et429sont en JSON comme les autres ; la limite de débit passe à 300 requêtes par minute et par adresse IP ; l'en-têteX-Tenant-Tokenest refusé sur toutes les routes. - CLI :
sng tenant useetsng tenant assumedisent quoi faire quand l'accès manque ;sng iam app linkfonctionne ;sng sso login --client-credentialsaccepte--client-id(ouSTNG_OAUTH_CLIENT_ID) ;sng monitor createprend5mpar défaut, accepté par tous les tiers ;sng apply,plan,list,editetdeleteaffichentKind/nom;sng registryrespecte--tenantsur toutes ses commandes, affiche le digest une seule fois, etbuildanalyse l'image avectrivysur votre poste (--registry-scanpour l'analyse du registre). - Secrets : un secret supprimé se restaure avec toutes ses versions
(
sng secret restore,POST /v1/secrets/{name}/restore, actionssm:write). La rotation planifiée s'annule sans toucher la valeur (POST /v1/secrets/{name}/rotate/cancel, actionssm:rotate) ; unSSMSecretqui porterotateDaysla réarme. Avecspec.materialize: true, unSSMSecretest utilisable par vos sites statiques et vos canaux de notification, même si aucune App ne le lit. - Applications : une App tire les images du registre de la plateforme sans
imagePullSecrets(robotdefault-pullen lecture dans chaque tenant). Un service exposé n'estReadyqu'une fois son certificat HTTPS émis. Nouvelles raisons :RegistryAccessPending,CertificatePending,DNSConflict(nom de domaine déjà pris dans le DNS, auparavant silencieux). - État des ressources :
sng kind get KIND NAMEaffiche l'état observé en commentaires sous le manifeste, et--json(commeGET /v1/resources/{kind}/{name}) inclutstatus, pourApp,SSMSecret,CDNSite,RegistryRepository,RegistryAccessKey,IAMApplication,IAMRoleetIAMGroup. - Registre :
sng registry robot credentials NAME [--show-password](etGET /v1/registry/robots/{name}/credentials, actionregistry:admin) remet les identifiants d'un robot à un outil sans session. - Identité :
sng iam role assignetsng iam group add-useracceptent le nom du manifeste d'unIAMRoleou d'unIAMGroup(409tant qu'il n'est pas prêt).deletionPolicy: Blockattend que la ressource ne soit plus utilisée, avec un message qui dit par quoi, puis la supprime : la recréer sous le même nom fonctionne. - Sites statiques : chaque dossier sert son
index.html(/docs/intro/et/docs/intro) ; une page introuvable n'est plus gardée en cache que 30 secondes ; HTTPS automatique pour chaque site. - Tiers : grille
3XS,2XS,XS,S,M,L,XL,2XL,3XL, tenant créé en3XS; les anciens nomsXXS,XXLetXXXLrestent acceptés. Un tenant existant garde ses ressources sous le nom correspondant de la nouvelle grille. - Déconnexion :
sng sso logoutetPOST /v1/iam/logoutmettent réellement fin aux sessions, en quelques secondes : la session présentée, ou toutes les sessions du compte avec le jeton d'identité. Une session terminée reçoit401.
2026-10 — Refonte de la documentation
- Nouvelle documentation : manifestes, CLI et API documentés depuis le code, en français et en anglais.
- La spécification OpenAPI est servie par l'API sur
GET /v1/openapi.yaml. - Fonctionnalités en bêta : DNS (
DNSZone,DNSRecord,sng dns), registre d'images (sng registry), supervision (Monitor,NotificationChannel,StatusPage), accès CI par OIDC (IAMOIDCTrust,sng tenant oidc), tiers de tenant (sng tenant tier). - En préparation : OpenTofu (
Workspace,Provider), API générées (GeneratedAPI).
2026-09 — Secrets déclaratifs et rotation
SSMSecret: secret déclaré par manifeste, valeur générée par la plateforme, rotation périodique (spec.rotateDays).sng secret setsans valeur génère une valeur aléatoire ; flags--length,--contains,--rotation.- Rupture :
sng secret rotatene prend plus de valeur en argument ; la nouvelle valeur est générée ou fournie par--key/ flags de génération.
2026-09 — Identité v5
- Un seul jeton par requête ; l'en-tête
X-Tenant-Tokenest refusé. - Permissions par policies (
sng tenant policy), policies géréesadmin,readonly,readwrite,assume-role, plus deux policies réservées au fonctionnement des secrets. sng tenant useetsng tenant assumeremplacent les anciennes commandes de session.