Skip to content

Solution Development Standards

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


Solution Repositories

Each solution maps to an infrastructure type in the master registry and lives in its own repository:

Solution Infrastructure Type Repository
Azure Local Platform azure_local azurelocal-toolkit
Azure Virtual Desktop (cloud) avd_azure azurelocal-avd
Azure Virtual Desktop (on-prem) avd_azure_local azurelocal-avd
Scale-Out File Server / FSLogix sofs_azure_local azurelocal-sofs-fslogix
AKS on Azure Local aks_azure_local azurelocal-toolkit
Load Testing Tools loadtools azurelocal-loadtools
VM Conversion Toolkit vm_conversion azurelocal-vm-conversion-toolkit
AI-Assisted Operations copilot azurelocal-copilot
Azure Local Ranger ranger azurelocal-ranger

Non-IaC Solutions

Some solutions (e.g. Ranger, Copilot, Load Testing Tools) are operational or diagnostic tools rather than IaC deployment solutions. They follow the same repository management standards but the IaC tool support, parameter derivation, and multi-tool parity sections below do not apply. Their solution-specific architecture is documented in their own repos.


IaC Tool Support

Each tool must declare which deployment phases it supports:

Tool Azure Resources Configuration Networking Monitoring
Terraform ✅ Delegates ✅ ✅
Bicep ✅ Delegates ✅ ✅
ARM ✅ Delegates ✅ ✅
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/variables.yml:

Tool Parameter File Derivation
Terraform src/terraform/terraform.tfvars Map YAML sections to HCL variables
Bicep src/bicep/main.bicepparam Map YAML sections to Bicep parameters
ARM src/arm/azuredeploy.parameters.json Map YAML sections to ARM parameter schema
PowerShell (reads config directly) ConvertFrom-Yaml from config file
Ansible src/ansible/inventory/hosts.yml Map 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

Tool Mechanism Example
Terraform count / for_each count = var.enable_feature ? 1 : 0
Bicep if condition resource res '...' = if (enableFeature) { ... }
ARM condition property "condition": "[equals(parameters('enableFeature'), 'true')]"
PowerShell switch / if if ($config.feature_enabled) { ... }
Ansible when: clause when: 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/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