Skip to main content
Version: Next

Solution Development Standards

Canonical reference: Solution Development Standard (full)
Applies to: All AzureLocal solution repositories
Last Updated: 2026-03-17


IaC Tool Support

Each tool must declare which deployment phases it supports:

ToolAzure ResourcesConfigurationNetworkingMonitoring
TerraformDelegates
BicepDelegates
ARMDelegates
PowerShell
Ansible
Delegates

"Delegates" means the tool provisions Azure resources but does not configure the guest OS. A separate tool (PowerShell or Ansible) handles guest configuration.


Parameter File Derivation

All tool-specific parameter files MUST be derivable from config/variables.yml:

ToolParameter FileDerivation
Terraformsrc/terraform/terraform.tfvarsMap YAML sections to HCL variables
Bicepsrc/bicep/main.bicepparamMap YAML sections to Bicep parameters
ARMsrc/arm/azuredeploy.parameters.jsonMap YAML sections to ARM parameter schema
PowerShell(reads config directly)ConvertFrom-Yaml from config file
Ansiblesrc/ansible/inventory/hosts.ymlMap YAML sections to group_vars

The central config is the single source of truth. Tool-specific files are convenience copies that should be regenerable.


Conditional Resource Support

ToolMechanismExample
Terraformcount / for_eachcount = var.enable_feature ? 1 : 0
Bicepif conditionresource res '...' = if (enableFeature) { ... }
ARMcondition property"condition": "[equals(parameters('enableFeature'), 'true')]"
PowerShellswitch / ifif ($config.feature_enabled) { ... }
Ansiblewhen: clausewhen: enable_feature == true

All tools must produce identical infrastructure when given the same configuration values.


Multi-Tool Parity

  • Every supported tool must cover the same set of resources
  • Tool-specific parameter files are derived from config/variables.yml
  • CI tests validate that each tool's output matches the expected state
  • New resources added to one tool must be added to all supported tools