Every VM comes up the same way.And you watch it happen.
Each template picks a workflow that takes its VMs from clone to ready.
The portal's deploy panel, replaying the built-in workflow.
Five built-in scenes. One of yours.
The built-in deployment, slowed down — scene 05 is what you add.
- Scene 01Proxmox
Clone
A full clone of the template. web-2104 becomes VMID 2104 — never silently another id.
Standard Windows deploymentScene 01 · replay - Scene 02Proxmox
Boot
Proxmox starts the VM, then it joins its node's backup job.
Standard Windows deploymentScene 02 · replay - Scene 03Portal
Agent
The Verlocx agent connects out, and the portal waits for it.
Standard Windows deploymentScene 03 · replay - Scene 04Verlocx agent
Identity
Domain join with rename, a reboot, a check — and the owner becomes a local admin.
Standard Windows deploymentScene 04 · replay - Scene 05Added by you
Your steps
Scripts, reboots, waits and idempotent building blocks — whatever your team adds.
Standard Windows + your stageScene 05 · replay - Scene 06Proxmox HA
Availability
Last, an HA rule for its node — so HA ignores the reboots before it.
Standard Windows deploymentScene 06 · replay
- 01clone
- 02start
- 03backup_job
- 04wait_agent
- 05rename
- 06domain_join
- 07local_admins
- 08verify
- 09ha_rule
A reboot mid-step isn't a failure.
The agent notes where it is, the portal waits, the run continues.
The connection drops. The step stays open; the portal waits.
22 things a step can do.
Open a row for its parameters.
Proxmox
ProxmoxVia the Proxmox API · 4
proxmox.cloneClone template
Full clone of the VM's template into a new VMID (VMID rules + storage from the template defaults).
no parametersproxmox.startStart VM
Power on the cloned VM and wait for the start task.
no parametersproxmox.backup_jobAssign backup job
Add the VM to its node's backup job (prefix from the template defaults). Non-fatal by default.
no parametersproxmox.ha_ruleAdd to HA
HA resource + node-affinity rule (template defaults). Put it last so HA ignores in-guest reboots.
no parameters
Settings come from the template's defaults.
Portal
PortalHandled by the portal · 2
portal.waitWait
Wait a fixed time before the next step (e.g. let a service settle after a change).
- Seconds
portal.wait_agentWait for the agent
Wait until the guest's Verlocx agent is online (first boot / after a reboot).
- Timeout (s)
Nothing runs in the guest.
Verlocx agent
Guest (agent)Run by the agent in the guest · 8
agent.renameSet hostname
Rename the computer (folded into the domain join when one follows). Reboots when renaming alone.
- Hostname
agent.domain_joinJoin domain
Waits for a DC, joins (rename included), reboots and verifies. Uses the project's domain-join account.
- Domain
- OU
agent.local_adminsAdd local admins
Add accounts to local Administrators (by SID S-1-5-32-544, language-independent).
- Members
agent.verifyVerify identity
Read hostname + domain live and fail if they aren't what the workflow set.
no parametersagent.scriptRun script
Run a script in the guest, stream its output, check the result (exit code / text / JSON).
- Shell
- Script
- Timeout (s)
- Expected exit code
- Accept any exit code
- Output must contain
- Output must not contain
- JSON output must match
- Retry until the check passes
- Reboot afterwards
agent.rebootReboot guest
Restart the guest; the step completes when its agent is back.
- Delay (s)
agent.wait_forWait for condition
Poll until a service runs, a port opens, a file exists or a check script succeeds.
- Condition
- Target
- Shell (script_ok)
- Timeout (s)
- Check every (s)
agent.wait_readyWait until Windows is ready
Hold until setup/OOBE has finished (safe to rename, join, install).
no parameters
Building blocks
Building block · Windows · agent ≥ 0.0.33Rendered by the portal, run by the agent · 8
module.fileEnsure file (Windows)
Make sure a file exists with exactly this content (or doesn't exist).
- Path
- Content
- Ensure
module.directoryEnsure folder (Windows)
Make sure a folder exists (or doesn't).
- Path
- Ensure
module.registryEnsure registry value (Windows)
Set (or remove) a registry value; the key is created when missing.
- Key
- Value name
- Type
- Data
- Ensure
module.serviceEnsure service (Windows)
Bring a Windows service to a state and/or startup type.
- Service name
- State
- Startup type
module.windows_featureEnsure Windows feature (Windows)
Install or remove a Windows (Server) feature / optional feature.
- Feature name
- Ensure
module.ipv6IPv6 on adapters (Windows)
Enable or disable the IPv6 binding (ms_tcpip6) on network adapters.
- IPv6
- Adapters
module.certificateEnsure certificate (Windows)
Import a certificate (PEM) into a LocalMachine store unless it's already there (by thumbprint).
- Certificate (PEM)
- Store
module.firewall_ruleEnsure firewall rule (Windows)
Create, update or remove a Windows Defender Firewall rule (matched by display name).
- Rule name
- Direction
- Protocol
- Port(s)
- Action
- Ensure
Each compares first, then reports ok or changed.
Write it once. Every VM fills it in.
Variables are filled in per VM, when the step runs.
Run a script in the guest, stream its output, check the result (exit code / text / JSON).
Earlier steps: {{steps.ready.output}}
A list, a graph or JSON. Same workflow.
Edit in whichever view suits the change — the others follow.
Deployments
What a new VM goes through — pick a workflow per template (Templates → Defaults).
Hold until setup/OOBE has finished (safe to rename, join, install).
Run a script in the guest, stream its output, check the result (exit code / text / JSON).
Create, update or remove a Windows Defender Firewall rule (matched by display name).
Install or remove a Windows (Server) feature / optional feature.
For web-2104:step 1 runsstep 2 runsstep 3 runsstep 4 runs
Watch a VM go from clone to ready.
Next: configuration runs · the Verlocx agent