Some replies inline!

On Mon, Feb 23, 2015 at 1:41 PM, <[email protected]> wrote:

> From Ansible doc
> <http://docs.ansible.com/playbooks_roles.html#introduction>:
>
> Roles in Ansible build on the idea of include files and combine them to *form
>> clean, reusable abstractions*
>
>
> I really want to love roles and use them extensively in our system, but so
> far I'm getting a heap of frustration instead. I am trying to position
> Ansible at work as the preferred automation platform to manage a complex
> system with several internally developed apps, plus db, web server, and
> more. (together this is one product/system) Multiple environments too, as
> usual.
>
> I'd think it makes sense to have roles like:
> - appX (for X in 1 through N)
> - web
> - db
> - etc (more.. skipped)
>
>
That's usually the case for simple stuff, but for each app or component of
the system, I usually end up with multiple roles. Maybe a role, a role to
configure, a role to restart. When you start wanting to call individual
parts of a single role separately, that's a good sign that you need to
break that role up into multiple parts. For organizational purposes, you
can definitely do:

roles/web/setup/*
roles/web/install/*
roles/web/config/*
roles/web/restart/*


> One seemingly basic thing I need to do is to restart this entire system
> occasionally. I would like to use Ansible to do that. Here's a simplified
> pseudo-code recipe of a playbook:
> - web.startMaintenance()
> - app1.stop()
> - app2.stop()
> - app2.start()
> - app1.start()
> - web.endMaintenance()
>
> *I want to run a single playbook command to do this.* That seems clearly
> possible with include files but not possible with roles. The following
> doesn't work:
>
> ansible-playbook --tags
> "app1.stop,app1.start,app2.start,app2.stop,web.startMaintenance,web.endMaintenance"
> playbooks/testRoleDeps.yml
>
> It seems like a single playbook for all of these different configurations
might not be realistic. Why not have multiple playbooks, one per general
operation, and call the roles as needed?


> That doesn't work because all plays in the playbook are filtered by the
> tags provided, and each play needs to have a particular tag applied (first
> stop *then* start later), not all of them.
>
> My conclusion? *As of 1.8.4, roles are inadequate for complex playbooks
> and include files need to be used instead.*
>
> Roles are pretty simple--for more complex purposes, you may want to mix in
playbook includes too. That's fine! I wouldn't get too hung up on getting
all of the behavior for a certain part of your app in a single role. That's
going to be confusing and complicated to use.

That's unfortunate for code reuse reasons, etc. I would love to hear that
> this is not the case and I have overlooked something. Maybe a feature to
> resolve this is in the release plan?
>
> I can't figure out how to do this even after reading the documentation
> repeatedly, reading the ansible O'Reilly book (pre-release copy), the code
> in ansible-examples, and various other resources.
>
> I'm not sure if I understand any specific requests for improvement
here--besides being able to use a single playbook to drive multiple
operations, which is not really Ansible-style. If I've misunderstood, feel
free to let me know! :)

-Tim

-- 
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/CAH4wdVWc73Hc9x19AmiZ2CbZNJZPW2FyKv%3D7g-w88qnQtQNeQQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to