Reset vars between plays on same host

31 views
Skip to first unread message

Nick Tkach

unread,
Jul 14, 2015, 4:24:25 PM7/14/15
to ansible...@googlegroups.com
Is there a way to somehow "reset" variables in-between plays?  What I'm trying to do is make a playbook that creates my standard tomcat instance layout.

So given the setup below, as I understand it you'd have "app" files group_vars where you could set whatever things specific to that app instance like port.  Then you'd have in the roles/tomcat-7/defaults/main.yml some default values for everything with the idea you'd set what you actually care about in the top level group_vars/app1.yml and app2.yml such as port number for that specific app.  Then you use an inventory file for a given environment (such as dev.hosts) to "hook" together a given app with a given group of host(s).  Then you call ansible-playbook passing in the inventory file you care about right now (such as dev.hosts), the top level playbook (such as tomcat7servers.yml),  Then Ansible would iterate through the playbook ( tomcat7servers.yml in this case), taking the group_vars/myapp1 and run the tomcat-7 role on the myapp1 group of hosts.  Then the same for myapp2.

That much seems like it works, but the problem I get is that there doesn't seem to be a way to say ok, this time around I don't want to do both myapp1 and myapp2.  I want to limit to just myapp2.  I've tried doing something like

ansible-playbook -i dev.hosts tomcat7servers.yml --limit=myapp2

but it picks up both.  Not only that but unless I re-define values from the myapp1 "run" it keeps the values from myapp1 when it hits myapp2.  This usually suggests I'm not "getting" something about how Ansible models things.  What am I "missing" about this picture?  I want to be able to run something like I gave above there and have a tomcat 7 on appsvr1.internal created that has totally default except for the values explicitly set in group_vars/myapp1 and another tomcat 7 on that same box that has totally default values except for what's explcitly set in group_vars/myapp2.

/usr/local/apache-tomcat-7.0.51   (where this is just a totally plain tar xzf of a tarball off Apache's site extracted as root so it's *NOT* writable)

Then the tomcat instances (owned by app user such as tcadm):
/appl/app1/
then under that
/bin
/conf/
/webapps
and so on


/appl/appt2/
same setup as app1 here, but different ports, different instance name


So, trying to extrapolate from Ansible best practices in the documentation the local "repo" is something like this

roles/tomcat-7/defaults/main.yml (where you'd set things you don't normally care about overriding like maxAjpThreads but you *could* override what's in the group_vars top level)
roles/tomcat-7/tasks
roles/tomcat-7/templates
and so on

group_vars/ (where you'd have yml files with the values for a given app-such as myapp1.yml, myapp2.yml)
(example myapp1.yml)
ajpPort: 8109
httpPort
: 8180
instanceName
: myapp1
(example myapp2.yml)
ajpPort: 8209
httpPort
: 8280
instanceName
: myapp2



dev.hosts (which would match up group_names (such as myapp1 and myapp2) to actual hosts in dev environment)
(example dev.hosts)
[myapp1]
appsvr1
.dev

[myapp2]
appsvr1
.dev

tomcat7servers.yml ("matching" groups for the inventory to actual roles)
- hosts: myapp1
  become_user
: tomcat
  roles
:
 
- tomcat-7
  tasks
:
 
- include_vars: group_vars/myapp1.yml

- host: myapp2
  become_user
: tomcat
  roles
:
 
- tomcat-7
  tasks
:
 
- include_vars: group_vars/myapp2.yml



Reply all
Reply to author
Forward
0 new messages