access inventory file name

4,863 views
Skip to first unread message

Drew Gulino

unread,
May 5, 2014, 5:26:57 PM5/5/14
to ansible...@googlegroups.com
As suggested in the best practices doc, have two inventory files: qa and production

I call these using the -i parameter:

ansible-playbook -i qa ...

Is there a way I can determine in my playbook which inventory I am using?  The use case is I want to notify one chat room if using qa inventory, another if I use production.


I've tried just putting a variable in the root of the inventory file qa:

inventory=qa
[webservers]
host1

but that doesn't work: is not displayed as a variable with: "ansible host1 -m setup -i qa"

I can define a variable for each host like:

[webservers]
host1 inventory=qa

but that is terribly redundant.

James Cammarata

unread,
May 5, 2014, 8:45:57 PM5/5/14
to ansible...@googlegroups.com
The name of the current inventory file in use is stored in the "inventory_file" variable name, so you could check that. Beyond that, there are two other options:

1. Use --extra-vars to specify the target environment, for example: --extra-vars="inventory=qa"
2. The group_vars location is based on the location of the inventory file, so you could do something like this:

qa/group_vars/all:
inventory=qa

prod/group_vars/all:
inventory=production

The qa/hosts and prod/hosts would contain your different inventories, so you'll get output like this:

$ cat play.yml 
- hosts: all
  gather_facts: no
  tasks:
  - name: show the variable
    debug: var=inventory

$ ansible-playbook play.yml -i prod/hosts 

PLAY [all] ******************************************************************** 

TASK: [show the variable] ***************************************************** 
ok: [you] => {
    "inventory": "production"
}

PLAY RECAP ******************************************************************** 
you                        : ok=1    changed=0    unreachable=0    failed=0   

$ ansible-playbook play.yml -i qa/hosts 

PLAY [all] ******************************************************************** 

TASK: [show the variable] ***************************************************** 
ok: [me] => {
    "inventory": "qa"
}

PLAY RECAP ******************************************************************** 
me                         : ok=1    changed=0    unreachable=0    failed=0   


Hope that helps.



--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/e5606bef-1a43-40a1-b34a-42c0866cd9ce%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Mridusmita Talukdar

unread,
May 12, 2014, 3:27:30 PM5/12/14
to ansible...@googlegroups.com
Hi,
We have multiple clusters. Each of the clusters need to have a different var file (cluster specific variables)
Currently the variable file name is same as the cluster name, so that when the extra-variable says cluster=ABC, my playbook picks up the variable file ABC.yml which I refer to in the playbook by {{cluster}}.yml.
This has a risk because the user while running the playbook might give the inventory file name of cluster XYZ and give cluster=ABC.
In order to avoid this risk, I want to pick up my variable file as {{inventory_file}}.yml
But looks like the variable file is referred to, before the variable inventory_file is loaded?
Because even though {{inventory_file}}.yml is picked up correctly under tasks(I printed it our using debug:) the variable file is not being picked up.
Am I missing something here?
Thanks and regards,
Mridu

Michael DeHaan

unread,
May 13, 2014, 11:38:06 AM5/13/14
to ansible...@googlegroups.com
"But looks like the variable file is referred to, before the variable inventory_file is loaded?"

I'm not sure what this means, can you elaborate?

Thanks!



Reply all
Reply to author
Forward
0 new messages