Hello
I am currently deploying a new product and came across some problems to structure my Playbook and roles. I have three different solutions and hope to get some input which path might be the best.
The product is a webapp on a windows server. The following steps are needed to deploy (high level):
install javajdk
install tomcat
install win_service
configure java regkes
configure tomcat
install webapp
start service
I use static inventories for prod and stageing, group_vars, roles (created with ansible-galaxy) so there is some kind of structure …
** Solution 1 **
put everything in one huge playbook. That does not sound well, but has the advantage that you know the variables from prev installations e.g. tomcat needs to know where JAVA_HOME is… that was with the javajdk installation, due to more than one java on the machines there is no global JAVA_HOME…
** Solution 2 **
break all out in small roles. Sounds great but roles should be independent from each other.I did not found a method to decouple tasks. Would it make sense to have single roles for e.g. install_tomcet, config_tomcat and set up a playbook which has the mentioned roles in sequence? but how does on role know about e.g. a path name which is needed in the next roll. → Installation sets the path, config needs to know… I an really unsure to make roles independend.
** Solution 3 **
Kind of solution 2. Have a main playbook which contains only roles, Split as much as possible to roles. Have independent variable names in ./roles//vars/main.yml Somehow(?) find a place higher in der variable precedence with the playbook where all needed var definitions go. Inernallay either path a variable to the role or simply overrule a rolevariable.
e.b. a product has a service, the service name is generally part of a pathname for tomcat.
the tomcat name should not depend on the service, so there should be a tomcat_install_path in the role but also a service_name with the product
So in case the playbook for the product is called the servcie name should be part of the name,
In case the tomcat_install is called with a total different deployment there should be no fiddling with a service name
I would go with Solution 3 but I have not yet found a way to set that up.
What is the experts opinion, is solution 3 doable, is one of the other once better or is there a solution 4 ??
Thanks a lot
Michael