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.
