This is a small post about how to use inventory plugins in Ansible. If you are looking the script way I recommend to read this article: http://gloriasilveira.com/setting-up-ansible-for-aws-with-dynamic-inventory-ec2.html
It explains really good this or you can watch this video: https://www.youtube.com/watch?v=LnbqO1kTPqE&t=6s
But if you’re looking to use inventory this article can help you.
First of all, why should I used inventory if all over the internet they’re using the python scripts?
Well, Ansible recommends it:
Inventory plugins take advantage of the most recent updates to Ansible’s core code. We recommend plugins over scripts for dynamic inventory. You can write your own plugin to connect to additional dynamic inventory sources. https://docs.ansible.com/ansible/latest/user_guide/intro_dynamic_inventory.htmlThe actual ansible guide is quite good, but there was a step that got me confused, probably my english isn’t so good and I didn’t understood it.
We need to enable the plugin. So we have 2 ways of doing this, we could edit the
ansible.cfgfile located in
/etc/ansible/ansible.cfgor in your local folder where you’re working.
According to ansible, you need to enable the plugin, like the following code, but I was killing myself and couldn’t make it work, so what’s the correct way of doing it?
The way it works for me
[inventory] enable_plugins = host_list, script, auto, yaml, ini, toml
I’m working with aws dynamic inventory. So according to the documentation the file name has to end in
So I need to add the
aws_ec2to the enable plugins.
After that, following the documentation is quite easy
[inventory] enable_plugins = aws_ec2, host_list, yaml, ini, script
File name: demo.aws_ec2.yml
If you need to run it
# Minimal example using environment vars or instance role credentials # Fetch all hosts in us-east-1, the hostname is the public DNS if it exists, otherwise the private IP address plugin: aws_ec2 regions: - us-east-1
ansible-inventory -i demo.aws_ec2.yml --graph
If you need to use it on a playbook, sending of parameter a private key
ansible-playbook -i demo.aws_ec2.yml playbook.yaml --private-key KEY