Skip to content

Variable Reference

All deployment tools read from a single central configuration file: config/variables.yml. This file is the single source of truth — your architecture decisions, sizing, identity settings, and infrastructure IDs are declared here and consumed by every automation tool.

TIP

Getting started Copy the example and fill in your values:

powershell
cp config/variables.example.yml config/variables.yml

Never commit variables.yml — it is excluded by .gitignore because it contains environment-specific values and Key Vault references.


Naming Rules

ScopeConventionExample
Top-level sectionssnake_casecontrol_plane, session_hosts
Keys within sectionssnake_casesubscription_id, vm_memory_mb
BooleansDescriptive nameenable_entra_id_auth: true
Secretskeyvault:// URIkeyvault://kv-name/secret-name
Example valuesIIC fictional identitycontoso.local, rg-iic-avd-hp-eus-01, kv-iic-platform

Subscription & Global

yaml
subscription:
  avd_subscription_id: "00000000-0000-0000-0000-000000000000"
  azure_local_subscription_id: "00000000-0000-0000-0000-000000000000"
  tenant_id: "00000000-0000-0000-0000-000000000000"
  location: "eastus"
VariableTypeRequiredDescriptionDefault
subscription.avd_subscription_idstringYesAzure subscription for AVD control plane and session hosts
subscription.azure_local_subscription_idstringYesAzure subscription where the Azure Local cluster is registered
subscription.tenant_idstringYesEntra ID tenant
subscription.locationstringYesAzure regioneastus

Security — Key Vault

yaml
security:
  key_vault_name: "kv-iic-platform"
  key_vault_resource_group: "rg-iic-mgmt-eus-01"
VariableTypeRequiredDescriptionDefault
security.key_vault_namestringYesPlatform Key Vault for all keyvault:// URI resolution
security.key_vault_resource_groupstringYesResource group containing the Key Vault

Control Plane

yaml
control_plane:
  resource_group: "rg-iic-avd-hp-eus-01"
  host_pool_name: "hp-iic-avd-pool01"
  host_pool_type: "Pooled"
  load_balancer_type: "BreadthFirst"
  max_session_limit: 16
  preferred_app_group_type: "Desktop"
  personal_assignment_type: "Automatic"
  start_vm_on_connect: false
  validation_environment: false
  custom_rdp_properties: ""
  app_group_name: "vdag-iic-avd-eus-01"
  app_group_type: "Desktop"
  workspace_name: "vdws-iic-avd-eus-01"
VariableTypeRequiredDescriptionDefault
control_plane.resource_groupstringYesResource group for host pool, app group, workspace
control_plane.host_pool_namestringYesHost pool name
control_plane.host_pool_typestringYesPooled or PersonalPooled
control_plane.load_balancer_typestringPooledBreadthFirst or DepthFirstBreadthFirst
control_plane.max_session_limitintegerPooledMax concurrent sessions per host16
control_plane.preferred_app_group_typestringYesDesktop, RailApplications, or NoneDesktop
control_plane.personal_assignment_typestringPersonalAutomatic or DirectAutomatic
control_plane.start_vm_on_connectbooleanNoRequires Desktop Virtualization Power On Contributor RBACfalse
control_plane.validation_environmentbooleanNoReceives service updates before productionfalse
control_plane.custom_rdp_propertiesstringNoSemicolon-delimited RDP properties""
control_plane.app_group_namestringYesApplication group name
control_plane.app_group_typestringYesDesktop or RemoteAppDesktop
control_plane.workspace_namestringYesAVD workspace name

Session Hosts

yaml
session_hosts:
  resource_group: "rg-iic-avd-sh-eus-01"
  session_host_count: 2
  vm_naming_prefix: "vm-iicavd"
  vm_start_index: 1
  vm_processors: 4
  vm_memory_mb: 16384
  vm_admin_username: "avd_admin"
  vm_admin_password: "keyvault://kv-iic-platform/avd-local-admin-password"
  session_host_os: "Windows-11-Enterprise-Multi-Session"
  custom_location_id: "<resource ID>"
  logical_network_id: "<resource ID>"
  gallery_image_id: "<resource ID>"
  storage_path_id: "<resource ID>"
VariableTypeRequiredDescriptionDefault
session_hosts.resource_groupstringYesResource group for session host VMs
session_hosts.session_host_countintegerYesNumber of session host VMs2
session_hosts.vm_naming_prefixstringYesVMs named {prefix}-001, {prefix}-002, etc.vm-iicavd
session_hosts.vm_start_indexintegerNoStarting index for VM numbering1
session_hosts.vm_processorsintegerYesvCPUs per session host4
session_hosts.vm_memory_mbintegerYesRAM per VM in MB16384
session_hosts.vm_admin_usernamestringYesLocal admin usernameavd_admin
session_hosts.vm_admin_passwordstringYesKey Vault URI — resolved at runtime
session_hosts.session_host_osstringYesOS image nameWindows-11-Enterprise-Multi-Session
session_hosts.custom_location_idstringYesAzure Local custom location resource ID
session_hosts.logical_network_idstringYesCompute logical network resource ID
session_hosts.gallery_image_idstringYesGallery image resource ID
session_hosts.storage_path_idstringYesStorage path resource ID

Domain Join

yaml
domain:
  domain_fqdn: "contoso.local"
  domain_join_username: "svc.domainjoin"
  domain_join_password: "keyvault://kv-iic-platform/domain-join-password"
  domain_join_ou_path: ""
VariableTypeRequiredDescriptionDefault
domain.domain_fqdnstringYesActive Directory domain FQDNcontoso.local
domain.domain_join_usernamestringYesService account for domain join
domain.domain_join_passwordstringYesKey Vault URI for domain join password
domain.domain_join_ou_pathstringNoTarget OU — empty uses default Computers container""

Entra ID Authentication

yaml
entra_id:
  enable_entra_id_auth: false
  enroll_in_intune: false
  entra_user_login_group_id: ""
  entra_admin_login_group_id: ""
VariableTypeRequiredDescriptionDefault
entra_id.enable_entra_id_authbooleanNoInstalls AADLoginForWindows extension + RDP SSOfalse
entra_id.enroll_in_intunebooleanNoRegister session hosts in Intune MDMfalse
entra_id.entra_user_login_group_idstringNoEntra group object ID for VM User Login RBAC""
entra_id.entra_admin_login_group_idstringNoEntra group object ID for VM Administrator Login RBAC""

Tags

yaml
tags:
  Environment: "Production"
  Project: "AVD on Azure Local"
  ManagedBy: "Infrastructure as Code"
  Owner: "Platform Team"
  CostCenter: "IT-Infrastructure"
VariableTypeRequiredDescriptionDefault
tags.EnvironmentstringNoEnvironment tagProduction
tags.ProjectstringNoProject tagAVD on Azure Local
tags.ManagedBystringNoManaged-by tagInfrastructure as Code
tags.OwnerstringNoOwner tagPlatform Team
tags.CostCenterstringNoCost center tagIT-Infrastructure

Ansible

yaml
ansible:
  ansible_connection: "local"
VariableTypeRequiredDescriptionDefault
ansible.ansible_connectionstringNoAnsible connection typelocal

Key Vault Secret Resolution

Secrets are never stored in plaintext. The keyvault:// URI format tells deployment tools to resolve the value at runtime:

yaml
vm_admin_password: "keyvault://kv-iic-platform/avd-local-admin-password"

Resolution flow:

  1. Tool parses the URI → vault name: kv-iic-platform, secret name: avd-local-admin-password
  2. Tool calls az keyvault secret show --vault-name kv-iic-platform --name avd-local-admin-password
  3. Secret value is passed directly to the deployment — never written to disk

Required secrets:

Secret NameUsed By
avd-local-admin-passwordLocal admin password for session host VMs
domain-join-passwordService account password for domain join

Tool-Specific Parameter Mapping

Each automation tool reads from config/variables.yml and maps values to its own parameter format:

ToolParameter FileLocation
PowerShellReads config/variables.yml directlyconfig/
Bicep*.bicepparamavd/bicep/
Terraformterraform.tfvarsavd/terraform/
ARM*.parameters.jsonavd/arm/
Ansiblehosts.ymlsrc/ansible/inventory/

Released under the MIT License.