Part 19 – Building a Full VM Deployment Workflow with Ansible

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 …

(Visited 21 times, 1 visits today)

By Ash Thomas

Ash Thomas is a seasoned IT professional with extensive experience as a technical expert, complemented by a keen interest in blockchain technology.