Last Updated on February 18, 2023 by cscontents
Introduction
Automation is the key aspect in DevOps methodology. It helps in faster software delivery. Developing an automated solution always takes more time at the initial stage, but we all know how it benefits us in the future.
In this article we will see automation of java installation using ansible.
Prerequisite
- Hands-on knowledge of Ansible
- Awareness about the steps to install Java manually.
If you want to learn Ansible basics then please check out the below course from KodeKloud which offers one of the best learning material in DevOps world.
Link of Training Course: Ansible for absolute beginners
Note: The above links are affiliate links, if you enroll this course using the above link, then it would help us to get some monetary benefit from KodeKloud. It won’t cost you anything.
Here, at first we will see the manual steps to install Java or JDK, and then we will see the automated solution. This is just for simplification, when you will see manual steps and automated solution (using ansible) side by side, then it will be very clear to you.
- Manual installation of Java (JDK)
- Java installation through automation.
Before starting, I just want to point out the various way we can install java –
- Using package manager (example, yum for RHEL)
- Archive installation – here we download the JDK binaries and then perform the installation.
In this article we will discuss archive installation and see how we can automate the installation.
Manual installation of Java (JDK)
Below is step-by-step guide to install JDK manually.
Step – 1: Download the JDK binaries
Download the JDK binaries.
[root@RHEL01 ~]# cd /opt/ [root@RHEL01 opt]# curl https://download.java.net/java/GA/jdk18.0.2.1/db379da656dc47308e138f21b33976fa/1/GPL/openjdk-18.0.2.1_linux-x64_bin.tar.gz --output openjdk-18.0.2.1_linux-x64_bin.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 173M 100 173M 0 0 219M 0 --:--:-- --:--:-- --:--:-- 218M
Step – 2: Unzip the downloaded file
Here we will use the ‘tar’ command to unzip the downloaded file (since it is a .tar.gz file).
[root@RHEL01 opt]# tar -xvf openjdk-18.0.2.1_linux-x64_bin.tar.gz
After unzipping we will see a new folder with name jdk-18.0.2.1
[root@RHEL01 opt]# ll total 178028 drwx--x--x. 4 root root 28 Aug 8 14:05 containerd drwxr-xr-x. 2 dockeradmin dockeradmin 42 Aug 8 18:40 docker drwxr-xr-x. 9 root root 136 Sep 4 12:23 jdk-18.0.2.1 -rw-r--r--. 1 root root 182299048 Sep 4 06:51 openjdk-18.0.2.1_linux-x64_bin.tar.gz
Step – 3: Set the JAVA_HOME in /etc/profile file
In my case the path is /opt/jdk-18.0.2.1
Below are the two line we need to add in the /etc/profile file.
- export JAVA_HOME=”/opt/jdk-18.0.2.1″
- export PATH=$PATH:$JAVA_HOME:/bin
[root@RHEL01 opt]# vi /etc/profile
Step – 4: Reload /etc/profile file
[root@RHEL01 opt]# source /etc/profile
After reloading the /etc/profile file, we can check the JAVA_HOME environment variable by running the below echo command.
[root@RHEL01 opt]# echo $JAVA_HOME /opt/jdk-18.0.2.1
Now, Java installation is completed. For confirmation, we can check the java version by running the below command.
[root@RHEL01 opt]# java -version java version "18.0.2.1" 2022-08-18 Java(TM) SE Runtime Environment (build 18.0.2.1+1-1) Java HotSpot(TM) 64-Bit Server VM (build 18.0.2.1+1-1, mixed mode, sharing)
Automated way of Java installation
Now we will see how we can automate the steps in manual installation using Ansible.
As a prerequisite you must have ansible-controller machine and remote/target machine where you want to perform the installation. For this you can follow this article Basics of automation using Ansible | Automate any task
In step – 1 we have downloaded the JDK binary file, for this we will use get_url module of Ansible.
In step – 2 we have unzipped the downloaded tar file, for this we will use unarchive module of Ansible.
In step – 3 we have updated the /etc/profile file with “JAVA_HOME”, for this we will use the lineinfile module of Ansible.
In step – 4 we have reloaded the /etc/profile file, for this we will use shell module of Ansible.
Ansible Playbook for installation of Java
Below is the ansible playbook for automated installation of java.
- name: Java installation hosts: remote_server become: true tasks: - name: Download the JDK binaries get_url: url: https://download.java.net/java/GA/jdk18.0.2.1/db379da656dc47308e138f21b33976fa/1/GPL/openjdk-18.0.2.1_linux-x64_bin.tar.gz dest: /opt/openjdk-18.0.2.1_linux-x64_bin.tar.gz - name: Unzip the downloaded file unarchive: src: /opt/openjdk-18.0.2.1_linux-x64_bin.tar.gz dest: /opt remote_src: yes - name: Set the JAVA_HOME in /etc/profile file lineinfile: path: /etc/profile state: present line: "{{ item }}" with_items: - 'export JAVA_HOME="/opt/jdk-18.0.2.1"' - 'export PATH=$PATH:$JAVA_HOME/bin' - name: Reload /etc/profile file shell: cmd: source /etc/profile
Inventory file
To run the above playbook we need inventory file, where we will have the details about the ‘remote_server’ which is mentioned under the “hosts” field of the above playbook.
Here, inventory.txt file looks like below.
remote_server ansible_host=101.239.238.102 ansible_ssh_user=remote_ssh_user ansible_ssh_pass=remote_ssh_password
Command to execute the above ansible playbook
To run the above playbook we need to run the below command on the ansible-controller machine.
ansible-playbook java_installation_playbook.yml -i inventory.txt --extra-vars "ansible_sudo_pass=Password" -vv
OR
ansible-playbook java_installation_playbook.yml -i inventory.txt --ask-become-pass -vv
The above command will ask for password, and we will need to enter the password which is required to become root user in the target machine.
Thank You.
If you are interested in learning DevOps, please have a look at the below articles, which will help you greatly.
- How to create ansible role for Java installation – a simple guide
- Kubernetes Series: Part 1 – Introduction to Kubernetes | Background of Kubernetes
- Kubernetes Series: Part 2 – Components of Kubernetes cluster | Kubernetes cluster in detail
- Kubernetes Series: Part 3 – What is Minikube and How to create a Kubernetes cluster (on Linux) using Minikube?
- Introduction to Ansible | High Level Understanding of Ansible
- Basics of automation using Ansible | Automate any task
- 10 frequently used ansible modules with example
- Jenkins Pipeline as code – High level information
- What is End-to-End Monitoring of any web application and Why do we need it?
- What is “Monitoring” in DevOps? Why do we need to Monitor App/DB servers, Transactions etc.?
- DevOps Engineer or Software Developer Engineer which is better for you?- Let’s discuss
- How To Be A Good DevOps Engineer?
- How to do git push, git pull, git add, git commit etc. with Bitbucket