NashTech Blog

Setting up Infrastructure Using IAC | Part-2

Table of Contents
Industry Cloud

Automating Infrastructure Setup Using Ansible: A Comprehensive Guide

Introduction:

In today’s fast-paced DevOps environment, automating the setup and configuration of infrastructure is essential for ensuring consistency, reliability, and scalability. Infrastructure as Code (IAC) has emerged as a powerful approach to achieve this automation. Among IAC tools, Ansible stands out for its simplicity, flexibility, and robustness. In this comprehensive guide, we will explore how to leverage Ansible to automate the setup of a typical DevOps infrastructure, including the installation and configuration of Jenkins, SonarQube Server, Nexus, and Jenkins slave nodes.

Setting up Ansible:

The first step is to install Ansible on your local machine or a dedicated server. Ansible can be easily installed using package managers like apt or yum. Once installed, ensure all dependencies are met, and configure the Ansible inventory file. The inventory file lists the IP addresses or hostnames of the VMs you’ll be configuring.\

# Sample Ansible Inventory File
[jenkins_vm]
192.168.1.101

[sonarqube_vm]
192.168.1.102

[nexus_vm]
192.168.1.103

[jenkins_slave_vm]
192.168.1.104

Creating Ansible Playbooks:

Ansible playbooks are YAML files that define the tasks to be executed on the target VMs. We’ll create separate playbooks for each component we want to install and configure. These playbooks will include tasks such as adding repositories, installing packages, downloading binaries, and starting services. For example, the Jenkins Installation playbook will add the Jenkins repository, install Jenkins, and start the Jenkins service.

Executing Playbooks:

After creating the playbooks, we’ll execute them using the ansible-playbook command. Ansible will connect to the target VMs specified in the inventory file and execute the tasks defined in the playbooks. It’s essential to monitor the execution to ensure everything runs smoothly. Ansible provides verbose output and error handling to facilitate troubleshooting.

Sample Ansible Playbooks:

Let’s take a closer look at the sample Ansible playbooks provided in the document:

  1. Jenkins Installation: This playbook installs Jenkins on the designated VM. It adds the Jenkins repository, installs Jenkins package, and starts the Jenkins service.
# Jenkins Installation Playbook
---
- name: Install Jenkins
hosts: jenkins_vm
become: true
tasks:
- name: Add Jenkins Repository
apt_repository:
repo: deb https://pkg.jenkins.io/debian-stable binary/
state: present
update_cache: yes

- name: Import Jenkins Repository GPG Key
apt_key:
url: https://pkg.jenkins.io/debian/jenkins.io.key
state: present

- name: Install Jenkins
apt:
name: jenkins
state: present

- name: Start Jenkins Service
service:
name: jenkins
state: started
enabled: yes
  • SonarQube Server Installation: This playbook installs SonarQube Server by downloading the binary, setting up permissions, and starting the SonarQube service.
# SonarQube Server Installation Playbook
---
- name: Install SonarQube Server
hosts: sonarqube_vm
become: true
tasks:
- name: Install OpenJDK 11
apt:
name: openjdk-11-jdk
state: present

- name: Download SonarQube
get_url:
url: https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-8.9.1.44547.zip
dest: /opt/sonarqube.zip

- name: Unzip SonarQube
unarchive:
src: /opt/sonarqube.zip
dest: /opt/
remote_src: yes

- name: Set Permissions
file:
path: /opt/sonarqube
state: directory
mode: '0755'

- name: Start SonarQube Service
command: /opt/sonarqube/bin/linux-x86-64/sonar.sh start
  • Nexus Installation: Similar to the previous playbooks, this one install Nexus Repository Manager by downloading the binary, setting up permissions, and starting the Nexus service.
# Nexus Installation Playbook
---
- name: Install Nexus Repository Manager
hosts: nexus_vm
become: true
tasks:
- name: Install OpenJDK 8
apt:
name: openjdk-8-jdk
state: present

- name: Download Nexus
get_url:
url: https://download.sonatype.com/nexus/3/latest-unix.tar.gz
dest: /opt/nexus.tar.gz

- name: Unzip Nexus
unarchive:
src: /opt/nexus.tar.gz
dest: /opt/
remote_src: yes

- name: Set Permissions
file:
path: /opt/nexus
state: directory
mode: '0755'
- name: Start Nexus Service
command: /opt/nexus/bin/nexus start
  • Jenkins Slave Configuration: This playbook configures a VM as a Jenkins slave by installing Java and additional configurations as needed.
# Jenkins Slave Configuration Playbook
---
- name: Configure Jenkins Slave
hosts: jenkins_slave_vm
become: true
tasks:
- name: Install Java
apt:
name: default-jre
state: present

Executing Playbooks:

After creating the playbooks, execute them using the ansible-playbook command. Ansible will connect to the target VMs specified in the inventory file and execute the tasks defined in the playbooks. Monitor the execution to ensure everything runs smoothly.

ansible-playbook jenkins_installation.yml
ansible-playbook sonarqube_installation.yml
ansible-playbook nexus_installation.yml
ansible-playbook jenkins_slave_configuration.yml

Conclusion:

By following this comprehensive guide, you’ve learned how to leverage Ansible to automate the setup of a DevOps infrastructure. With Ansible playbooks, you can ensure consistency, reliability, and scalability in your infrastructure deployment process. Start automating today and streamline your DevOps workflows for greater efficiency and productivity. Happy automating!

Picture of Pradeep

Pradeep

Leave a Comment

Your email address will not be published. Required fields are marked *

Suggested Article

Scroll to Top