Ga naar inhoud

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 naar src/Xebia.Mcp/Files/terraform/cloud-platform/ (Sync-XebiaInfraToMcpModule). De container build en dev/dev.ps1 doen dit allebei, en het pad staat in .gitignore. De plan-actie draait Terraform vanuit terraform/cloud-platform/deploy/<layer>.
  • De spoke Terraform staat alleen in de module (src/Xebia.Mcp/Files/terraform/spoke-canvas/), niet in infra/.
  • YAML blijft dun. Pipelines roepen Invoke-XebiaHub, Invoke-XebiaSpoke, Invoke-XebiaInfrastructure en Invoke-XebiaContainer aan 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.md noemt nog steeds een Runner/-map die niet meer bestaat.)