Discussion:
[ansible-project] Reset vars between plays on same host
Nick Tkach
2015-07-14 20:23:41 UTC
Permalink
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
--
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-project+***@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/fb7f72cc-5e29-4164-8bfd-121f49aabaeb%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Loading...