Achterwaartse compatibiliteit¶
Klanten pinnen een versie van de coderepository vast en upgraden op hun eigen tempo, soms meerdere versies tegelijk.
Een release is achterwaarts compatibel wanneer een klant de versie kan ophogen, hub en spoke in Plan-modus kan draaien en
geen wijzigingen ziet die niet zijn aangevraagd.
Het contract¶
| Versieverhoging | Belofte aan de klant |
|---|---|
Patch (v4.12.1 → v4.12.2) |
Alleen bugfixes. Geen configuratiewijzigingen nodig. Plans tonen geen wijzigingen, of alleen de fix. |
Minor (v4.11.x → v4.12.0) |
Nieuwe functionaliteit, allemaal opt-in. Bestaande configuratie blijft werken. Elke handmatige stap staat beschreven in een versiespecifieke upgradehandleiding. |
Major (v4.x → v5.0) |
Breaking changes zijn toegestaan, maar elke wijziging staat met bijbehorende migratie in de upgradehandleiding. |
Versieverhogingen komen uit het merge-bericht (+semver: major|minor|patch, zie Releasen).
Een breaking change die met +semver: minor wordt gemerged, schendt het contract.
Regels voor contributors¶
Nieuwe functionaliteit¶
- Zet elke nieuwe resource achter een feature flag (
use_<x>_module,create_<x>,enable_<x>), standaardfalse. Zie de feature flags-referentie voor het bestaande patroon. - Geef elke nieuwe variabele een standaardwaarde die het huidige gedrag behoudt. Een nieuwe variabele zonder standaardwaarde dwingt elke klant om de eigen tfvars aan te passen.
- Maak nieuwe JSON-properties optioneel in het schema (
src/Xebia.Mcp/Files/json/*schema.json). Een nieuwe verplichte schema-property laat de config test voor elk bestaand bestand falen.
Hernoemen en refactoren¶
- Hernoem nooit een Terraform-resource of module-adres zonder
movedblock. Voorbeelden in de code:module.virtual_wan[0]→module.virtual_wan(infra/deploy/connectivity/main.tf) enmodule.policy_assignements→module.policy_assignments(infra/deploy/postdeployment/main.tf). - Wanneer de key van een
for_eachverandert (bijvoorbeeld van bestandspad naarname), is eenmovedblock niet genoeg. Voeg een migratieflag toe die standaard de oude keys behoudt, zoalsuse_new_ip_group_naming,use_new_fwp_rulecollectiongroup_namingenuse_new_application_gateway_naming. Zo'n flag omzetten is een migratie, geen standaardwijziging. - Behoud het oude codepad wanneer je een nieuw pad toevoegt, en kies tussen beide met een flag. De firewall layer ondersteunt nog steeds
de legacy indeling met één map naast de multi-region-indeling (
use_multiregion_fwp_rulecollectiongroup_naming). - Hernoem of verwijder geen variabele in een minor release. Deprecate hem eerst: behoud hem, vermeld dat in de beschrijving en
negeer hem. Bijvoorbeeld:
create_virtual_wanblijft bestaan maar is gedocumenteerd als ongebruikt.
Provider- en toolversies¶
- Root modules pinnen providers op een exacte versie.
scripts/Test-TerraformRootProviderPins.ps1controleert dit in de lefthook pre-commit hook en in de GitHubCIworkflow. - Een major upgrade van een provider (bijvoorbeeld azurerm 4 → 5) is een major platformversie en vereist een upgradehandleiding.
Pipelines en entry-bestanden¶
- Klanten beheren hun eigen kopie van de entry pipelines (
hub.yaml,spoke.yaml, …). Een nieuwe verplichte template parameter breekt hun pipeline. Voeg parameters toe met een standaardwaarde. - Houd Azure DevOps en GitHub Actions gelijk (
docs/PIPELINE_SYNCHRONIZATION.mdin de coderepository).
Controleren voordat je released¶
- Draai
hubenspokein Plan-modus tegen de Demo canary-configuratie zonder die te wijzigen. De plan moet geen wijzigingen tonen voor bestaande resources. Depull-request.yamlpipeline van de coderepository doet dit voor elke pull request naarmain(hub deploy en destroy, spoke deploy en destroy, allemaal in Plan/WhatIf). - Draai een plan tegen minstens één echte klant-canary op de releasebranch.
- Als er een handmatige stap nodig is, schrijf dan de upgradehandleiding voordat je de release tagt.
Wanneer je niet compatibel kunt blijven¶
Soms kan een wijziging niet compatibel worden gemaakt, bijvoorbeeld wanneer Azure een policy of een API verwijdert. Doe dan het volgende:
- Verhoog de versie als
+semver: major, of documenteer de handmatige stap in de upgradehandleiding van de minor release als de impact beperkt en onvermijdelijk is. - Beschrijf elke stap in de upgradehandleiding: wat je moet wijzigen in de configuratierepository, wat je moet verwijderen in de Azure portal, en in welke volgorde.
- Noem het in de release notes onder Breaking changes of Known issues.
Voorbeelden uit eerdere releases: v4.11.x verwijderde de oude DNS policy initiatives (bestanden om te verwijderen in de configuratie
repository en assignments om te verwijderen in de portal), en v4.12.x vereiste een geldige firewall_policy_id in elke App
Gateway JSON. Zie Wat te doen als een nieuwe versie wordt gereleased.
Wat de geschiedenis laat zien¶
Het contract hierboven is het doel. De releasegeschiedenis laat zien waar eerdere releases handmatige stappen nodig hadden en welke soorten wijzigingen daarvoor zorgen:
| Soort wijziging | Voorbeeld | Les |
|---|---|---|
| Policy- of alertobjecten die door nieuwe worden vervangen | v4.4.0 (policy sets verhuisd naar de coderepository), v4.5.1 (alert policies), v4.7.0 (Defender assignments), v4.11.x en v4.12.x (DNS policy) | De handleidingen vragen om de oude objecten met de hand in de portal te verwijderen. Noem ze stuk voor stuk in de upgradehandleiding, met hun scope, en zeg in welke volgorde ze verwijderd moeten worden |
| Bestanden in de configuratierepository die de code nu zelf beheert | v4.4.0, v4.11.x | Noem de te verwijderen bestanden per omgevingsmap |
| Een nieuwe verplichte instelling met een standaardwaarde die niet voor elk platform past | v4.4.0 (overrides voor state storage), v4.9.0 (variabele voor de map met firewallregels) | Geef een standaardwaarde die het huidige gedrag behoudt. Waar dat niet kan, leg in de handleiding uit hoe je controleert en wat je instelt |
| Een wijziging in hoe paden of entry pipelines worden geschreven | v4.5.0, v4.9.0 | Klanten beheren hun eigen entry-bestanden, dus een wijziging daar is altijd een handmatige stap. Houd wijzigingen in entry-bestanden zeldzaam |
| Een eigenschap moet nu een geldige waarde hebben | v4.12.x (firewall_policy_id) |
Controleer bestaande bestanden in een validatiestap en leg uit hoe je ze herstelt |
Gebruik de tabel als reviewchecklist wanneer je bepaalt of een wijziging een minor versie kan zijn. De upgradehandleidingen staan in Upgradehandleidingen voor het platform.