Problem
Variable management is inconsistent across repos — different folder names, file names, hierarchies, and documentation patterns. Things are spread everywhere.
Current State by Repo
| Repo |
Config Folder |
Config File(s) |
Variable Docs |
Hierarchy |
azurelocal-toolkit |
configs/ |
infrastructure.yml (full 13-section v4.0.0), variables.template.yml (simplified flat) |
configs/variables/readme.md |
v4.0.0 master-registry aligned |
azurelocal-sofs-fslogix |
config/ |
variables.example.yml (solution-specific flat) |
docs/standards/variables.md, docs/reference/variables.md, docs/deployment/variables.md — 3 separate places |
Flat, solution-specific sections |
azurelocal.github.io |
standards/variable-management/ |
master-registry.yaml, infrastructure.schema.json |
7 docs: index, registry-reference, schema-validation, usage-workflows, technical-standards, governance, examples, troubleshooting |
v4.0.0, 970+ variables, 13 sections |
aurelocal-avd |
config/ |
*.yml files |
Unknown |
Likely divergent |
azurelocal-loadtools |
config/ |
clusters/, credentials/, profiles/, variables/ subdirs |
docs/ various |
Completely different structure |
Specific Problems
- Folder naming inconsistency:
configs/ (toolkit) vs config/ (SOFS, AVD, loadtools) — no standard
- File naming inconsistency:
infrastructure.yml vs variables.yml vs variables.example.yml — what's the canonical name?
- Duplicate purpose files in toolkit:
infrastructure.yml (full 13-section) and variables.template.yml (simplified flat) serve overlapping purposes with different structures
- Variable docs spread across 3 paths in SOFS:
docs/standards/variables.md, docs/reference/variables.md, docs/deployment/variables.md
- Schema divergence: The toolkit's
infrastructure.yml follows the v4.0.0 master-registry 13-section hierarchy; the SOFS repo's variables.example.yml uses a flat, solution-specific structure that doesn't map to the registry
- No shared schema validation: The Docusaurus site defines JSON Schema validation with
infrastructure.schema.json but none of the solution repos use it
- No variable governance in solution repos: The Docusaurus site has a full governance workflow (proposal > review > approval > implementation > deployment) but it's not adopted anywhere else
What Already Works Well (Keep/Adopt)
- Docusaurus site's variable management suite — most mature system: 970+ variable registry, JSON Schema, governance, naming rules (
snake_case, ^[a-z][a-z0-9_]*$, max 50 chars)
- SOFS repo's single-file approach —
config/variables.example.yml is clean, well-commented, easy to copy
- Key Vault URI pattern — both toolkit and SOFS use
keyvault:// consistently
- Per-VM map pattern — both repos use zero-padded string keys (
"01", "02")
- IIC fictional company values — consistent example data in both toolkit and SOFS
Proposed Solution
1. Standardize Config Directory Structure Across All Repos
config/ # Standardize on singular (majority already use it)
├── variables.example.yml # Copyable template with IIC examples
├── variables.yml # User's actual config (gitignored)
└── schema/ # Validation assets (optional)
├── master-registry.yaml # Synced from central source
└── variables.schema.json # JSON Schema for validation
2. Define Two Tiers of Variable Files
- Solution repos (SOFS, AVD, loadtools, vm-conversion): Use
config/variables.example.yml with a flat, solution-specific structure. Keep it simple — these are single-purpose repos.
- Platform repos (toolkit): Use
config/infrastructure.yml with the full registry-aligned hierarchy for multi-solution deployments.
3. Standardize Variable Naming Rules (Adopt from Docusaurus Site)
- Format:
snake_case — pattern: ^[a-z][a-z0-9_]*$
- Max 50 characters
- Top-level sections:
snake_case (e.g., azure_local, data_disks)
- Keys within sections:
snake_case (e.g., subscription_id, volume_size_gb)
- Per-resource maps: zero-padded string keys (
"01", "02")
- Booleans: descriptive names (
role_enabled: true)
- Secrets:
keyvault:// URI format — never plaintext
4. Consolidate Variable Documentation Per Repo
Each repo should have exactly ONE variable reference doc:
docs/reference/variables.md — the single variable reference
- Remove/redirect:
docs/standards/variables.md -> link to org-wide variable naming standard
- Remove/redirect:
docs/deployment/variables.md -> merge into getting-started or reference page
5. Add Schema Validation to CI
- Each repo maintains a
config/schema/variables.schema.json
- CI validates
config/variables.example.yml against the schema on every PR
- Schema synced from central source or generated per-repo
6. Retire variables.template.yml in Toolkit
Consolidate into variables.example.yml to match the org-wide pattern.
Migration Path
| Repo |
Current |
Target |
Changes |
azurelocal-toolkit |
configs/infrastructure.yml + configs/variables.template.yml |
config/infrastructure.yml + config/variables.example.yml |
Rename configs/ to config/, retire template, add schema |
azurelocal-sofs-fslogix |
config/variables.example.yml |
config/variables.example.yml (no change) |
Consolidate 3 variable docs to 1, add schema |
aurelocal-avd |
config/*.yml |
config/variables.example.yml |
Standardize file naming |
azurelocal-loadtools |
config/ (subdirs) |
config/variables.example.yml + subdirs |
Add standard example file |
azurelocal-vm-conversion-toolkit |
None |
config/variables.example.yml (if applicable) |
Add if scripts use config |
Relevant Files (Audit References)
| File |
What It Contains |
azurelocal.github.io/standards/variable-management/ |
Full variable mgmt suite (7 docs, 970+ vars) |
azurelocal.github.io/standards/variable-management/technical-standards.mdx |
Naming rules, data types, validation patterns |
azurelocal.github.io/standards/variable-management/governance.mdx |
Change process, versioning, repo sync |
azurelocal.github.io/standards/documentation/naming-conventions.mdx |
Variable naming within naming conventions v3.1 |
azurelocal-sofs-fslogix/config/variables.example.yml |
SOFS variable template (clean, well-commented) |
azurelocal-sofs-fslogix/docs/standards/variables.md |
SOFS variable standards |
azurelocal-sofs-fslogix/docs/reference/variables.md |
SOFS variable reference |
azurelocal-sofs-fslogix/docs/deployment/variables.md |
SOFS variable deployment docs (redirect page) |
azurelocal-toolkit/configs/infrastructure.yml |
Toolkit full config (v4.0.0, 13-section) |
azurelocal-toolkit/configs/variables.template.yml |
Toolkit simplified template (to be retired) |
Acceptance Criteria
Problem
Variable management is inconsistent across repos — different folder names, file names, hierarchies, and documentation patterns. Things are spread everywhere.
Current State by Repo
azurelocal-toolkitconfigs/infrastructure.yml(full 13-section v4.0.0),variables.template.yml(simplified flat)configs/variables/readme.mdazurelocal-sofs-fslogixconfig/variables.example.yml(solution-specific flat)docs/standards/variables.md,docs/reference/variables.md,docs/deployment/variables.md— 3 separate placesazurelocal.github.iostandards/variable-management/master-registry.yaml,infrastructure.schema.jsonaurelocal-avdconfig/*.ymlfilesazurelocal-loadtoolsconfig/clusters/,credentials/,profiles/,variables/subdirsdocs/variousSpecific Problems
configs/(toolkit) vsconfig/(SOFS, AVD, loadtools) — no standardinfrastructure.ymlvsvariables.ymlvsvariables.example.yml— what's the canonical name?infrastructure.yml(full 13-section) andvariables.template.yml(simplified flat) serve overlapping purposes with different structuresdocs/standards/variables.md,docs/reference/variables.md,docs/deployment/variables.mdinfrastructure.ymlfollows the v4.0.0 master-registry 13-section hierarchy; the SOFS repo'svariables.example.ymluses a flat, solution-specific structure that doesn't map to the registryinfrastructure.schema.jsonbut none of the solution repos use itWhat Already Works Well (Keep/Adopt)
snake_case,^[a-z][a-z0-9_]*$, max 50 chars)config/variables.example.ymlis clean, well-commented, easy to copykeyvault://consistently"01","02")Proposed Solution
1. Standardize Config Directory Structure Across All Repos
2. Define Two Tiers of Variable Files
config/variables.example.ymlwith a flat, solution-specific structure. Keep it simple — these are single-purpose repos.config/infrastructure.ymlwith the full registry-aligned hierarchy for multi-solution deployments.3. Standardize Variable Naming Rules (Adopt from Docusaurus Site)
snake_case— pattern:^[a-z][a-z0-9_]*$snake_case(e.g.,azure_local,data_disks)snake_case(e.g.,subscription_id,volume_size_gb)"01","02")role_enabled: true)keyvault://URI format — never plaintext4. Consolidate Variable Documentation Per Repo
Each repo should have exactly ONE variable reference doc:
docs/reference/variables.md— the single variable referencedocs/standards/variables.md-> link to org-wide variable naming standarddocs/deployment/variables.md-> merge into getting-started or reference page5. Add Schema Validation to CI
config/schema/variables.schema.jsonconfig/variables.example.ymlagainst the schema on every PR6. Retire
variables.template.ymlin ToolkitConsolidate into
variables.example.ymlto match the org-wide pattern.Migration Path
azurelocal-toolkitconfigs/infrastructure.yml+configs/variables.template.ymlconfig/infrastructure.yml+config/variables.example.ymlconfigs/toconfig/, retire template, add schemaazurelocal-sofs-fslogixconfig/variables.example.ymlconfig/variables.example.yml(no change)aurelocal-avdconfig/*.ymlconfig/variables.example.ymlazurelocal-loadtoolsconfig/(subdirs)config/variables.example.yml+ subdirsazurelocal-vm-conversion-toolkitconfig/variables.example.yml(if applicable)Relevant Files (Audit References)
azurelocal.github.io/standards/variable-management/azurelocal.github.io/standards/variable-management/technical-standards.mdxazurelocal.github.io/standards/variable-management/governance.mdxazurelocal.github.io/standards/documentation/naming-conventions.mdxazurelocal-sofs-fslogix/config/variables.example.ymlazurelocal-sofs-fslogix/docs/standards/variables.mdazurelocal-sofs-fslogix/docs/reference/variables.mdazurelocal-sofs-fslogix/docs/deployment/variables.mdazurelocal-toolkit/configs/infrastructure.ymlazurelocal-toolkit/configs/variables.template.ymlAcceptance Criteria
config/(singular) as the config directory nameconfig/variables.example.ymlwith IIC example valuessnake_caserules org-widedocs/reference/variables.mdkeyvault://) used consistently for all secretsvariables.template.ymlin toolkit retired in favor ofvariables.example.yml