Skip to content

Discovery Output to Deployment Input

The plan phase produces answers: from a discovery workshop or from a design document. This page maps typical questions to the place in the configuration repository where each answer is entered. Use it to turn a filled-in sheet into the first version of the configuration, without guessing.

The table is generic. It contains no customer values, and your own workshop sheet may word the questions differently.

Check the variable names in your version

The names come from the platform at the time of writing. Before you use a variable, check that it is declared in infra/deploy/<layer>/variables*.tf in the code version you pin. An undeclared variable in a tfvars file is only a warning, so a typo is silently ignored (Config).

Conventions

Placeholder Meaning
<env-folder> The folder that holds mcp.json for one platform environment, for example environments/canary or environments/prod
<region> The folder of one active region, named by the short region name, for example weu

Fill canary first. When canary works, copy it to prod and change the values that differ (see Deploy the platform).

Hub (cloud platform)

Question File Variable Entry
What is the current Azure billing setup? Give the subscription details. <env-folder>/global.auto.tfvars scaffold_subscriptions Fill the management, connectivity and identity subscription properties
What is the customer short name (at most six characters, used in names)? <env-folder>/global.auto.tfvars scaffold_company_short_name The short name
What is the name of the base management group of the platform? <primary region>/foundation.auto.tfvars management_group_organization_id The management group ID, the starting point of the hierarchy
Which is the primary region? <env-folder>/global.auto.tfvars primary_region The short name of the region
Which additional regions are needed? <env-folder>/global.auto.tfvars active_regions, active_regions_names The short names, and the matching Azure region names. primary_region must be in active_regions. See Add a region.
What is the log retention in days for the Log Analytics workspace? <region>/management.auto.tfvars log_analytics_workspace_retention_in_days Only needed when the value differs from the default of 30 days
What is the Key Vault soft-delete retention in days? <region>/management.auto.tfvars key_vault_soft_delete_retention_days Only needed when the value differs from the default of 30 days
Is DDoS protection needed? <region>/foundation.auto.tfvars create_network_ddos_protection_plan true to deploy the DDoS protection plan
<region>/connectivity.auto.tfvars, <region>/identity.auto.tfvars, <region>/management.auto.tfvars virtual_network_hub_ddos_protection_plan_enable true to enable it on the virtual networks of that layer
Is a secondary alert receiver wanted (webhook or e-mail)? <primary region>/foundation.auto.tfvars monitor_action_group_general_webhook_receiver or monitor_action_group_general_email_receiver The address or webhook (Hub config)
Who is the security contact? <region>/postdeployment.auto.tfvars security_contact_email An address of the customer's security team
Which firewall SKU is needed? <region>/connectivity.auto.tfvars firewall_sku_tier The SKU tier
Is an Application Gateway with WAF needed? <region>/connectivity.auto.tfvars use_application_gateway_module, use_web_application_firewall_policy_module true for both. The gateway and WAF definitions are JSON files (Application Gateway).
Is a point-to-site VPN needed? <region>/connectivity.auto.tfvars create_point_to_site_vpn_gateway true
Are site-to-site VPN tunnels needed? <region>/connectivity.auto.tfvars create_vpn_gateway true
Is BGP needed? Which peer addresses and ASNs? <region>/connectivity.auto.tfvars create_virtual_hub_bgp_connection, virtual_hub_bgp_connection_* true, and the peer values
Is ExpressRoute needed? <region>/connectivity.auto.tfvars create_express_route_gateway true
Is Azure Bastion needed? <region>/connectivity.auto.tfvars create_bastion_host true
Which hub address ranges? <region>/connectivity.auto.tfvars virtual_hub_address_prefix, the hub virtual network subnets, virtual_network_dns_servers From the IP plan
Is out-of-hours alert routing for hub alerts needed? <region>/connectivity.auto.tfvars hub_247_support See Monitoring rules

Other switches are in the feature flags reference and the platform features request.

Platform environment settings (mcp.json)

Question Entry in <env-folder>/mcp.json
Which Entra ID tenant? Azure.TenantId
Where is the Terraform state stored (subscription, resource group, storage account, container) for the hub and for spokes? Azure.TerraformState.Hub.* and Azure.TerraformState.Spoke.*
Which identity deploys the hub and the spokes? Azure.TerraformState.Hub.ServicePrincipalId, Azure.TerraformState.Spoke.ServicePrincipalId
Where do the job runners live, how many, which VM size, which address ranges? Azure.JobRunner.*
Which Azure DevOps organization and agent pool, or which GitHub App? AzureDevops.* or GitHub.*
Which administrative unit, group and service principal prefixes for spokes, and what rotation period? SpokeCommon.tenantinfo.*

The key reference is in Config.

Spoke canvas

Question Where it goes
What is the ID of the Entra ID administrative unit for spoke groups? SpokeCommon.tenantinfo.AdministrativeUnitId in mcp.json (older versions: common.tf in the spoke configuration)
Which PIM behavior do the spoke groups get (readers, contributors, owners)? adInfo.PIMGroupConfig in each spoke JSON: nopim, self-approve or approval (New spoke)
Which team groups get access? adInfo.ProductTeamGroupNames in each spoke JSON
Must a service connection or repository be created automatically for each spoke? The optional azdo block in the spoke JSON. Leave the block out if not.
Which regions does the spoke use? targetRegions in the spoke JSON

Practical rules

  • Fill canary first, with names that contain the environment, so that you can see what you must change for prod.
  • Search the whole configuration repository for the placeholder values of the template (for example the template customer name and its subscription IDs). The policy files contain Azure resource IDs.
  • Every firewall_rule_configuration folder needs at least one JSON file, even if the platform has no rules yet. See Firewall rules for the required keys.
  • Keep the answered discovery sheet next to the design document, and note any answer that you did not map. Those are the gaps from the plan phase.