Skip to main content

Raymii.org Raymii.org Logo

Quis custodiet ipsos custodes?
Home | About | All pages | Cluster Status | RSS Feed

Ansible Inventory from VMWare

Published: 06-01-2014 | Author: Remy van Elst | Text only version of this article


❗ This post is over ten years old. It may no longer be up to date. Opinions may have changed.

Table of Contents


This is a simple script which lets you use VMWare vCenter as a dynamic inventory for Ansible.

Github repository
Official Website

Recently I removed all Google Ads from this site due to their invasive tracking, as well as Google Analytics. Please, if you found this content useful, consider a small donation using any of the options below:

I'm developing an open source monitoring app called Leaf Node Monitoring, for windows, linux & android. Go check it out!

Consider sponsoring me on Github. It means the world to me if you show your appreciation and you'll help pay the server costs.

You can also sponsor me by getting a Digital Ocean VPS. With this referral link you'll get $200 credit for 60 days. Spend $25 after your credit expires and I'll get $25!

Installation

Install PySphere:

pip install -U pysphere

Edit the script's login data and VCenter server FQDN:

server_fqdn = "vcenter.example.org"
server_username = "jdoe"
server_password = "secure_passw0rd"

Test it:

Get all powered on VM's:

python2 query.py --list

Output:

{
    "no_group": {
        "hosts": [
            "vm0031",
            "vm0032",
            [...]
            "vm0999"
        ]
    },
    "local": [
        "127.0.0.1"
    ]
}

Get one VM:

python2 query.py --host vm0032

Output:

{
    "admin": "sysadmin@example.org",
    "source_database": "VMWare"
}

Nonexistent VM:

python2 query.py --host nonexist

Output:

[Error]: [Object Not Found]: Could not find a VM named 'notexist'

Do a simple ansible ping:

ANSIBLE_HOSTS="/home/remy/git/vmware-ansible/query.py" ansible all -m ping

Result:

vm0032 | success >> {
    "changed": false,
    "ping": "pong"
}

vm0034 | success >> {
    "changed": false,
    "ping": "pong"
}

Usage

Either export the ANSIBLE_HOSTS variable to always use the VMWare inventory:

export ANSIBLE_HOSTS="/home/remy/git/vmware-ansible/query.py"

Or preface each ansible command:

ANSIBLE_HOSTS="/home/remy/git/vmware-ansible/query.py" ansible all -m apt -a "upgrade=safe"

Notes

Tested with both vCenter 5.1 and 5.5, Python 2.

Does not support grouping by datacenter or resource group

Thanks to JP Mens's article for the inspiration.

Tags: ansible , deployment , devops , python , software , vmware