Hello, first of all thank you very much for Ansible.
I'm setting up the deployment of a complex system and splitting it across
roles. I haven't found yet a satisfactory way of sharing variables across
the roles. A simple example: set the database port in the db role and use
it in the web role. I'm expecting to be able do do something along this
line:
roles/
db/
defaults/main.yml
db_port: 5432
web/
templates/
web.conf.j2
[database]
port: {{ db_port }}
The above wants to represent the fact that the default port for the
database is 5432; this may be overridden by a group_vars file for specific
installation having the db on a non-standard port. Currently it doesn't
work because the db_port variable is not known by the web role. How to work
around that?
1. put all the shared variables in group_vars/all. It works but it breaks
the encapsulation of the roles: without a certain unknown set of variables
defined at least in "all" the db cannot be configured.
2. add the db role as a dependency of web: this makes it execute the entire
db tasks list, which is not what hoped.
3. add "include_vars: ../../db/defaults/main.yml" to the web's tasks. This
gives a higher preference to the default variable and overriding it in
group_vars (or in the inventory) doesn't work anymore.
As it is now I'm stuck with 1, which is also what I've generally found in
the examples. Is there anything better? It seems a relatively
straightforward use case to me:
1. a provider role defines a variable and provides a default for it;
2. a consumer role uses the variable provided;
3. a group or inventory variable can override the default.
Thank you very much,
-- Daniele
--
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 [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/7762fbc1-5491-4f77-8db3-0581af9bbf1e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.