Ga naar inhoud

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 (bijvoorbeeld canary).
  • 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):

  1. <env-folder>/<region>/<layer>.auto.tfvars
  2. <env-folder>/<region>/global.auto.tfvars
  3. <env-folder>/<layer>.auto.tfvars
  4. <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.