We are going to build a single AWX Workflow Template called Deploy New VM – Full Workflow and chain three job templates together, all sharing the same survey variables to deploy a VM via Ansible.

Stage 1: Deploy VM
Name : Deploy VM
Inventory : vCenter Home Lab
Project : VMware Automation
Playbook : vm_deploy.yml
Credentials : Home vCenter
Stage 2: Verify VM Deployment
Name : Verify VM
Inventory : vCenter Home Lab
Project : VMware Automation
Playbook : vm_verify.yml
Credentials : Home vCenter
Stage 3: Notify VM Deployment
Name : Notify VM Deployment
Inventory : Demo Inventory
Project : VMware Automation
Playbook : vm_notify.yml
Credentials : Home vCenter
Create the Workflow Template
— Templates → Add → Workflow Template, fill in name, inventory, and save

Give it a name and click Save

Click the Visualizer tab

Add the first node — click START, select Job Template → Select VMDeploy

Leave it all blank

Click Save

Add the second node — hover over the VMDeploy box → click the “+” button that appears on the right

select “On Success” → Add Node → select Verify VM

select Verify VM


Add the third node — hover over the Verify VM box → click the “+” button → select “On Success”

Add Node → select Notify VM Deployment

Save the workflow and this gives the chain: START → VMDeploy → Verify VM → Notify VM Deployment


The AWX Survey
The survey is attached to the Workflow Template — not the individual job templates. The user fills it in once at launch and all variables flow automatically to every node

Survey tab → Add Questions:
Q1: VM Name? → vm_name [text, required]
Q2: Template? → template_name [dropdown: windows2019_template, windows2022_template]
Q3: Size? → size [dropdown: small, medium, large, xlarge]
Q4: Datastore? → datastore [dropdown: NVMe-01, NVMe-03, NVME-BAY02-02, Magnetic(NL), SmallDatastore]
Q5: Environment? → vm_environment [dropdown: Production, Non-Production, Development, UAT, Staging]
Q6: Owner? → owner [text, required]
Q7: Department? → department [text, required]
Q8: Cost Centre? → cost_centre [text, required]
Q9: Service Ticket? → service_ticket [text, required]
Q10: Server Purpose? → server_purpose [text, required]
Q11: Managed By? → managed_by [dropdown: Windows Server Team, Unix Team, Networks Team, AI/ML Team, DevOps Team]
Q12: Guest OS? → guest_os [dropdown: Windows 2019, Windows 2022, Windows 2025, RedHat Linux 8, Ubuntu 22.04]
Q13: Lease Policy? → lease_policy [dropdown: 1 Month, 3 Months, 6 Months, 12 Months, Permanent]
Q14: Backup Policy? → backup_policy [dropdown: Daily, Weekly, Monthly, Not Protected]
Q15: Notify Email? → notify_email [text, default: ash@gmail.com]
Launch the deployment and it handles the full VM provisioning lifecycle. Provide all inputs

Provide all inputs

Provide all inputs

finally click launch

Monitor the deployment

Custom attributes written to vCenter — every VM gets the following attributes stamped directly in vCenter visible from the VM summary page:
- Server Purpose
- Deployment Date
- Service Ticket
- Deployed By
- Department
- Owner
- Cost Centre
Custom attributes written to vCenter — every VM gets the following attributes stamped directly in vCenter visible from the VM summary page:
- Server Purpose
- Deployment Date
- Service Ticket
- Deployed By
- Department
- Owner
- Cost Centre

When the workflow completes successfully, email is delivered with full deployment details including IP address…..

That was some pretty cool stuff we did today …

