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

By Kad

Leave a Reply

Your email address will not be published. Required fields are marked *