I've started learning and using ansible for configuring my staging and production servers. One thing I'd like to do is configure /etc/hosts through the inventory file.
It seems that this is possible. Here is one such usage:
https://gist.github.com/rothgar/8793800
However, I'm a little green to Ansible and I don't get it. Can someone please explain in plain english how I make it work in practice?
For example, if my inventory file contains.
[compute]
1.2.3.4
5.6.7.8
[db]
2.3.4.5
6.7.8.9
10.11.12.13
[all]
compute
db
[all:vars]
...
I'd like to say with consistency that my hosts file after running the playbook contained
2.3.4.5 db1
6.7.8.9 db2
10.11.12.13 db3
1.2.3.4 compute1
5.6.7.8 compute2
Is this possible?
Best Answer
You could generate your hosts entries from a template. Loop over the list of groups, discard groups like
all
andungrouped
, and then loop over the list of hosts in each group:The above is using
{{host}}
for the ip address, because this lets me tested it out on my system, but you would probably prefer{{hostvars[host]['ansible_default_ipv4']['address']}}
in a real environment, unless you are positive you are always using ip addresses in your inventory.