Hi All,

I'm new to this list and to ansible as well, so I'd like to apologize 
beforehand if the question is malformed or if it should be asked in another 
place.

Any help is greatly appreciated.

We use the following architecture for our in-house built java web 
applications:

                                                    - > Tomcat a on Ubuntu 
server 1
                                                 /
Varnish Cache (http) - > HAProxy 
       ^
       |                                         \
Nginx (https)                                 - > Tomcat a on Ubuntu server 
2

There are over a hundred .war applications distributed over about a dozen 
tomcat instance listening on different ports. The war applications are 
updated frequently. (They are built on another server with Jenkins/Maven). 
There are development, staging, and production environments.

I want to use ansible to perform the following tasks (after some basic 
stuff like adding users, setting up ntp, dns, etc): 
 - add repos to ubuntu, install nginx, varnish, haproxy, tomcat instances
 - add .war applications to tomcat (we actually extract them into 
directories)
 - create each tomcat server.xml with its definitions for port, logging, 
etc, and application resource requirements (datasources, mostly)
 - configure varnish to forward requests to appropriate haproxy frontend 
based on application context name
 - define haproxy frontends and backends
 - deploy newer versions of application .war files without service 
interruption (stop tomcat a on server 1, extract war file, start tomcat a 
on server 1, stop tomcat on server 2...)
 - update software components (nginx, varnish, haproxy, tomcat instances)

We also have deployed other open source software on top of tomcat that 
usually have different requirements, for instance, Nuxeo (nuxeo.com), 
Liferay (liferay.com), and DSpace (dspace.org). So, a reusable tomcat role 
would be great.

We are also responsible for a Plone CMS installation (plone.org) that 
follows the same basic architecture, but zope application servers are 
deployed using buildout.

My intention is to layout our ansible directory like this:

####
development_hosts
staging_hosts
production_hosts
group_vars/ <- store all variables inside this directory tree
   enterpriseappservers/
                          tomcat-a/
                                instance.yml
                                applications.yml <- this contains a list of 
applications with their requirements
                          tomcat-b/
                          ...
   plonewebcontentservers/
   javawebcontentservers/
   digitallibraryservers/
                          plone-sites.yml
   ecmservers/

site.yml <- includes the other playbooks
appservers.yml <- simple playbooks, only include roles, maybe multiple 
times the same role (in the tomcat case)
loadbalancers.yml
cachingproxies.yml
webcontentservers.yml
digitallibraryservers.yml
ecmservers.yml

roles/
   common/
   tomcat/
       tasks/
           main.yml
       templates/
            enterpriseapps_server.xml.j2
            digitallibrary_server.xml.j2
            plonewebcontent_server.xml.j2
            javawebcontent_server.xml.j2
             ...
         ...
   varnish/
       tasks/
           main.yml
       templates/
            enterpriseapps_default.vcl.j2
            digitallibrary_default.vcl.j2
            plonewebcontent_default.vcl.j2
            javawebcontent_default.vcl.j2 <- there are specific caching 
rules for each kind of application
   haproxy/
       tasks/
           main.yml
       templates/
            haproxy.cfg.j2 <- all it does is to create frontends and 
backends
   enterprise-app/
       tasks/
           main.yml
   zope/
   zeo/
   dspace/ <-- to hold specific tomcat customizations
   liferay/   <-/
   ...
####

My question is: are we following correctly the best practices or should we 
do things differently? 

Our goal is to avoid defining the same things twice and to avoid 
overcomplicated roles and 100's of lines variable files with nested lists 
becoming too difficult to manage and maintain.

Thanks in advance.

Raoni Castro.

-- 
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/401b993c-dc3b-42d6-95da-6760c5b36578%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to