Multiple tomcats and wait for app to start

315 views
Skip to first unread message

Narahari 'n' Savitha

unread,
Sep 8, 2017, 8:29:40 AM9/8/17
to Ansible Project
Friends:

Thank you in advance for your time and attention.

I am writing a playbook do the following on 6 tomcat servers.

a. start tomcat
b. wait for the app to come up on http://localhost:8080/tellMyVersion/version.jsp  
c. complete the play run after the above steps.

I can start tomcat which is not a problem.  I use the service module.

I currently (without ansible) use the following script to test curl -sk -m 600 -w "\n" 'http://localhost:8080/tellMyVersion/version.jsp'

It works fairly well since I am giving 10 min for curl to time out and that url I have put responds in about 7 or 8 mins. (worst case timings)

The output of the curl command is something like (gives out the version of the app installed)

3.9.21

With Ansible I want to be able to do this 

On batch tomcat the curl comes back in 4 mins
On webtier tomcat the curl comes back in 6 mins
On backend tomcat the curl takes the longest at 8 mins.

I want to be able to loop thru each of them run the curl command get the output and if no response wait.  If I get response I want to go to the next server and check that.

I am not sure how to be in a loop going from one tomcat to another based on the output.

Please help.

-N

J Hawkesworth

unread,
Sep 8, 2017, 10:50:55 AM9/8/17
to Ansible Project
Here's how we wait for some of our tomcat apps to start up:

- name: check every 3 seconds for 40 attempts if tomcat is up and ready to serve the healthcheck page
  uri
:
    url
: 'http://{{ inventory_hostname }}/app/healthcheck.jsp'
    return_content
: yes
    timeout
: 2
  delegate_to
: localhost
 
register: tomcat_result
 
until: tomcat_result['status']|default(0) == 200
  retries
: 40
  delay
: 3

You would need to experiment with the number of retries.  If I recall tomcat locks the port long before it starts responding on it, so its good to check that the app has completed coming up and can actually server some kind of content.

We started out with configured wait periods for each environment but prefer the above as the playbook can proceed as soon as the application is ready to serve requests.

I guess you could have 3 plays in your playbook and in each one check the relevant group of tomcats

- hosts: batch
  tasks
:
 
- name: check batch tomcats are up
    uri
:
      url
: 'http://{{ inventory_hostname }}/app/healthcheck.jsp'
      return_content
: yes
      timeout
: 2
    delegate_to
: localhost
   
register: tomcat_result
   
until: tomcat_result['status']|default(0) == 200
    retries
: 40
    delay
: 3


- hosts: webtier
  tasks
:
 
- name: check webtier tomcats are up
    uri
:
      url
: 'http://{{ inventory_hostname }}/app/healthcheck.jsp'
      return_content
: yes
      timeout
: 2
    delegate_to
: localhost
   
register: tomcat_result
   
until: tomcat_result['status']|default(0) == 200
    retries
: 40
    delay
: 3


- hosts: backend
  tasks
:
 
- name: check backend tomcats are up

    uri
:
      url
: 'http://{{ inventory_hostname }}/app/healthcheck.jsp'
      return_content
: yes
      timeout
: 2
    delegate_to
: localhost
   
register: tomcat_result
   
until: tomcat_result['status']|default(0) == 200
    retries
: 40
    delay
: 3

Hope this helps,

Jon
Reply all
Reply to author
Forward
0 new messages