VCF 4.0.1 – Cloud Builder deployment with Ansible

As we all know, lazy sysadmin is the best sysadmin so even few clicks may cause you feel exhausted. That’s why I wrote Ansible role to automate VCF Cloud Builder deployment using ‘vmware_deploy_ovf’ module. Of course some OVA property keys were needed, but they can be found under ProductSection in OVF descriptor.

This ansible role is for Cloud Builder 4.0 and I didn’t test on 3.x yet but should be fine as well (depending on whether OVF property keys are different in v. 3.x or not).

Ok so let’s start. Quick view on my playbook ‘createCloudBuilder.yml’:

- name: Deploy Cloud Builder
  hosts: localhost

    - name: "Running Role: createCloudBuilder"
        name: createCloudBuilder
        tasks_from: deployCloudBuilder.yml

Below some of vars used in ‘createCloudBuilder’ role task ‘deployCloudBuilder.yml’ .

Let’s take a look at only few of them because rest of them should be pretty clear.

vCenterUser: "administrator@vsphere.local"
cloudBuilderVmName: "cloudBuilder401"
networkMgmt: "Management Network-98529ff0-30ab-4006-8f07-38f7cad2d167"
cloudBuilderOva: "/opt/binaries/VMware-Cloud-Builder-"
cloudBuilderPassword: "SoMePa$$w0rD!"
cloudBuilderIP: ""
cloudBuilderNetmask: ""
cloudBuilderNTP: ""

And the last part- view on task called ‘deployCloudBuilder.yml’. As you can see, when the cloud builder vm deployment task is done, vm is powered on and task will finish when vm is up and running.

- name: Deploy Cloud Builder using OVA
    hostname: '{{ mgmtVcsFQDN }}'
    username: '{{ vCenterUser }}'
    password: '{{ vCenterPassword }}'
    validate_certs: False
    name: '{{ cloudBuilderVmName }}'
    datastore: '{{ vCenterDatastore }}'
    disk_provisioning: 'thin'
    datacenter: '{{ vCenterDataCenter }}'
    cluster: '{{ vCenterCluster }}'
    resource_pool: '{{ vCenterResourcePool }}'
       'Network 1': '{{ networkMgmt }}'
    ova: '{{ cloudBuilderOva }}'
    power_on: 'yes'
    fail_on_spec_warnings: 'yes'
    wait_for_ip_address: 'no'
      guestinfo.ADMIN_USERNAME: admin
      guestinfo.ADMIN_PASSWORD: '{{ cloudBuilderPassword }}'		
      guestinfo.ROOT_PASSWORD: '{{ cloudBuilderPassword }}'
      guestinfo.hostname: cloudBuilder
      guestinfo.ip0: '{{ cloudBuilderIP }}'
      guestinfo.netmask0: '{{ cloudBuilderNetmask }}'
      guestinfo.gateway: '{{ cloudBuilderGW }}'
      guestinfo.DNS: '{{ cloudBuilderDNS }}'
      guestinfo.domain: '{{ domainName }}'
      guestinfo.searchpath: '{{ domainName }}'
      guestinfo.ntp: '{{ cloudBuilderNTP }}'
  register: deployOvaCloudBuilder

- debug:
      - 'Cloud Builder has been deployed with below configuration:'
      - 'VM name: {{ cloudBuilderVmName }}'
      - 'Hostname: '{{ cloudBuilderVmName }}'
      - 'VM network config: IP: {{ cloudBuilderIp }}, GW:{{ cloudBuilderGW }}, Netmask:{{ cloudBuilderNetmask }}, DNS: {{ cloudBuilderDNS }}, domain: {{ domainName }}, searchpath: {{ domainName }}, NTP: {{ cloudBuilderNTP }}'
  when: deployOvaCloudBuilder is succeeded
  delegate_to: localhost

- name: Waiting for Cloud Builder to become up and running
    hostname: '{{ }}'
    username: '{{ vCenter.user }}'
    password: '{{ temporaryCredentials.password }}'
    validate_certs: no
    name: '{{ cloudBuilderVmName }}'
    folder: '{{ vCenter.vmFolder }}'
  delegate_to: localhost

Let’s run our playbook: ansible-playbook createCloudBuilder.yml

Cloud Builder vm deployment task is in progress and after few minutes it should be done.

And few screenshots as a proof that vm is reachable and credentials are fine 🙂

That’s it. Ping me if you have any questions:)