On 05/07/2014 11:35 PM, Strahinja Kustudić wrote:
> I have been using Ansible for a few months now and it has been a
> blast. I think I got the hang of how Ansible works pretty good, but
> I'm still not sure about what is the best way to reuse roles.
>
> Let's take the "nginx" role as an example. We have Nginx installed on
> a lot of servers, but besides the common steps of installing nginx,
> the configuration files are a lot different (some servers only have
> http, some have SSL as well, so they need certificates, different
> virtual hosts, etc).
>
> What I did is created a variable called *nginx_server_type*, which you
> set to a server name, or group name (which shares the same
> configuration files) and then use it like this:
>
> |
> - name: Copy /etc/nginx/nginx.conf
>   template: src={{ nginx_server_type }}/etc/nginx/nginx.conf.j2
>             dest=/etc/nginx/nginx.conf
>             mode=0644
>             owner=root
>             group=root
>   notify: reload nginx
>
> - name: Copy /etc/nginx/
>   copy: src={{ nginx_server_type }}/etc/nginx/
>         dest=/etc/nginx/
>   notify: reload nginx
>
> |
>
> Then you need to create directories inside *templates *and *files
> *which are called {{ nginx_server_type }} and put the configuration
> files in them. So basically every time I need a new server, I modify a
> role by adding template and configuration files for that server.
>
> This problem basically comes up for any role which is not the same for
> all servers. Is there a better way to deal with this? How do you do it?
> -- 
> 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+unsubscr...@googlegroups.com
> <mailto:ansible-project+unsubscr...@googlegroups.com>.
> To post to this group, send email to ansible-project@googlegroups.com
> <mailto:ansible-project@googlegroups.com>.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/228baad4-9076-4109-ab4c-9d43f75e860d%40googlegroups.com
> <https://groups.google.com/d/msgid/ansible-project/228baad4-9076-4109-ab4c-9d43f75e860d%40googlegroups.com?utm_medium=email&utm_source=footer>.
> For more options, visit https://groups.google.com/d/optout.

What you want is very common. I think the most elegant way to handle
this is to add a new keyword in the role dependency statement that would
allow to override templates and files on a "common" role by another role
that depends on it. So, in your case you could create an "nginx_common"
role as well as several "nginx_sometype" roles that would depend on
"nginx_common" role and provide any templates/files to override the ones
in the "nginx_common" role. That way you do not have to "pollute" your
"nginx_common" role directory with templates/files that are not actually
"common" or conflict with each other. Instead, you keep separate
"nginx_sometype" roles and each one of them can provide its own set of
templates/files that will override the ones in "nginx_common" role "on
the fly".

Look at the following thread, for a proposal and discussion around this:
https://groups.google.com/forum/#!searchin/ansible-project/override/ansible-project/9xRyYIOdSro/KustjP725kQJ

If you find my proposal interesting, it would probably be more
appropriate to make any comments at the other thread to keep relevant
discussion at one place.

-- 
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+unsubscr...@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/536C782C.2050504%40yahoo.gr.
For more options, visit https://groups.google.com/d/optout.

Reply via email to