Question about organizing roles and playbooks

46 views
Skip to first unread message

thok...@gmail.com

unread,
Oct 26, 2016, 11:28:45 AM10/26/16
to Ansible Project
Hello, 
How to best model the following scenario:

I have a set of hosts in one playbook.

[qa-machines]
HostA
HostB
HostC

I have a subset of these hosts that should receive additional roles.

[jenkins-slaves]
HostC

I have a Vagrantfile that I would like to use to set up one host of each category.

Including first playbook from the second one does not work, because I cannot parameterize the hosts when including a playbook.

What I would like to achieve is, when the "setup-qa-machine" playbook is changed, it does not require to change in the "setup-jenkins-slave" playbook, which would be the case if I repeated the common roles.

it feels a bit like I was not seeing the obvious right now, so any help is appreciated. Thanks!

rup

unread,
Oct 26, 2016, 1:21:02 PM10/26/16
to Ansible Project
We implemented this by having host files specific to an environment, so for example, a QA host file, a Prod host file, a Dev host file, etc.  Then the groupings within the host file would be based off what they were used for, for example:

[wildfly_servers]
HostA
HostB

[activemq_servers]
HostB

[db_servers]
HostA

[akka_servers]
HostB

[php_servers]
HostA

[php_innovations_servers]
HostA

Then when calling the playbook, we just pull in the appropriate host file for the environment we want to have updated.  Is this what you were talking about?

Dan Rough

unread,
Oct 26, 2016, 4:46:48 PM10/26/16
to Ansible Project
If I understand your question correctly, then why not just have two playbooks? We have an infrastructure.yml playbook which provisions a server for us. We also have another playbook which makes alterations to that server dependent on its role. For example, in our case when we provision a Jenkins server, I run the infrastructure.yml playbook which targets all servers (qa-machines in your case) in its host specification (remember that you can use ansible's limit attribute to narrow the scope of the playbook from the command line) and then I run jenkins.yml afterwards which targets just the jenkins server (jenkins-slaves in your example).

thok...@gmail.com

unread,
Oct 27, 2016, 5:54:27 AM10/27/16
to Ansible Project


Am Mittwoch, 26. Oktober 2016 19:21:02 UTC+2 schrieb rup:
We implemented this by having host files specific to an environment, so for example, a QA host file, a Prod host file, a Dev host file, etc.  Then the groupings within the host file would be based off what they were used for, for example:

...

Then when calling the playbook, we just pull in the appropriate host file for the environment we want to have updated.  Is this what you were talking about?

Not exactly, however I realize that by "double-assigning" hosts in my inventory I have kind of solved my problem already. The issue is that my "second" hosts file / inventory is currently generated by Vagrant, so I need to create the appropriate groups there, also.
Like i suspected the problem lies more with my use of Vagrant, rather than Ansible.

Thanks for your comment!

thok...@gmail.com

unread,
Oct 27, 2016, 5:57:55 AM10/27/16
to Ansible Project


Am Mittwoch, 26. Oktober 2016 22:46:48 UTC+2 schrieb Dan Rough:
If I understand your question correctly, then why not just have two playbooks? We have an infrastructure.yml playbook which provisions a server for us. We also have another playbook which makes alterations to that server dependent on its role. For example, in our case when we provision a Jenkins server, I run the infrastructure.yml playbook which targets all servers (qa-machines in your case) in its host specification (remember that you can use ansible's limit attribute to narrow the scope of the playbook from the command line) and then I run jenkins.yml afterwards which targets just the jenkins server (jenkins-slaves in your example).

This is exactly what I am doing, except I need this to happen also when using Vagrant by assigning groups properly when I have the inventory generated by it (see above comment).
I am still deliberating if I should maintain the second inventory directly, or have it generated...
Thanks for your help, much appreciated!
Reply all
Reply to author
Forward
0 new messages