Hi! I'm your Kestra AI assistant. Ask me anything about workflows.
EXAMPLE QUESTIONS
How to write expression for previous tasks outputs?
How to handle errors & retry on flow?
How to run Python script?
Run Nutanix AHV Day-2 ops from one flow.
Capture app-consistent recovery points before patching, replicate them to a DR cluster on schedule, slice Prism inventory by Category for chargeback, and run VMware-to-AHV migration waves when the moment comes.
Replace Nutanix Self-Service (Calm) and X-Play with a workflow engine that listens to schedules or migration waves, handles crash- or app-consistent recovery points with cross-cluster DR replication, and chains AHV with VMware, Ansible, and ServiceNow. Drop the Calm catalog license; cut VMware-to-AHV cutover risk to per-VM waves with rollback.
Pre-patch snapshot, OS update, rollback on health-check failure
Open blueprint
Coordinate a Nutanix Move wave: readiness check, gate, cutover, AHV start
Open blueprint
Weekly chargeback report from Prism Central inventory
Open blueprint
Around every AHV operation, across every cluster.
What Kestra wraps around your Nutanix clusters: how migrations from VMware land in waves, what gets a recovery point first, who approves an LCM upgrade, and where the audit lives. Prism Central and your AHV hosts stay in place. The Calm / Self-Service catalog gets replaced.
VMware-to-AHV migration coordinated in waves
Drive Nutanix Move through the v2 REST API from a flow: add source and target providers, build a migration plan, run readiness checks, then cut over wave by wave when each VM hits state 5 (ready for cutover). Kestra handles the wave scheduling, dependency ordering, and rollback path that Move itself does not.
Crash- or app-consistent recovery points before any risky change
CreateVmSnapshot emits a recovery point through the Nutanix dataprotection v4 API, with optional expiration. Pick crash-consistent for speed, app-consistent (Guest Tools quiesce) for databases. RestoreVmSnapshot reverts on a failed health check, with the snapshotExtId flowing forward from the create step.
AHV template versioning with the v4 lifecycle
CloneTemplate, ConvertVmToTemplate, and ConvertTemplateToVm chain in a single flow. Build a new template version, deploy a test VM from it via ConvertTemplateToVm, run an Ansible smoke test, then mark the version active. Old versions stay deployable for rollback. The async taskExtId from each call is logged.
Prism inventory and Categories as flow inputs
ListVms exposes the VMM v4 OData surface: filter, sort, select, and paginate by Category, cluster, power state, or tag. Build chargeback reports grouped by department, identify drift between Categories and ServiceNow CMDB, or pull only the VMs in a given environment for a wave migration.
Calm catalog replaced by Kestra Apps with named approvers
A Kestra App is a typed form bound to a flow: dropdowns for the cluster, the Category, the template, the recovery point. Operators submit, the same audited flow runs every time. The Pause task suspends before DeleteVm, ResetVm, or a template conversion. Reviewer identity and resume timestamp land in the execution.
Per-VM, per-task execution history with the async taskExtId
Every AHV task returns the async taskExtId from Prism Central. Kestra waits on the task, surfaces success or failure inline, and stores the operator, inputs, and resulting VM extId with the execution. Auditors get evidence by default, attached to the execution that produced it.
How Nutanix admins use AHV and Kestra
Patterns Nutanix platform teams run in production today. Each one shows the flow end to end, with the real plugin classes in play.
Migration
VMware-to-AHV migration coordinated in waves
Inventory the source with vmware.vcenter.ListVms, build a Nutanix Move migration plan through the v2 REST API, drive readiness checks, then cut over one wave at a time. Move handles the data copy, Kestra orchestrates the wave schedule, dependency ordering, and the per-VM rollback path. The cutover commit happens only after the VM state reads 5 (ready).
Wave-by-wave by Category
Filter source VMs by Category (department, criticality, environment) and migrate one slice at a time.
Move data copy, Kestra orchestration
Move handles the storage replication, Kestra runs the scheduling, dependency check, and per-VM cutover gate.
Rollback path per wave
VMware source stays live until cutover; an errors branch can power the source VM back on and pause the wave.
Per-VM audit trail
Every cutover has the source vCenter UUID, the AHV extId, the operator, and the readiness state on record.
What you get
Pattern based on the documented Nutanix Move v2 REST API workflow (login, build plan, poll workloads to state 5, cutover).
wave trigger
manual or schedule
source inventory
vCenter ListVms
Move plan
v2 API create
readiness poll
wait state=5
approve wave
named reviewer
cutover action
per-VM commit
AHV start
power on target
Ansible reconfigure
join domain, agents
Operations
Pre-patch snapshot, OS update, rollback on health-check failure
CreateVmSnapshot emits a crash-consistent recovery point on the target AHV VM. A Shell task runs the OS update over SSH and reboots. An HTTP probe checks the application. On any failure, the errors branch fires RestoreVmSnapshot against the same snapshotExtId and pages on-call. Shipped as a working Kestra blueprint.
Crash- or app-consistent per VM
Pick consistency per VM. Databases get quiesce via Guest Tools, stateless tiers stay crash-consistent for speed.
Automatic rollback
The errors branch restores the recovery point if the post-patch probe fails, no human required.
Replayable per VM
Re-run the patch on the same VM with the same snapshotExtId from the execution UI.
What you get
Published as the nutanix-safe-patching-workflow blueprint in the Kestra catalog.
cron trigger
patch window
pre-patch snapshot
recovery point
ssh patch
apt / yum upgrade
health check
HTTP probe
rollback on fail
restore snapshot
notify
Slack
DR
Cross-cluster recovery point replication for DR readiness
On a daily schedule, CreateVmSnapshot captures a recovery point on the production cluster. A core.http.Request call to the Prism Central v4 dataprotection API replicates the recovery point to the DR cluster. ListVmSnapshots on the DR side confirms the replica landed. The retention is set per environment via the API expiration field, so old recovery points cycle out automatically.
Per-Category retention
Production VMs get 14-day retention, test gets 3. The expirationTime on the recovery point enforces it.
Loop by Category
ListVms + OData filter gives you the VMs in scope per environment, then ForEach handles the per-VM replication.
DR drill replayable
Re-run the verify task on demand to confirm a specific recovery point still exists on the DR cluster before a drill.
Quarterly DR exercise as a flow
Same flow, target inputs flipped: restore on DR cluster, validate, restore production routing, all in one execution ID.
daily cron
DR window
ForEach VM
by Category
create recovery point
prod cluster
replicate to DR
v4 API call
verify on DR
list snapshots
report
Slack summary
Inventory
Inventory and chargeback report from Prism Central
ListVms with an OData filter returns the VMs per Category (department, environment, owner). A small Python task aggregates vCPU, memory, and storage by department. The report posts to Slack and writes a row to a Google Sheet for chargeback. VMs without an owner Category get flagged as untagged.
OData filter at the API
Filter and select fields server-side via the v4 API, so the flow only ships the rows it needs.
Untagged VM detection
VMs without the expected Category surface in a separate Slack alert so owners can claim them.
Weekly trend stored
Each run appends a row to the Sheet, so leadership sees the per-department vCPU and memory trend over time.
weekly cron
Monday 9am
ListVms
OData filter
aggregate
Python by Category
post Slack
summary
write Sheet
chargeback
Kestra allowed us to move from fragmented automation to a unified control plane, secure, scalable, and manageable by all our teams.
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. AHV stays as your hypervisor, Prism Central stays as your management plane. Kestra calls the Prism Central v4 APIs (VMM for VM lifecycle, dataprotection for recovery points) through the io.kestra.plugin.ee.nutanix plugin, and reaches other Nutanix surfaces (Move, Categories, LCM) through the generic core.http.Request task. Kestra orchestrates the workflow around your cluster, not the cluster itself.
Move handles the data copy, Kestra handles the wave. The flow: inventory the VMware source with vmware.vcenter.ListVms, log in to Move (POST /v2/users/login), create or pick a migration plan, poll /v2/plans/{id}/workloads/list until each workload reaches state 5 (ready for cutover), gate the wave with the Pause task, then post the cutover action per workload. Once cutover succeeds, call nutanix.ahv.StartVm on the target and hand off to the Ansible plugin for domain join and agent install. The vCenter source stays live until cutover, so the rollback path is to power the source back on if the post-cutover health check fails.
Calm (renamed NCM Self-Service) is the catalog layer above Prism. X-Play is the runbook layer. Both are what Kestra replaces. Calm blueprints become Kestra YAML flows that can still call your existing Python actions. The Calm self-service catalog becomes Kestra Apps with typed inputs, RBAC, and an execution audit trail. X-Play playbooks become Kestra flows triggered by alerts, schedule, or webhook. AHV stays where it is.
CreateVmSnapshot emits a recovery point through the dataprotection v4 API and returns a snapshotExtId. That ID is stored in the execution outputs and reusable from any downstream task, including the errors branch. If the post-change health probe fails, RestoreVmSnapshot runs against that exact ID and reverts the VM. Both crash-consistent and application-consistent (Guest Tools quiesce) modes are supported, with optional expirationTime so old recovery points cycle out automatically.
Yes, through the v4 dataprotection API. The flow: CreateVmSnapshot on the production cluster, then a core.http.Request POST to the v4 replication endpoint, then ListVmSnapshots on the DR cluster to verify the replica landed. Set retention per environment via the expirationTime field. The same flow can be flipped for a DR drill: restore on the DR cluster, validate, restore production routing.
Credentials come from Kestra's secrets backend (built-in, or HashiCorp Vault, CyberArk, AWS Secrets Manager, GCP Secret Manager) and are injected at task execution time. The plugin accepts a bearer token or a username and password, plus the Prism Central host (and optional port, defaulting to 9440). Set them once via pluginDefaults at flow or namespace level and every Nutanix task picks them up.
The VMM v4 API supports OData on ListVms. The plugin exposes filter, orderBy, select, and pagination directly. Examples: powerState eq 'ON' and contains(name, 'prod-'), or categories/any(c: c eq 'dept/finance'). With fetchType: STORE the result lands as an ION file in internal storage, so downstream Python tasks can stream through 10,000 VM rows without loading them all in memory.
Yes, the io.kestra.plugin.ee.nutanix plugin is part of Kestra Enterprise. Kestra Enterprise also includes Apps, RBAC, audit logs, worker isolation, and SSO, which infrastructure teams replacing Calm typically need on top. For the broader context across Terraform, Ansible, Argo CD, and cloud APIs, see Kestra for infrastructure automation and the dedicated Terraform orchestration page.
Yes. Kestra ships self-hosted on Docker or Kubernetes, runs fully air-gapped, and supports per-cluster control planes with remote workers close to each Prism Central endpoint. AD-backed authentication, least-privilege RBAC, and log shipping to the enterprise SIEM are all supported on-prem with no external dependency.
Keep Prism Central and AHV. Replace Calm / Self-Service with declarative YAML flows: crash- or app-consistent recovery points, cross-cluster replication, and Category-driven Prism inventory, all from one execution history.