Code¶
De coderepository xms-cloud-platform-code bevat alles wat voor elke klant hetzelfde is. Deze sectie beschrijft welke
tools erin gebruikt worden, hoe het platform wordt geprovisioned en hoe je nieuwe functionaliteit bouwt en released.
| Pagina | Behandelt |
|---|---|
| Deze pagina | Welke tools we gebruiken en de opbouw van de repository |
| Provisioning | Hoe je provisioned: infra (job runners), container, layers per omgeving en regio |
| Releases en upgrades | Releasegeschiedenis, upgradehandleidingen per versie en het generieke updaterunbook |
| Deployment layers | De Terraform layers, hun volgorde en hun state |
| Spoke canvas | Wat een spoke-deployment aanmaakt: resources, groepen, credentials van de service principal, vereiste permissies |
| Spoke canvas-modulereferentie | Inputs, outputs en modules van de spoke Terraform, gegroepeerd op doel |
| Pipelines en workflows | Elke entry pipeline, de parameters, modes en goedkeuringen |
| Nieuwe functionaliteit bouwen | Modules, tests, deployen naar dev, workflow/pipeline, PR + CI |
| Releasen | Versies, workflowstappen, release notes en upgradehandleidingen |
Welke tools we gebruiken¶
| Tool | Versie (op main) |
Gebruikt voor |
|---|---|---|
| Terraform | 1.14.4 (src/Dockerfile) |
Alle hub layers (infra/) en de spoke canvas (src/Xebia.Mcp/Files/terraform/spoke-canvas/) |
| azurerm / azapi providers | Exacte pins per root module (azurerm 4.60.0 ten tijde van schrijven) | Azure-resources. Pins worden gecontroleerd door scripts/Test-TerraformRootProviderPins.ps1. |
PowerShell 7 + module Xebia.Mcp |
– | Alle orkestratie: config resolutie, plan/apply/analyse-acties, region matrix, tests (src/Xebia.Mcp) |
| Pester | – | Unit tests (*.Unit.Tests.ps1 naast elke functie) en config tests (src/Xebia.Mcp/Tests/) |
| Terraform test | – | Moduletests (infra/modules/<name>/tests/*.tftest.hcl, met mock_provider) |
| Bicep | – | Job runner-infrastructuur (src/Xebia.Mcp/Files/bicep/deploy/initialize/) |
| Docker | – | Het mcp image waarin alle pipelines draaien (src/Dockerfile) |
| Azure CLI | 2.87.0 (dev container) | Login en Azure-operaties vanuit de module |
| GitVersion | – | Semantische versies op basis van branches en merge messages (.GitVersion.yml) |
| lefthook | – | Pre-commit hooks: terraform validate, terraform-docs, terraform test voor gewijzigde modules, provider pin check (lefthook.yml) |
| terraform-docs | – | Genereert de README van elke layer |
| Dev container | – | Dezelfde toolchain lokaal (.devcontainer/devcontainer.json) |
| Azure DevOps Pipelines en GitHub Actions | – | CI/CD. Functioneel identiek gehouden. |
| JSON Schema (draft-07) | – | Validatie van spoke-, firewall-, App Gateway- en WAF-JSON (src/Xebia.Mcp/Files/json/) |
Opbouw van de repository¶
xms-cloud-platform-code/
├── infra/
│ ├── deploy/<layer>/ Terraform root module per deployment layer (foundation, connectivity, firewall, …)
│ ├── templates/<name>/ Compositions of modules used by the layers
│ └── modules/<name>/ Single-purpose Terraform modules (firewall, ip_group, application_gateway, policy, …)
├── src/
│ ├── Xebia.Mcp/ PowerShell module with all orchestration logic
│ │ ├── Functions/Public/ Entry functions (Invoke-XebiaHub, Invoke-XebiaSpoke, Invoke-XebiaInfrastructure, …)
│ │ ├── Functions/Private/ Internal helpers (plan/apply/analyse actions, config resolution, tests)
│ │ ├── Files/json/ JSON schemas: spokeschema, firewallschema, appgwschema, wafpolicyschema
│ │ ├── Files/terraform/spoke-canvas/ Terraform for spokes (deploy/subscription, deploy/spoke, modules)
│ │ ├── Files/bicep/deploy/initialize/ Bicep for the job runner infrastructure
│ │ └── Tests/ Config tests (Config, SpokeConfig, Smoke)
│ └── Dockerfile The "mcp" container image
├── .azure-devops/pipelines/ Azure DevOps entry pipelines and templates/ (stage-*, job-*, step-*)
├── .github/workflows/ GitHub Actions entry workflows and reusable stage-*/job-*/step-* workflows
├── .github/actions/ Composite actions (checkout-mcp-code, git-version, terraform-plan/apply, …)
├── dev/dev.ps1 Local entry point (same functions the pipelines call)
├── config/Demo/canary/ Demo configuration used to develop and test the code
├── scripts/ Helper scripts (provider pin check, terraform test runner, version-watcher)
└── docs/ ADRs, coding standards, how-tos
Punten die niet vanzelf duidelijk zijn uit de opbouw:
- De hub Terraform draait vanuit de module. Vóór een run wordt
infra/gekopieerd naarsrc/Xebia.Mcp/Files/terraform/cloud-platform/(Sync-XebiaInfraToMcpModule). De container build endev/dev.ps1doen dit allebei, en het pad staat in.gitignore. De plan-actie draait Terraform vanuitterraform/cloud-platform/deploy/<layer>. - De spoke Terraform staat alleen in de module (
src/Xebia.Mcp/Files/terraform/spoke-canvas/), niet ininfra/. - YAML blijft dun. Pipelines roepen
Invoke-XebiaHub,Invoke-XebiaSpoke,Invoke-XebiaInfrastructureenInvoke-XebiaContaineraan met een-Action(Prepare,Plan,Analyse,Apply,Clean). Zie ADR-0011. - Publieke functies zijn gegroepeerd per domein onder
Functions/Public/:Actions,AzCli,Config,Invocation,Local,Logging,Terraform,Test,Tools,Workflow. (CONTRIBUTING.mdnoemt nog steeds eenRunner/-map die niet meer bestaat.)