Provisions & event handlers
Generated Markdown for references/concept_provisions.md.
Open book page Back to the skill graph
# Provisions & event handlers
_provision {} scripts run on `vmlab up` (failure is fatal); on "event" {} handlers react to lifecycle events (failure is logged)._
Provision scripts run on `vmlab up` in declaration order; event handlers react to
lifecycle events. Both are wscript files — see [the provision block](../references/entity_provision_block.md)
and [the event handler block](../references/entity_on_handler.md) for the declarations.
**Provision failures fail `vmlab up`**; **handler failures are logged, never fatal.**
A scoped provision (`vms = [...]`) gates `depends_on` on those VMs: dependents wait
for the provision to finish. See [the event list](../references/fact_events.md) for every event name.
## Examples
### A crash event handler
fn handle(event, lab): screenshot the crashed VM. Failures here are logged, never fatal.
```rust
use vmlab
fn handle(event: Event, lab: Lab) {
lab.log("crash handler fired for " + event.vm + " (" + event.name + ")")
let Ok(vm) = lab.vm(event.vm) else { return }
match vm.screenshot("") {
Ok(path) => lab.log("saved crash screenshot: " + path),
Err(e) => lab.log("could not screenshot: " + e),
}
}
```
## Related
- [lab {} block](../references/entity_labs.md)
- [provision {} block](../references/entity_provision_block.md)
- [on "event" {} handler](../references/entity_on_handler.md)
- [wscript: overview](../references/concept_wscript_overview.md)
- [wscript: pattern matching & errors](../references/concept_wscript_matching.md)
- [Lifecycle events](../references/fact_events.md)
[← Back to SKILL.md](../SKILL.md)