Depends on what your workplace is doing.

The biggest rule about ansible is "don't overthink it".

Having one role per application (like "appserver" or "dbserver") is often
sufficient.

Galaxy.ansible.com can contain some good starting points.



On Sat, Oct 25, 2014 at 5:57 AM, Branko Majic <[email protected]> wrote:

> Hello all,
>
> I am still quite new to Ansible (but coming from Puppet background, so
> my perspective might be a bit skewed to top it off), and I am currently
> trying to figure out what would be the best way to layout roles while
> attempting to apply DRY (don't repeat yourself) principles as much as
> possible. Plus, I'm trying to have somewhat complex deployment with
> providing as little input as possible (kind of convention over
> configuration).
>
> My current goal is to deploy one or more Django projects on a single
> host/group of hosts. Currently I have the following roles:
>
> - common - Sets-up some basic things on the OS, amongst
>   other things the OS users and groups. Users and groups are read from
>   two list variables.
>
> - virtualenv - Sets-up Python virtual environments. Virtual
>   environments are read from a single list variable that includes info
>   about mode for files/dirs, users that should own the virtual
>   environment, destination directory etc.
>
> - supervisor - Sets-up supervisor for running (in this case) one or
>   more WSGI applications. List of supervisor configurations (apps to
>   monitor) is passed via list, with each item containing info about
>   what user should run the command, command itself etc.
>
> Now, the above should be mostly enough to deploy all the things
> necessary for a project (bits and pieces missing, but I'm sure I can
> handle those). From here, though, I am finding some issues on how to
> properly encapsulate this.
>
> For start, I do have an idea of a convention I want to apply for my
> deployments. This includes specific user/group naming based on a
> project name, destination directory for virtualenv etc. What I'm looking
> into would be being able to pass in only a couple of values via
> variables (let's say name, user and group) to my high-level role (or
> perhaps playbook), and calculate the non-specified parameters (required
> by roles common, virtualenv, and supervisor) from those. I would also
> want to deploy multiple Django projects (this is the important part) on
> the same host/group.
>
> From my (perhaps naive) understanding, I have the following options:
>
> 1. Try to create a new role, called django, which would basically
> iterate over a list of projects. The problem is that I need to pass in
> some relatively complex (with calculations included) structures to
> roles common, virtualenv, and supervisor, and variable manipulation is a
> bit limited within the yml files. I think I would probably be able to
> use include directive in combination with a custom lookup plugin. I
> have tried using set_fact with with_items to try to append to lists, but
> that didn't work for me (only the last item from with_items got
> appended).
>
> 2. Ditch the effort for DRY and separation, and simply have one
> monolithic django role that'll deploy user/group, virtualenv,
> supervisor etc. Still, there might be some rather similar set-ups where
> I'd end-up duplicating all of the tasks and logic.
>
> 3. Instead of deploying through a single site.yml, use
> deployment-specific (one-timish) playbook. I would, however, need to
> somehow keep track of what Django project gets deployed where. What
> would be the best way to do this with Ansible?
>
> 4. Something else someone suggests from this list :)
>
> Any recommendations on what would be the best way to proceed with this?
> I'm open to all suggestions. If someone has a good link to share, which
> demonstrates solution for such a deployment, that'd be appreciated as
> well :)
>
> Best regards
>
> --
> Branko Majic
> Jabber: [email protected]
> Please use only Free formats when sending attachments to me.
>
> Бранко Мајић
> Џабер: [email protected]
> Молим вас да додатке шаљете искључиво у слободним форматима.
>

-- 
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/CA%2BnsWgw%2BPYrEqsTR%2Bx6UOwtJSY1ChfxULifmkmWmQAyrpbHg%2Bg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to