Cross-workspace references¶
A report in one workspace binds to a model in another; a notebook reads a lakehouse two folders over. Each is an id in a definition that must change per environment. parameter.yml rewrites them, a $allez.* token lets a rule name a workspace this repo owns, and allez audit checks that no id was missed.
$allez.* variables¶
A $allez.* token works like a fabric-cicd dynamic variable, for a workspace this repo owns. fabric-cicd reaches another workspace only by a literal display name, and a branch workspace has no fixed name: it is derived from the branch, so every branch would need its own rule. The alternative, one shared branch workspace per environment, puts every developer in the same workspace, where one person's half-finished change is everyone's, and the only way to move on to something urgent is to commit early. A token names the sub-folder instead, and reads the workspace from that folder's config.yml. Two things follow. One token covers every environment, where a literal name needs one replace_value entry per environment. And a token resolves to the branch workspace allez creates for the current branch, which no literal name can. allez resolves it just before that node's fab deploy, then restores the file. No new file: the token goes in the rule.
└── 📁 fabric/
├── 📄 allez.yml
├── 📁 data/
│ └── ...
└── 📁 reporting/
├── 📄 parameter.yml # (1)!
└── ...
- Same file, same rule types. A
replace_valuecarries the token.
find_replace:
- find_value: 'onelake\.dfs\.fabric\.microsoft\.com/([0-9a-fA-F-]{36})/'
is_regex: "true"
replace_value:
_ALL_: "$allez.data.$workspace.$id"
Token resolution order
The node that publishes what a token names must come earlier in the dag. Full reference: $allez.* variables.
The audit¶
allez audit reads the item definitions and every parameter.yml, offline, and fails on an environment-specific id that no rule rewrites.
A finding that is by design can be accepted in the sub-folder's allez.yml, with a reason.
audit:
accept:
- kind: uncovered
file: Ingest.Notebook/notebook-content.py
value: 5d1c3a7e-2b4f-4e8a-9c6d-0f1e2a3b4c5d
reason: the shared reference-data workspace is the same in every environment
Run it as a pull request check, as the example validate.yml pipeline does, and an uncovered id cannot merge. Full reference: allez audit.