This repository has been archived on 2022-11-09. You can view files and clone it, but cannot push or open issues or pull requests.
Go to file
Eriks Zelenka ba35cdc297 Add backwards compatability with openvz on Proxmox ver3 2017-03-05 18:51:30 +00:00
playbook-example Added a playbook example 2016-11-23 09:55:00 +01:00
.gitignore Add backwards compatability with openvz on Proxmox ver3 2017-03-05 18:51:30 +00:00
README.md Added examples section, get distribution version example 2016-11-23 15:30:19 +01:00
proxmox.py Add backwards compatability with openvz on Proxmox ver3 2017-03-05 18:51:30 +00:00
setenv.sh.dist Fix typo in URL 2016-11-23 09:50:40 +01:00

README.md

Ansible-Proxmox-inventory

About

Proxmox dynamic inventory for Ansible. Based on original plugin from Mathieu Gauthier-Lafaye

Changelog:

  • Added option to ignore invalid SSL certificate (by @bmillemathias) PR
  • Compatible with a Proxmox cluster (by @xezpeleta)
  • Added group 'running' (by @xezpeleta)

Instructions

Download proxmox.py to /etc/ansible/ directory:

cd /etc/ansible
sudo wget https://github.com/xezpeleta/Ansible-Proxmox-inventory/raw/master/proxmox.py
sudo chmod +x proxmox.py

Let's test it:

python /etc/ansible/proxmox.py \
  --url=https://<your-proxmox-url>:8006/ \
  --username=<proxmox-username> \
  --password=<proxmox-password> \
  --trust-invalid-certs \
  --list --pretty

If you get a list with all the VM in your Proxmox cluster, everything is ok.

I suggest you to use environment variables to store Proxmox credentials:

# You also can do that using the file setenv.sh
# Run the command: "source setenv.sh"
export PROXMOX_URL=https://10.0.0.1:8006/
export PROXMOX_USERNAME=apiuser@pve
export PROXMOX_PASSWORD=apiuser1234
export PROXMOX_INVALID_CERT=False

So now you can check it again without credential parameters:

python /etc/ansible/proxmox.py --list --pretty

Once you get this working, you can include the dynamic inventory in your ansible commands:

# Ping: connect to all VM in Proxmox using root user
ansible -i /etc/ansible/proxmox.py all -m ping -u root

Tricks

If you prefer, you can limit the commands to the group "running":

# Run a playbook in every running VM in Proxmox
ansible-playbook -i /etc/ansible/proxmox.py --limit='running' playbook-example/playbook.yml

Thanks to Matt Harris, you can now use the Notes field in Proxmox to add a host to a group:

Added support for Proxmox VE 4.x Added support for using the Notes field of a VM to define groups and variables: A well-formatted JSON object in the Notes field will be added to the _meta section for that VM. In addition, the "groups" key of this JSON object may be used to specify group membership:

{ "groups": ["utility", "databases"], "a": false, "b": true }

For instance, you can use the following JSON code in a VM host:

{ "groups": ["windows"] }

So if you want to exclude Windows machines, you could do the following:

# Run a playbook in every running Linux machine in Proxmox
ansible-playbook -i /etc/ansible/proxmox.py --limit='running,!windows' playbook-example/playbook.yml

Examples

Show Linux distribution version for every VM in Proxmox cluster:

 ansible all -i /etc/ansible/proxmox.py --limit 'running,!windows' -m setup -u root -a 'filter=ansible_distribution_*'

Check more info about Ansible setup module