Config: welke configuratie hebben we¶
Elke klant heeft één configuratierepository. Daarin staan alleen waarden; de Terraform staat in de coderepository. Er zijn twee soorten configuratie:
| Hub | Spoke | |
|---|---|---|
| Wat wordt geconfigureerd | Het gedeelde platform: management groups, netwerk, firewall, policies, monitoring | Eén workload landing zone per bestand |
| Formaat | *.auto.tfvars + JSON (firewall, IP groups, App Gateway, WAF, policies) |
Eén JSON-bestand per spoke |
| Pipeline | hub |
spoke |
| Meer lezen | Hub-config | Spoke-config |
Hoe je beide wijzigt: Veilig een wijziging doorvoeren (PR + CI + CD). De meest voorkomende wijzigingen staan onder Veelvoorkomende aanvragen.
Referentiepagina's voor spokes: Spoke-JSON-referentie, Algemene spoke-instellingen, RBAC en PIM voor spokes en Spoke-integraties.
Conventies en review: Pull request review, Richtlijnen voor firewallregels en IP groups en, als je de optionele module draait, Managed VM-module.
Indeling van een configuratierepository¶
<config-repo>/
├── environments/
│ ├── canary/ ← <env-folder> for canary
│ │ ├── mcp.json Platform environment settings
│ │ ├── global.auto.tfvars Regions, environment names, platform subscription IDs
│ │ ├── <layer>.auto.tfvars Optional: values for one layer in every region
│ │ ├── <region>/ One folder per active region, e.g. gwc/
│ │ │ ├── global.auto.tfvars Region name and short name
│ │ │ ├── foundation.auto.tfvars
│ │ │ ├── connectivity.auto.tfvars
│ │ │ ├── firewall.auto.tfvars
│ │ │ ├── identity.auto.tfvars
│ │ │ ├── management.auto.tfvars
│ │ │ ├── postdeployment.auto.tfvars
│ │ │ ├── firewall_rule_configuration/*.json
│ │ │ ├── ip_groups/*.json
│ │ │ ├── application_gateways/*.json
│ │ │ └── web_application_firewall_policies/*.json
│ │ ├── firewall_rule_configuration/*.json Optional: global rule collection groups (all regions)
│ │ ├── ip_groups/*.json Optional: global IP groups (all regions)
│ │ ├── policies/ Definitions, set definitions, assignments, exemptions
│ │ └── spokes/<team>/*.json Spoke definitions
│ └── prod/ ← same structure
├── pipelines/ Azure DevOps entry pipelines + variables.yaml
└── .github/workflows/ GitHub Actions entry workflows
Twee namen liggen vast in de code:
mcp.json. De bovenliggende map is de<env-folder>. De mapnaam wordt de omgevingsnaam die in de state keys wordt gebruikt (bijvoorbeeldcanary).spokes/direct onder de<env-folder>.
Alle andere mapnamen worden bepaald door *_relative_path / *_file_location variabelen in de tfvars.
mcp.json¶
Wordt gelezen door src/Xebia.Mcp/Functions/Public/Config/Resolve-XebiaMcpConfiguration.ps1. Sleutels die als verplicht
zijn gemarkeerd worden gevalideerd; GUID-velden moeten geldige GUID's zijn.
| Sleutel | Verplicht | Doel |
|---|---|---|
CustomerName |
ja | Weergavenaam van de tenant/klant. |
Azure.TenantId |
ja (GUID) | Entra ID tenant. |
Azure.TerraformState.Hub.{SubscriptionId, ResourceGroupName, StorageAccountName, ContainerName} |
ja | Backend voor alle hub layers. Het storage account moet al bestaan. |
Azure.TerraformState.Hub.ServicePrincipalId |
voor GitHub, SPN-login | Client ID dat wordt gebruikt voor Azure-login (GitHub OIDC) en SPN-login. |
Azure.TerraformState.Hub.KeyvaultName |
optioneel | Key Vault waarin SPN-credentials worden opgeslagen (update-spn). |
Azure.TerraformState.Spoke.* |
ja (dezelfde velden) | Backend en identiteit voor spoke-deployments. |
Azure.JobRunner.{SubscriptionId, ResourceGroupName, Location} |
ja | Waar de job runners worden gedeployed. |
Azure.JobRunner.MaximumAgents, .Sku, .IpAddressPrefixes.* |
optioneel | Poolgrootte, VM-grootte en adresranges van het runner-netwerk. |
AzureDevops.OrganizationName, .AgentPool |
ja, tenzij er een GitHub-sectie is |
Azure DevOps-organisatie en Managed DevOps Pool. De containerpool is <AgentPool>-CTR. |
AzureDevops.ContainerImageName |
optioneel | Images die de container pipeline bouwt (normaal ["mcp"]). |
GitHub.{AppId, AppInstallationId, AppPrivateKeySecretName} |
voor GitHub runners | GitHub App waarmee self-hosted runners worden geregistreerd. |
SpokeCommon.tenantinfo |
voor spokes | AdministrativeUnitId, GroupnamePrefix (bijv. SG_SPOKE_), SPNNamePrefix (bijv. SPN-SPOKE-), SubsciptionNamingTemplate (de spelfout is de echte sleutel), SPNSecretrotationPeriod (dagen). |
SpokeCommon.shared_services |
voor spoke-extensies | Subscription en resource-ID's per regio van gedeelde APIM, ACR, Service Bus, Event Hub. |
De overige spoke-brede instellingen (regio's, IPAM-pools, PIM-profielen, GitHub-instance) staan beschreven in Algemene spoke-instellingen.
Hoe relatieve paden in tfvars worden opgelost¶
Elke layer krijgt -var config_path=<env-folder> mee, de map waarin mcp.json staat. Terraform bouwt bestandspaden als
"${var.config_path}/${var.<x>_relative_path}". Schrijf relatieve paden vanaf de <env-folder>:
# environments/prod/gwc/firewall.auto.tfvars
firewall_rule_collection_file_location = "gwc/firewall_rule_configuration" # correct
ip_group_json_file_relative_path = "gwc/ip_groups/" # correct
ip_group_json_file_relative_path = "environments/prod/gwc/ip_groups/" # wrong: resolves to environments/prod/environments/prod/…
Een verkeerd pad verwijdert resources
Als een mappad niet klopt, vindt fileset() geen bestanden en geeft het geen foutmelding. De plan wil dan alle
resources verwijderen die uit die map kwamen (rule collection groups, IP groups, policy assignments). Lees altijd
de samenvatting van de plan voordat je apply uitvoert. De referentieconfiguratierepository xms-cloud-platform-config
gebruikt op dit moment paden vanaf de repository-root; zie Bekende problemen.
Welke tfvars-bestanden een layer leest¶
Voor layer <layer> in regio <region> geeft de plan deze var files mee, in deze volgorde, en slaat bestanden over die
niet bestaan (Invoke-XebiaHubPlanAction.ps1):
<env-folder>/<region>/<layer>.auto.tfvars<env-folder>/<region>/global.auto.tfvars<env-folder>/<layer>.auto.tfvars<env-folder>/global.auto.tfvars
Als een variabele in meerdere bestanden is gezet, gebruikt Terraform de waarde uit het bestand dat als laatste wordt meegegeven. Zet elke variabele in precies één bestand.
Een niet-gedeclareerde variabele in een tfvars-bestand geeft alleen een waarschuwing, dus een typfout wordt stilzwijgend
genegeerd. Controleer namen tegen infra/deploy/<layer>/variables*.tf.