Ansible real-time project - Installing and configure Tomcat 10
Hey DevOps or DevSecOps or SRE Guys!!
What's up? in the automation journey one more wonderful learning here!
In this post we will be implementing all our Ansible modules one after other to build a complete solution for Java based Application server installation and running using Ansible playbook.
At present Tomcat latest version is 10.0.27 so I've used same
Pre-requisites:
- To install Apache Tomcat there is separate JDK/JRE compatibility we need to validate before we proceed
- Create a dedicated user account as 'tomcat' with shell as bash to manage Tomcat application server
- Create a separate directory for tomcat server to be installed
Execution of multiple tasks in the Playbook will be as follows:
- Download the Tomcat software from Apache Tomcat 10.0.27.tar.gz
- Uncompressing the tomcat tar.gz file
- Change the file permissions and ownership
- Cleanup after unarchive the tar.gz file
- Start the Tomcat server
- Have a task to stop the Tomcat server
---
- name: Installation and setup Apache Tomcat 10
hosts: "{{ targets | default('localhost') }}"
become: yes
gather_facts: no
tasks:
- name: Install openjdk
yum:
name: java-1.8.0-openjdk
state: present
tags: install_openjdk
- name: Create user as tomcat
user:
name: tomcat
state: present
home: /home/tomcat
shell: /bin/bash
tags: pre-install
- name: Create a directory - /opt/tomcat
file:
path: /opt/tomcat
state: directory
mode: 0755
owner: tomcat
group: tomcat
tags: pre-install
- name: Download tomcat - apache-tomcat-10.0.27.tar.gz
get_url:
url: https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.27/bin/apache-tomcat-10.0.27.tar.gz
dest: /opt/tomcat
tags: pre-install
- name: Extract tomcat inside directory and set ownership, permissions
unarchive:
src: /opt/tomcat/apache-tomcat-10.0.27.tar.gz
dest: /opt/tomcat
extra_opts: [--strip-components=1]
remote_src: yes
owner: tomcat
group: tomcat
mode: "u+rwx,g+rx,o=rx"
tags: tomcat-install
- name: Remove gz file apache-tomcat-10.0.27.tar.gz
file:
path: /opt/tomcat/apache-tomcat-10.0.27.tar.gz
state: absent
tags: post-install
- name: Start the Tomcat server
become_user: tomcat
shell:
cmd: nohup ./startup.sh
chdir: /opt/tomcat/bin
tags: start-tomcat
- name: Stop the Tomcat server
become_user: tomcat
shell:
cmd: nohup ./shutdown.sh
chdir: /opt/tomcat/bin
tags: stop-tomcat, never
You can run the playbook in multiple ways
1. Use the target as webserver group to install Tomcat only on them.
ansible-playbook tomcat-solutoin.yaml -e targets=webservers2. Use the tags to stop the Tomcat servers.
ansible-playbook tomcat-solutoin.yaml -t stop-tomcat -e targets=webservers
3. Use the tags to start the Tomcat server.
Example - find process which is started with java
Second task is to terminating a process which is identified in the first task. Here we can use 'shell' module where we can use 'kill' running process.
Execute the playbook as follows:
ansible-playbook tomcat-solutoin.yaml -e targets=webservers
Finding & Terminating a process on remote VM
The play can be having two tasks where you need to find the running process by process name or command used to run it. If there is any error ignore them. Try to catch the result into a variable to pass it to next task.Example - find process which is started with java
Second task is to terminating a process which is identified in the first task. Here we can use 'shell' module where we can use 'kill' running process.
---
- name: Find Java process and Terminate
hosts: "{{ targets | default ('localhost') }}"
gather_facts: false
tasks:
- name: Get the running Java process
shell: "ps -ef|grep tomcat |grep -v grep | awk {'print $2'}"
register: JavaProcessID
- name: Print Java Process
debug:
msg: "{{ JavaProcessID.stdout }}"
- name: Terminating Java Process
become: yes
become_user: tomcat
shell: "kill -9 {{ JavaProcessID.stdout }}"
Execute the playbook as follows:
ansible-playbook find_killtomcat.yaml -e targets=webserversThe output Image:
| Using shell module to find and kill tomcat process |
Comments