In this blog I will explain how I was able to deploy a whole ready environment ready to use as people like to call it “On-demand environments”. I was able to deploy this in 8 minutes and it had everything you need Active Directory, DNS, Router/Switch, SMTP, windows server, redhat server and workstation. It was very simple all I did was build the environment from scratch, convert it to a VMware template, create my yaml playbooks in github that connects to my AWX (open source gui for ansible) and created a template to run the job in AWX. This was all deployed using ONE CLICK and ONE CLICK to destroy it.
Below is the job from AWX being successful

destroying the environment output

My templates in vCenter

The deployed boxes

I will not go through setting up an environment from scratch in VMware but I will show you my playbooks, the key was making sure switch/router was deployed first then dns/active directory then others.
deploy.yml
- name: Deploy VM from template
hosts: localhost
gather_facts: false
tasks:
- name: Deploy Virtual Machine from template test-VYOS
vmware_guest:
hostname: "vc1.vmware.local"
username: "{{ lookup('env', 'VMWARE_USER') }}"
password: "{{ lookup('env', 'VMWARE_PASS') }}"
validate_certs: False
template: test-VYOS
datacenter: dc1
cluster: cl1
datastore: ds1-2tb
folder: /dc1/vm
name: test-VYOS-1
state: poweredon
- name: Deploy Virtual Machine from template test-AD-DNS
vmware_guest:
hostname: "vc1.vmware.local"
username: "{{ lookup('env', 'VMWARE_USER') }}"
password: "{{ lookup('env', 'VMWARE_PASS') }}"
validate_certs: False
template: test-AD-DNS
datacenter: dc1
cluster: cl1
datastore: ds1-2tb
folder: /dc1/vm
name: test-AD-DNS-1
state: poweredon
- name: Deploy Virtual Machine from template test-SMTP
vmware_guest:
hostname: "vc1.vmware.local"
username: "{{ lookup('env', 'VMWARE_USER') }}"
password: "{{ lookup('env', 'VMWARE_PASS') }}"
validate_certs: False
template: test-SMTP
datacenter: dc1
cluster: cl1
datastore: ds1-2tb
folder: /dc1/vm
name: test-SMTP-1
state: poweredon
- name: Deploy Virtual Machine from template test-REDHATSVR
vmware_guest:
hostname: "vc1.vmware.local"
username: "{{ lookup('env', 'VMWARE_USER') }}"
password: "{{ lookup('env', 'VMWARE_PASS') }}"
validate_certs: False
template: test-REDHATSVR
datacenter: dc1
cluster: cl1
datastore: ds1-2tb
folder: /dc1/vm
name: test-REDHATSVR-1
state: poweredon
- name: Deploy Virtual Machine from template test-W10WS
vmware_guest:
hostname: "vc1.vmware.local"
username: "{{ lookup('env', 'VMWARE_USER') }}"
password: "{{ lookup('env', 'VMWARE_PASS') }}"
validate_certs: False
template: test-W10WS
datacenter: dc1
cluster: cl1
datastore: ds1-2tb
folder: /dc1/vm
name: test-W10WS-1
state: poweredon
- name: Deploy Virtual Machine from template test-WIN2019SVR
vmware_guest:
hostname: "vc1.vmware.local"
username: "{{ lookup('env', 'VMWARE_USER') }}"
password: "{{ lookup('env', 'VMWARE_PASS') }}"
validate_certs: False
template: test-WIN2019SVR
datacenter: dc1
cluster: cl1
datastore: ds1-2tb
folder: /dc1/vm
name: test-WIN2019SVR-1
state: poweredon
destroy-lab.yml
---
- name: Power off virtual machine
gather_facts: no
hosts: localhost
tasks:
- name: poweroff "test-AD-DNS-1"
vmware_guest:
hostname: "vc1.vmware.local"
username: "{{ lookup('env', 'VMWARE_USER') }}"
password: "{{ lookup('env', 'VMWARE_PASS') }}"
validate_certs: no
datacenter: "dc1"
cluster: "cl1"
name: "test-AD-DNS-1"
state: absent
force: true
- name: poweroff "test-REDHATSVR-1"
vmware_guest:
hostname: "vc1.vmware.local"
username: "{{ lookup('env', 'VMWARE_USER') }}"
password: "{{ lookup('env', 'VMWARE_PASS') }}"
validate_certs: no
datacenter: "dc1"
cluster: "cl1"
name: "test-REDHATSVR-1"
state: absent
force: true
- name: poweroff "test-SMTP-1"
vmware_guest:
hostname: "vc1.vmware.local"
username: "{{ lookup('env', 'VMWARE_USER') }}"
password: "{{ lookup('env', 'VMWARE_PASS') }}"
validate_certs: no
datacenter: "dc1"
cluster: "cl1"
name: "test-SMTP-1"
state: absent
force: true
- name: poweroff "test-VYOS-1"
vmware_guest:
hostname: "vc1.vmware.local"
username: "{{ lookup('env', 'VMWARE_USER') }}"
password: "{{ lookup('env', 'VMWARE_PASS') }}"
validate_certs: no
datacenter: "dc1"
cluster: "cl1"
name: "test-VYOS-1"
state: absent
force: true
- name: poweroff "test-W10WS-1"
vmware_guest:
hostname: "vc1.vmware.local"
username: "{{ lookup('env', 'VMWARE_USER') }}"
password: "{{ lookup('env', 'VMWARE_PASS') }}"
validate_certs: no
datacenter: "dc1"
cluster: "cl1"
name: "test-W10WS-1"
state: absent
force: true
- name: poweroff "test-WIN2019SVR-1"
vmware_guest:
hostname: "vc1.vmware.local"
username: "{{ lookup('env', 'VMWARE_USER') }}"
password: "{{ lookup('env', 'VMWARE_PASS') }}"
validate_certs: no
datacenter: "dc1"
cluster: "cl1"
name: "test-WIN2019SVR-1"
state: absent
force: true
- name: Remove "test-AD-DNS-1"
vmware_guest:
hostname: "vc1.vmware.local"
username: "{{ lookup('env', 'VMWARE_USER') }}"
password: "{{ lookup('env', 'VMWARE_PASS') }}"
validate_certs: no
datacenter: "dc1"
cluster: "cl1"
name: "test-AD-DNS-1"
state: absent
- name: Remove "test-REDHATSVR-1"
vmware_guest:
hostname: "vc1.vmware.local"
username: "{{ lookup('env', 'VMWARE_USER') }}"
password: "{{ lookup('env', 'VMWARE_PASS') }}"
validate_certs: no
datacenter: "dc1"
cluster: "cl1"
name: "test-REDHATSVR-1"
state: absent
- name: Remove "test-SMTP-1"
vmware_guest:
hostname: "vc1.vmware.local"
username: "{{ lookup('env', 'VMWARE_USER') }}"
password: "{{ lookup('env', 'VMWARE_PASS') }}"
validate_certs: no
datacenter: "dc1"
cluster: "cl1"
name: "test-SMTP-1"
state: absent
- name: Remove "test-VYOS-1"
vmware_guest:
hostname: "vc1.vmware.local"
username: "{{ lookup('env', 'VMWARE_USER') }}"
password: "{{ lookup('env', 'VMWARE_PASS') }}"
validate_certs: no
datacenter: "dc1"
cluster: "cl1"
name: "test-VYOS-1"
state: absent
- name: Remove "test-W10WS-1"
vmware_guest:
hostname: "vc1.vmware.local"
username: "{{ lookup('env', 'VMWARE_USER') }}"
password: "{{ lookup('env', 'VMWARE_PASS') }}"
validate_certs: no
datacenter: "dc1"
cluster: "cl1"
name: "test-W10WS-1"
state: absent
- name: Remove "test-WIN2019SVR-1"
vmware_guest:
hostname: "vc1.vmware.local"
username: "{{ lookup('env', 'VMWARE_USER') }}"
password: "{{ lookup('env', 'VMWARE_PASS') }}"
validate_certs: no
datacenter: "dc1"
cluster: "cl1"
name: "test-WIN2019SVR-1"
state: absent