Inventory file - different groups with same variables but not the same value

165 views
Skip to first unread message

Sacha Vukovic

unread,
May 21, 2014, 7:28:47 AM5/21/14
to ansible...@googlegroups.com
Hello,

after reading this post :
https://groups.google.com/forum/#!topic/ansible-project/XbVNoUED2cU
http://docs.ansible.com/intro_inventory.html

I have a similar question with inventory file,

I want to provisionning on the same host two tomcat using same role, but http port, path must be different.

Example:

In my inventory file prod.hosts
[tomcat1]
host1

[tomcat2]
host1

[tomcat1:vars]
product_dir='/home/produit/tomcat1'
[tomcat2:vars]
product_dir='/home/produit/tomcat2'

In site.yml
- hosts: tomcat1
  user: root
  pre_tasks:
     - debug: msg={{product_dir}}

- hosts: tomcat2
  user: root
  pre_tasks:
     - debug: msg={{product_dir}}

playbook:

PLAY [tomcat1] ****************************************************************

GATHERING FACTS ***************************************************************
ok: [host1]

TASK: [debug msg={{product_dir}}] *********************************************
ok: [srv-vid-tux48] => {
    "msg": "/data/produits/tomcat1"
}

PLAY [tomcat2] ****************************************************************

GATHERING FACTS ***************************************************************
ok: [srv-vid-tux48]

TASK: [debug msg={{product_dir}}] *********************************************
ok: [srv-vid-tux48] => {
    "msg": "/data/produits/tomcat1"
}


ansible version 1.6.1

Michael DeHaan

unread,
May 21, 2014, 6:13:54 PM5/21/14
to ansible...@googlegroups.com
What's your question?

Thanks.


--
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/2535ea07-fabd-4c5a-94f2-2c2fbc8cfe23%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Sacha Vukovic

unread,
May 22, 2014, 4:21:33 AM5/22/14
to ansible...@googlegroups.com
Hello ,
Sorry I forget to ask you why  the variables in group tomcat1  apply to tomcat2 ? whereas I have two groups with different value of variables for tomcat's path ?

Michael DeHaan

unread,
May 23, 2014, 8:18:40 AM5/23/14
to ansible...@googlegroups.com
"Sorry I forget to ask you why  the variables in group tomcat1  apply to tomcat2 ?"

Because the host is in both groups.

Groups may cover things such as purpose, geographic location, hardware type, what team owns them, and more.

The "hosts:" directive merely selects what hosts are going to be targetted in the given play, and the variables come from all groups, with subgroups being able to override those of their parents (for instance, a north_carolina server may specify time.nc.example.com for NTP while a united_states server might set a default of time.ny.example.com)




Sacha Vukovic

unread,
May 26, 2014, 5:02:33 AM5/26/14
to ansible...@googlegroups.com
Thank you for your answer ,

If I want to use tomcat's role for two instances on same host is better to use group_vars than the inventory file ?

Michael DeHaan

unread,
May 27, 2014, 4:11:14 PM5/27/14
to ansible...@googlegroups.com
"If I want to use tomcat's role for two instances on same host is better to use group_vars than the inventory file ? "

group_vars and inventory variables are the same thing expressed two different ways.

If you want to use the role twice on the same box, this is a different pattern, which are parameterized roles:

Click http://docs.ansible.com/playbooks_roles.html#roles and scroll down and it will talk about parameterized roles.

You can pass different parameters to the same role, applied twice, to the same server or set of servers.





Sacha Vukovic

unread,
Jun 1, 2014, 10:13:12 AM6/1/14
to ansible...@googlegroups.com
Hello 

Thank you for your answers, parameterized roles is a solution,  but it's actually not as simple as that when you have two environments  . After reading your link  I use vars_files for  the distinction made  by environment 

example site.yml:
 - hosts: tomcat1-hosts

  user
: root

  vars_files
:

     
- ['vars/tomcat1_{{ env }}.yml']


  pre_tasks
:

     
- debug: msg={{product_dir }}


  roles
:  

   
- { role: tomcat, tags: tomcat }




- hosts: tomcat2-hosts

  user
: root

  vars_files
:

     
- ['vars/tomcat2_{{ env }}.yml']


  pre_tasks
:

     
- debug: msg={{product_dir }}


  roles
:

   
- { role: tomcat, tags: tomcat }


My invetory file:
[tomcat1-hosts]
tux1


[tomcat2-hosts]
tux1


[all:children]
tomcat1
-hosts
tomcat2
-hosts


[all:vars]
env
='prod'


Playbook:

PLAY [tomcat1-hosts] ********************************************************** 

GATHERING FACTS *************************************************************** 


TASK: [debug msg={{product_dir}}] ********************************************* 

ok: [tux1] => {
    "msg": "/data/produits/tomcat1"                                                                                                                                     
}                                                                                                                                                                       

PLAY [tomcat2-hosts] ********************************************************* 

GATHERING FACTS *************************************************************** 

TASK: [debug msg={{product_dir}}] ********************************************* 

ok: [tux1] => {
    "msg": "/data/produits/tomcat2"                                                                                                                                    


So I can deploy to different environments, the same application with different value for tomcat path, tomcat port. Thanks  ansible for that ;) 

Michael DeHaan

unread,
Jun 1, 2014, 3:07:34 PM6/1/14
to ansible...@googlegroups.com
If you're doing vars_files per environment, I'd highly recommend making the environment a group in inventory.   This way it will automatically be loaded by group_vars without the extra step of the parameterized vars_file.




Reply all
Reply to author
Forward
0 new messages