Introduction
VMware tags organize vSphere resources — datastores, VMs, hosts, networks — into categories for management, policy enforcement, and reporting. Using Ansible's community.vmware collection, you can programmatically retrieve datastore information including tags, capacity, and usage across your entire vSphere environment.
Prerequisites
Install the VMware Collection
ansible-galaxy collection install community.vmware
Python Dependencies
pip install PyVmomi vSphere-Automation-SDK
vCenter Credentials
Store credentials securely with Ansible Vault:
ansible-vault create group_vars/vcenter/vault.yml
# group_vars/vcenter/vault.yml
vault_vcenter_hostname: vcenter.example.com
vault_vcenter_username: administrator@vsphere.local
vault_vcenter_password: YourSecurePassword
Basic: List Datastore Tags
---
- name: List VMware Datastore Tags
hosts: localhost
gather_facts: false
vars:
vcenter_hostname: "{{ vault_vcenter_hostname }}"
vcenter_username: "{{ vault_vcenter_username }}"
vcenter_password: "{{ vault_vcenter_password }}"
tasks:
- name: Gather datastore information
community.vmware.vmware_datastore_info:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
validate_certs: false
register: datastore_info
- name: Display all datastores with tags
ansible.builtin.debug:
msg: |
Datastore: {{ item.name }}
Tags: {{ item.tags | default([]) | map(attribute='name') | join(', ') }}
Capacity: {{ (item.capacity / 1073741824) | round(1) }} GB
Free: {{ (item.freeSpace / 1073741824) | round(1) }} GB
loop: "{{ datastore_info.datastores }}"
loop_control:
label: "{{ item.name }}"
Filter by Datacenter or Cluster
- name: Get datastores from specific datacenter
community.vmware.vmware_datastore_info:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
datacenter: "DC-Production"
validate_certs: false
register: dc_datastores
- name: Get datastores from specific cluster
community.vmware.vmware_datastore_info:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
cluster: "Cluster-01"
validate_certs: false
register: cluster_datastores
Filter Datastores by Tag
- name: Find datastores with specific tag
ansible.builtin.set_fact:
production_datastores: >-
{{ datastore_info.datastores |
selectattr('tags', 'defined') |
selectattr('tags', 'search', 'production') |
list }}
- name: Show production datastores
ansible.builtin.debug:
msg: "{{ item.name }} — {{ (item.freeSpace / 1073741824) | round(1) }} GB free"
loop: "{{ production_datastores }}"
loop_control:
label: "{{ item.name }}"
Capacity Report
- name: Generate datastore capacity report
hosts: localhost
gather_facts: true
tasks:
- name: Gather datastore info
community.vmware.vmware_datastore_info:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
validate_certs: false
register: datastore_info
- name: Create CSV report
ansible.builtin.copy:
dest: "/tmp/datastore_report_{{ ansible_date_time.date }}.csv"
content: |
Name,Capacity_GB,Free_GB,Used_Percent,Tags
{% for ds in datastore_info.datastores %}
{{ ds.name }},{{ (ds.capacity / 1073741824) | round(1) }},{{ (ds.freeSpace / 1073741824) | round(1) }},{{ (((ds.capacity - ds.freeSpace) / ds.capacity) * 100) | round(1) }},{{ ds.tags | default([]) | map(attribute='name') | join(';') }}
{% endfor %}
- name: Alert on low-space datastores
ansible.builtin.debug:
msg: "⚠️ {{ item.name }} is {{ (((item.capacity - item.freeSpace) / item.capacity) * 100) | round(1) }}% full!"
loop: "{{ datastore_info.datastores }}"
loop_control:
label: "{{ item.name }}"
when: ((item.capacity - item.freeSpace) / item.capacity) > 0.85
Manage Tags with Ansible
List All Tag Categories
- name: Get tag categories
community.vmware.vmware_category_info:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
validate_certs: false
register: tag_categories
- name: Show categories
ansible.builtin.debug:
var: tag_categories.tag_category_info
Create and Assign Tags
- name: Create tag category
community.vmware.vmware_category:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
category_name: "StorageTier"
category_description: "Storage tier classification"
category_cardinality: "single"
associable_object_types:
- Datastore
validate_certs: false
- name: Create tag
community.vmware.vmware_tag:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
tag_name: "tier-1-ssd"
tag_description: "Tier 1 SSD storage"
category_id: "StorageTier"
validate_certs: false
- name: Assign tag to datastore
community.vmware.vmware_tag_manager:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
tag_names:
- "StorageTier:tier-1-ssd"
object_name: "datastore-ssd-01"
object_type: Datastore
state: present
validate_certs: false
VMware Module Reference
| Module | Purpose |
|---|---|
vmware_datastore_info | Get datastore details + tags |
vmware_tag | Create/delete tags |
vmware_tag_manager | Assign/remove tags from objects |
vmware_category | Manage tag categories |
vmware_category_info | List tag categories |
vmware_datastore_cluster | Manage datastore clusters |
vmware_host_datastore | Mount/unmount datastores on hosts |
Related Articles
Conclusion
The vmware_datastore_info module retrieves comprehensive datastore details including tags, capacity, and free space from vCenter. Combine it with vmware_tag_manager to assign tags programmatically, and use Jinja2 templates to generate capacity reports. Always store vCenter credentials in Ansible Vault and use validate_certs: true with proper CA certificates in production.