There is a really nice Ansible-based deployer already available, that uses Terraform, here. However, I wanted to use pure Ansible, so I, as usual, made more work for myself.
I started going through the Ansible/vSphere configuration document, here. I quickly discovered that the instructions, while complete, didn't seem to work on Fedora 30 or 31. The issue turned out to be that the built-in Ansible didn't find the vSphere automation SDK, even when built into an activated virtualenv.
To work around this, I installed Ansible, itself, in the virtualenv. So the completed steps to a working Ansible/vSphere integration are:
Once that is complete, you can use the vSphere dynamic inventory plugin, by doing the following:
$ virtualenv ansible
$ source ansible/bin/activate
$ pip install ansible
$ git clone https://github.com/vmware/vsphere-automation-sdk-python.git
$ cd vsphere-automation-sdk-python/
$ pip install --upgrade --force-reinstall -r requirements.txt --extra-index-url file:///~/vsphere-automation-sdk-python/lib
$ cat << EOF > ansible.cfg
[inventory]
enable_plugins = vmware_vm_inventory
EOF
$ cat << EOF > inventory.vmware.yml
plugin: vmware_vm_inventory
strict: False
hostname: vcenter
username: <vCenter admin user>
password: <vCenter admin password>
validate_certs: False
with_tags: True
Then, you can run an inventory query against your vCenter server:
$ ansible-inventory -i inventory.vmware.yml --list
{
"_meta": {
"hostvars": {
"Fedora 31 (64-bit)_420ce9bb-dce1-05c6-33f5-6f2072436499": {
"ansible_host": "10.0.1.66",
"config.cpuHotAddEnabled": false,
"config.cpuHotRemoveEnabled": false,
"config.hardware.numCPU": 1,
"config.instanceUuid": "500c0fdc-f1a7-1d79-d0a3-642e8e26642c",
"config.name": "Fedora 31 (64-bit)",
"config.template": false,
"guest.guestId": "fedora64Guest",
"guest.guestState": "running",
"guest.hostName": "fedora31.jajcs.loc",
"guest.ipAddress": "10.0.1.66",
"name": "Fedora 31 (64-bit)",
"runtime.maxMemoryUsage": 2048
},
"VMware vCenter Server Appliance_564d4d0f-52f6-5d7d-bfc1-6641b464586b": {
"ansible_host": "10.0.1.15",
"config.cpuHotAddEnabled": true,
"config.cpuHotRemoveEnabled": true,
"config.hardware.numCPU": 4,
"config.instanceUuid": "524f8660-11e1-df20-ab50-049c484fa387",
"config.name": "VMware vCenter Server Appliance",
"config.template": false,
"guest.guestId": "vmwarePhoton64Guest",
"guest.guestState": "running",
"guest.hostName": "vcenter.jajcs.loc",
"guest.ipAddress": "10.0.1.15",
"name": "VMware vCenter Server Appliance",
"runtime.maxMemoryUsage": 16384
}
}
},
"all": {
"children": [
"fedora64Guest",
"other3xLinux64Guest",
"poweredOn",
"ungrouped"
]
},
"fedora64Guest": {
"hosts": [
"Fedora 31 (64-bit)_420ce9bb-dce1-05c6-33f5-6f2072436499",
]
},
"other3xLinux64Guest": {
"hosts": [
"VMware vCenter Server Appliance_564d4d0f-52f6-5d7d-bfc1-6641b464586b"
]
},
"poweredOn": {
"hosts": [
"Fedora 31 (64-bit)_420ce9bb-dce1-05c6-33f5-6f2072436499",
"VMware vCenter Server Appliance_564d4d0f-52f6-5d7d-bfc1-6641b464586b",
]
},
}
Good luck!