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
- 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, neverYou can run the playbook in multiple ways
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
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 |