Hi! I'm your Kestra AI assistant. Ask me anything about workflows.
EXAMPLE QUESTIONS
How to set up CI/CD for kestra flows?
What are main differences between Open Source and Enterprise?
What is a task runner?
Run Proxmox like vCenter, minus the tax.
Trigger Proxmox API operations from cron or any HTTP signal. Drain nodes via live migration, snapshot before patching, verify vzdump backups by restoring to a temp VM, and coordinate VMware-to-Proxmox migrations across the cluster.
Run Proxmox like vCenter without the Broadcom tax: a workflow engine that listens to cron or VM state changes, handles VMware-to-Proxmox migration via the ESXi Import Wizard, snapshot-gated patching, and vzdump restore drills, and chains Proxmox with Ansible, Terraform, and NetBox. Drop the vRA subscription; prove backups restore monthly.
Pre-patch snapshot, OS update, rollback on health-check failure
Open blueprint
Drain a Proxmox node for maintenance: live-migrate all guests off, gate, return
Open blueprint
What Kestra wraps around your Proxmox cluster: when actions fire, what gets snapshotted first, who drains a node before maintenance, and where the audit lives. The Proxmox API, the ESXi Import Wizard, and vzdump backups stay where they are.
Schedule, event, and Proxmox VM state triggers
Native cron, fixed intervals, webhooks, and the vm.Trigger that polls Proxmox and fires when a VM enters or leaves a target status (running, stopped). Stateful change detection means a VM that stays stopped doesn't trigger on every poll, only on the transition. The matching VMs reach the flow as trigger.body.
VMware-to-Proxmox migration coordinated as a flow
Use Proxmox VE 9's built-in ESXi Import Wizard through the API: register the source ESXi as storage, stop the VMware VM, drive the import via Kestra, then power on in Proxmox. Pre-flight checks (snapshot consolidation, VM stopped) run as flow steps. The original ESXi VM stays as a rollback target until cutover is verified.
Snapshot-first maintenance with rollback for VMs and LXC
snapshot.Create before patches or risky config changes. snapshot.Rollback reverts on a failed health check. The snapshot name flows forward through the execution, so every change has a documented rollback target. Same flow shape works for QEMU VMs and LXC containers via the resourceType field.
Node drain with live migration before maintenance
vm.List on the target node, then vm.Migrate (or container.Migrate) each guest to other cluster nodes. WaitForTask polls each UPID until completion. Once the node is empty, run maintenance (kernel upgrade, hardware swap), then optionally migrate selected guests back.
vzdump backups as a flow step, with restore-drill verification
backup.Create with snapshot mode and zstd compression. Periodically, backup.Restore writes a backup archive to a temporary VMID, the flow boots and probes it, then deletes the temp VM. A backup that doesn't restore is not a backup, the drill catches that monthly.
VMs and LXC containers from the same flow API
Proxmox is the only mainstream hypervisor that runs QEMU VMs and LXC containers side by side. The plugin exposes both: vm.* tasks for VMs, container.* tasks for LXC. One flow can spin up a Postgres VM, a Pi-hole LXC, and a monitoring LXC in parallel, with the same lifecycle semantics.
How Proxmox admins use the cluster and Kestra
Patterns Proxmox teams run in production today. Each one shows the flow end to end, with the real plugin classes in play.
Broadcom exit
VMware-to-Proxmox import coordinated through the ESXi Import Wizard
Pre-flight: confirm the VMware VM is stopped and all snapshots consolidated (the most common cause of import failure). Drive the Proxmox ESXi Import via the API, wait for the UPID to complete, then start the VM in Proxmox. The original ESXi VM stays as a rollback target until the post-import health check passes.
Pre-flight enforced
The flow refuses to import if the source has unconsolidated snapshots, the failure mode that breaks most imports.
Per-VM rollback path
The ESXi VM stays available. If the Proxmox health probe fails, the flow alerts and the ESXi VM is still a valid running copy.
Wave-friendly
Run the same flow per VM in a ForEach to migrate a wave of guests, with the same gate per cutover.
wave trigger
manual or schedule
stop ESXi VM
vCenter task
ESXi import
Proxmox API
wait for task
UPID complete
start in Proxmox
qm start
health probe
verify
notify
Slack with VMID
Cluster ops
Node drain with live migration before maintenance
cluster.ListResources finds all VMs and LXC containers on the target node. A ForEach dispatches each guest to a target node via vm.Migrate or container.Migrate. Live migration when supported, offline when not. WaitForTask polls each UPID until done. Once the node is empty, a Pause task gates the actual maintenance work.
Live migration when the guest supports it
QEMU VMs migrate live without downtime. LXC containers migrate with a brief pause (restart on target).
Per-guest UPID tracked
WaitForTask polls Proxmox until each migration finishes, no blind sleeps.
Drain blocks until empty
The flow refuses to proceed to the maintenance gate until cluster.ListResources shows zero guests on the node.
Reversible
A second flow run with the source node as target rebalances guests back after maintenance.
maintenance trigger
scheduled or webhook
list guests on node
cluster resources
ForEach guest
live migrate
vm.Migrate
to another node
WaitForTask
UPID OK
Pause for maintenance
manual gate
Safe patching
Pre-patch snapshot, OS update, rollback on health-check failure
snapshot.Create captures the pre-patch state of a VM or LXC. A Shell task runs the OS update over SSH. An HTTP probe checks the service. On failure, the errors branch fires snapshot.Rollback against the same snapshot name and pages on-call. Works for both QEMU VMs and LXC containers via the resourceType property.
Same shape for VMs and containers
resourceType: vm or resourceType: container on the snapshot tasks, everything else identical.
Snapshot name flows forward
The pre-patch snapshot name is computed once and reused by the rollback in the errors branch.
Auto-rollback on probe fail
An errors branch restores the snapshot if the post-patch HTTP probe fails, no human required.
Replayable per host
Re-run the patch on the same host with the same snapshot from the execution UI.
patch window
cron
pre-patch snapshot
vm or container
ssh patch
apt / yum upgrade
health check
HTTP probe
rollback on fail
snapshot revert
notify
Slack
Backup drill
vzdump backup restore drill, monthly
Pick a recent vzdump archive, restore it to a temporary VMID on a target node, boot the VM, probe a known service, then delete the temp VM. A backup that doesn't restore is not a backup, this catches storage corruption, schema mismatches, and config drift before the real disaster.
Drill on a temp VMID
The restore lands on a throwaway VMID, never the production one, so a corrupted backup can't damage the source.
Cleanup always runs
An errors branch deletes the temp VM even when the drill fails, so the cluster doesn't fill up with restore artifacts.
Backup health on the dashboard
Every drill posts a pass/fail summary to Slack and writes a row to an audit table.
monthly cron
first of month
list backups
pick latest
restore to temp VMID
drill target
start temp VM
boot
service probe
verify
delete temp VM
cleanup
report
Slack summary
Kestra allowed us to move from fragmented automation to a unified control plane, secure, scalable, and manageable by all our teams.
Drives the ESXi Import Wizard, pre-flight checks, per-VM gates
Possible via custom playbooks
Possible via shell + import wizard
Possible, all manual
Snapshot rollback as a flow step (VM and LXC)
Native, snapshot name flows forward to <code>errors</code> branch
Ansible modules exist, no native rollback flow
Snapshot resource, no health-gated rollback
Manual via REST
Live migration for node drain
ListResources + ForEach + Migrate + WaitForTask in one flow
Possible via playbooks
Not in scope (provisioning tool)
Manual via REST + polling
vzdump backup restore drill
List + Restore to temp VMID + probe + cleanup, scheduled
Possible via playbooks
Not in scope
Manual via REST
Both VM and LXC lifecycle from the same orchestrator
Native <code>vm.*</code> and <code>container.*</code> tasks side by side
Separate modules per resource type
Separate resource types
Manual API calls
Event triggers (webhook, S3, Kafka, VM state)
Native, includes <code>vm.Trigger</code> on Proxmox state changes
Not a trigger framework
Webhook only
Manual
Approval gate between waves
Native Pause + resume, named reviewer logged
Not native
Not native
Manual
Chain Proxmox with Ansible, Terraform, NetBox, ServiceNow
Native plugin tasks, outputs flow forward
Ansible-centric
Terraform-centric
Glue scripts required
Air-gapped / lab deploy
Self-hosted by default, OSS edition free
Self-hosted (with AAP subscription for the UI layer)
Self-hosted (HCP for hosted)
Self-hosted
Orchestrate beyond Proxmox
1300+ plugins, cross-stack
Broad Ansible collections, Ansible-centric
Terraform providers, provisioning-centric
Limited
Deeper comparison Kestra vs VMware Cloud Foundation
Side-by-side breakdown across hypervisor day-2 ops, self-service catalogs, snapshot rollback, and cross-stack orchestration as teams plan VMware exits.
Find answers to your questions right here, and don't hesitate to Contact Us if you couldn't find what you're looking for.
No. Proxmox runs your VMs and containers. Kestra calls the Proxmox REST API through the io.kestra.plugin.proxmox plugin to run the operations you used to script: vm.Clone, container.Create, snapshot.Create, backup.Restore, vm.Migrate, and so on. The hypervisor stays where it is. Kestra orchestrates the workflow around your cluster.
Proxmox VE 9 ships an ESXi Import Wizard that connects directly to an ESXi host or datastore, converts disk formats (VMDK to qcow2 or raw), and registers the VM in Proxmox. The flow stops the source VM in vCenter (Proxmox does not live-migrate from VMware), drives the import via the Proxmox API, waits for the task UPID, then starts the new VM in Proxmox and runs a health probe. Most import failures come from unconsolidated VMware snapshots, so the flow refuses to start until that pre-flight check passes.
Yes. The plugin splits into vm.* tasks for QEMU and container.* tasks for LXC, with matching shape (Create, Clone, Start, Stop, Migrate, Update). Snapshot and backup tasks accept a resourceType property so the same task type works on either. Proxmox is the only mainstream hypervisor that runs both side by side, and the plugin exposes both fully.
vm.Migrate sets online: true for live migration on QEMU VMs that support it. The task returns a Proxmox UPID. task.WaitForTask polls the UPID until exitstatus=OK or the timeout. For LXC containers, migration involves a short restart on the target node (LXC does not live-migrate). The node drain blueprint above iterates with ForEach so the whole node empties before the maintenance gate.
Use a Proxmox API token, not a root password. Create a token in the Proxmox UI under Datacenter, Permissions, API Tokens, scoped to a service user with the minimum required privileges (PVEVMAdmin, PVEDatastoreUser, and so on). Store the token ID and secret in Kestra's secrets backend and reference them via pluginDefaults on io.kestra.plugin.proxmox at the namespace or flow level. Every Proxmox task picks them up without repeating credentials.
No. The io.kestra.plugin.proxmox plugin ships in the open-source edition. Kestra Enterprise adds Apps (typed self-service forms), namespace-scoped RBAC, audit logs, worker isolation, and SSO, which Proxmox shops running multi-team clusters typically want on top.
Yes. Kestra ships self-hosted on Docker or Kubernetes (often itself running on Proxmox), runs fully air-gapped, and supports remote workers close to each Proxmox node. The open-source edition includes unlimited workflows and event-driven triggers with no external dependency on Kestra's infrastructure. See Kestra for infrastructure automation for the broader picture across Proxmox, Terraform, Ansible, and cloud APIs.
Each tool keeps its job. Use Terraform with the telmate/proxmox provider to declare the desired state of VMs, networks, and storage. Use Ansible to configure the guests once they exist. Use Kestra above both: schedule and gate the Terraform run, hand outputs to Ansible, snapshot before patching, drive ESXi imports, and run vzdump restore drills, all in one execution history.
Ready to orchestrate VMware exits and Proxmox day-2 ops?
Drive the ESXi Import Wizard, drain nodes with live migration, snapshot before patching, and verify vzdump backups with a monthly restore drill. Open source, self-hosted, event-driven.