Install and Run Mongodb using Ansible

Introduction

As a person who has to do several on-premise deployments, at a place where docker is not accepted yet, I have had several issues installing mongodb. Even if I am installing it in the same environment, or upgrading it, I face several problems regarding permissions, ownerships, lockfiles etc.
In this article I will share an automated way through which you can install mongodb (version 4.2). Yes, we will be using ansible.

Pre-requisites

You need to have ansible installed on your system.

Hosts

When you run an ansible-playbook command, you may or may not mention the host file which has the all the required host information. Lets create a new file named mongo-hosts and enter name of all the servers on which you need mongodb installed

mongo-hosts

[local]
localhost       ansible_connection=local

[mongo-server-1]
XX.YY.ZZ.AA   ansible_connection=ssh  ansible_user=user

[mongo-server-2]
XX.YY.ZZ.BB   ansible_connection=ssh ansible_user=user

[mongo-servers:children]
local
mongo-server-1
mongo-server-2

We have mentioned all the instances, with their connection type and username.
Here you can see that I have grouped all the servers at the end. So anywhere mongo-servers is mentioned in playbook,All the child instances will be considered.

Playbook - mongo-playbook.yml

- hosts: mongo-servers
  become: true
  serial: 1

  tasks:
    - name: Install aptitude using apt
      apt:
        name: aptitude
        state: latest
        update_cache: yes

    - name: Import public key
      apt_key:
        url: 'https://www.mongodb.org/static/pgp/server-4.2.asc'
        state: present

    - name: Add repository
      apt_repository:
        filename: '/etc/apt/sources.list.d/mongodb-org-4.2.list'
        repo: 'deb https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse'
        state: present
        update_cache: yes

    - name: Install mongoDB
      apt:
        name: mongodb-org
        state: present
        update_cache: yes

    - name: Ensure mongodb is running and and enabled to start automatically on reboots
      service:
        name: mongod
        enabled: yes
        state: started

So here as we can see

  • hosts represent the instances on which this playbook will run.
  • become parameter is a privilege escalation setting as some commands we would only be able to run if the user is sudo. Note: These commands are only possible if the user through which ansible logs into the server is a sudo user.
  • serial parameter is for controlling how the playbook will be executed. In our case, this would mean that we are going to run the playbook on all the servers serially.
  • tasks are the steps that ansible will take on each server. These are the commands that we generally run to install mongodb manually.

Execution:

ansible-playbook mongo-playbook.yml -vvvv -i ./mongo-hosts

-vvvv is used to run the ansible playbook in verbose mode.
If we dont mention the hosts file(using i flag) , ansible-playbook will pick from the default one. In case of Ubuntu, that is /var/ansible/hosts

And thats it! This is a really basic case which only touches a simple installation. Let me know if you need examples of more complex ones (Primary,secondary,arbiter or the same using docker)

69