Using Ansible to Create a VMware Cluster

In today’s world of automation, Ansible stands as one of the most powerful tools for managing complex IT environments. For VMware users, Ansible provides a collection of modules specifically designed to interact with VMware environments, including vCenter, ESXi hosts, and clusters. One of the most useful modules is the community.vmware.vmware_cluster, which helps automate the process of creating and managing VMware clusters.

In this article, we’ll take a detailed look at an Ansible task to create a VMware cluster and break down each component for clarity. This will enable you to easily integrate this task into your own Ansible playbooks for automated VMware cluster creation.

Understanding the Ansible Task for Creating a VMware Cluster

Here is an example of an Ansible task that uses the community.vmware.vmware_cluster module to create a VMware cluster:

- name: Create Cluster
  community.vmware.vmware_cluster:
    hostname: '{{ vcenter_hostname }}'
    username: '{{ vcenter_username }}'
    password: '{{ vcenter_password }}'
    datacenter_name: datacenter
    cluster_name: cluster
  delegate_to: localhost

Breaking Down the Task

Let’s break down each part of this task to understand its functionality.

1. name: Create Cluster

This is the descriptive name of the task in the playbook. It helps provide context for what the task is doing. The name Create Cluster indicates that this task is responsible for creating a VMware cluster.

2. community.vmware.vmware_cluster

This is the Ansible module used in the task. The community.vmware.vmware_cluster module is part of the community.vmware collection, which contains several VMware-specific modules for managing your VMware environment. The vmware_cluster module is specifically designed for managing VMware clusters.

3. hostname: '{{ vcenter_hostname }}'

This parameter specifies the hostname or IP address of the vCenter server that Ansible will connect to. The value '{{ vcenter_hostname }}' is a Jinja2 variable that is dynamically pulled from your Ansible playbook or inventory, allowing you to configure this task across different environments.

4. username: '{{ vcenter_username }}'

This is the username for authenticating to the vCenter server. Like vcenter_hostname, this is also a variable, ensuring that credentials can be securely managed and reused across different playbooks or environments.

5. password: '{{ vcenter_password }}'

This parameter contains the password associated with the vCenter username. As with the username and hostname, it’s recommended to use Ansible Vault or another secure method for managing sensitive data like passwords.

6. datacenter_name: datacenter

The datacenter_name specifies the name of the VMware datacenter where the cluster will be created. This is a static string (datacenter) in the example, but it can also be a variable for more flexibility. This tells Ansible where to create the cluster within the vCenter environment.

7. cluster_name: cluster

The cluster_name defines the name of the VMware cluster to be created. This is another example of a static string that could be replaced with a variable, depending on your use case. The cluster name is an important identifier for organizing resources in VMware environments.

8. delegate_to: localhost

In this line, delegate_to: localhost tells Ansible to run the task from the local machine (where the playbook is being executed) instead of on a target host. This is common when interacting with external APIs, such as VMware’s API, where the connection must be made from the control node rather than the managed nodes.

 

Ansible Task to Delete a Cluster:

The same way you can use the below code to delete the cluster from the VMware Infrastructure

- name: Delete Cluster
  community.vmware.vmware_cluster:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    datacenter_name: datacenter
    cluster_name: cluster
    state: absent
  delegate_to: localhost

 

Example Playbook for Creating a VMware Cluster

Below is a full example of an Ansible playbook that creates a VMware cluster. It assumes you have the community.vmware collection installed and configured properly.

---
- name: Create VMware Cluster
  hosts: localhost
  gather_facts: no
  tasks:
    - name: Create Cluster
      community.vmware.vmware_cluster:
        hostname: '{{ vcenter_hostname }}'
        username: '{{ vcenter_username }}'
        password: '{{ vcenter_password }}'
        datacenter_name: '{{ datacenter_name }}'
        cluster_name: '{{ cluster_name }}'
      delegate_to: localhost

In this example:

  • Variables such as vcenter_hostname, vcenter_username, vcenter_password, datacenter_name, and cluster_name are assumed to be defined elsewhere (in an inventory file or as extra variables).
  • The playbook runs on localhost since the vCenter connection is made from the local machine, not a managed node.

Ashutosh Dixit

I am currently working as a Senior Technical Support Engineer with VMware Premier Services for Telco. Before this, I worked as a Technical Lead with Microsoft Enterprise Platform Support for Production and Premier Support. I am an expert in High-Availability, Deployments, and VMware Core technology along with Tanzu and Horizon.

Leave a Reply