Breaking up hosts file

I currently have been putting both hosts and host related variables into the /etc/ansible/hosts file with variables such as this:

[myhosts]
host1
host2

[host1]
host1.domain

[host1:vars]
var1=“Some data”
var2=“Some other data”
tag1=myTag

[host2]
host2.domain

[host2:vars]

etc. This all works but is not overly scalable as the number of servers grows.

How can I break this up into a more directory based structure so that things can scale better with many servers. I’ve tried to read through information on host_vars and group_vars but have not succeeded in getting the syntax set up properly to mimic what I have working with the hosts file.

Can someone help me figure out directory structure, naming, and setup to get that working?

Thanks!

Create /etc/ansible/host_vars and /etc/ansible/group_vars

Create group vars files like
/etc/ansible/group_vars/myhosts.yml

and enter variables for your ‘myhosts’ group in the myhosts.yml file. Remember that these are YAML files, so vars need to be in the form

key: value

NOT

key=value

Hope this helps,
Jon

You can create group_vars directory

http://docs.ansible.com/ansible/intro_inventory.html#group-variables

I’m still missing the syntax and file naming for this.

First off, can I create multiple files in group_vars and have them all read? If so, what are the best naming conventions. Can I have names:

host1.yml
host2.yml

etc. with a separate file for each host?

And, if so, what does the content of the file look like? I’ve tried this in my host1.yml file:

[host1]
host.domain

[host1:vars]
tag: myTag

but that does not work. What combination will actually work right?

for host related stuff you can put in host_vars

check this out https://github.com/ac427/my_cm/tree/master/ansible for reference to host_vars and group_vars

I’m afraid I’m still a YAML newbie and that syntax still has me baffled.

I see the files in your hosts_var directory, but your variables are not simply:

label: var_value

There seem to be a couple of extra layers and I don’t follow why they are there. Why this:

interfaces:
auto:
ip: ip_number

Why the multiple layering?

And then how are these found for use by the playbook? When I try something similar, ansible complains that I don’t have an inventory file.

Sorry to be obtuse!

Every system can have multiple interfaces ( so, multiple mac,ip address etc ) . That is the reason

I have values of mac,ip, etc in the host_vars referenced in below playbook.
https://github.com/ac427/my_cm/blob/master/ansible/playbooks/add_node

Perhaps I’m inching closer. Can I pick up the target from somewhere else? Or have target in the hosts file in some way that ansible will know to use it instead of having to add it to the command line?

Thanks!