wiki:Csle2022/Agenda/Ansible

Version 15 (modified by dushmantha, 2 years ago) ( diff )

--

Ansible Lab

In this lab, you will install and use Ansible to install MySQL/MariaDB and create database remotely.

Requirements:

Participants are requested to have a computer with Windows 8/10/11 (8GB RAM, 25GB free disk space) with Virtualbox (version 6 or higher) hypervisor and PuTTY installed.
In Virtualbox, 'Extension pack' should be installed.

A wired internet connection is preferred.


Virtual Machine (VM) Setup

Download VM from the following Link.

https://docs.learn.ac.lk/index.php/s/YcojJ2544b40Zw4

Import the VM to Virtualbox.

Username and Password: docker

May have to create Virtualbox Host-Only Network Adapter

File > Host Network Manager > Create

Test internet connectivity.

This setup needs 3 VMs (one as control node and the others will be managed nodes). Import the same VM image and setup 3 VMs accordingly.

Login and check IP addresses of all VMs.

ip add

If they are same, then change them accordingly. You may disable dhcp and assign static IP addresses according to your setups.

vi /etc/netplan/00-installer-config.yaml
 enp0s8:
      addresses : [192.168.56.105/24]
:wq
netplan apply

Login using PuTTY.


Setup Network

Connect all VMs to 'Internal Network'.

Settings > Network > Adpater 3

Find the 'Internal Network' network interface.

ip add

Edit network configurations of VMs according to your setups.

vi /etc/netplan/00-installer-config.yaml
 enp0s9:
      addresses : [10.1.1.1/24]
:wq
netplan apply

Repeat the above steps in each machine accordingly and test the network connectivity.

Setup Nodes

In control node

Login as root to the node.

Change the hostname.

hostnamectl set-hostname controlnode
nano /etc/hosts
127.0.0.1 localhost
127.0.1.1 controlnode
reboot

Install Ansible

apt install ansible

In each managed node

Login as root to the node and change hostname. Each should have a unique hostname.

hostnamectl set-hostname m1
nano /etc/hosts
127.0.0.1 localhost
127.0.1.1 m1
reboot
apt install python3.10

Setup Passwordless SSH

In each node

Login as normal user.

ssh user > ssh-keygen -t rsa

Continue by entering the prompts.

In control node

cat /home/ubuntu/.ssh/id_rsa.pub

Copy the ssh keys (the output of the above command) generated on the master node, paste and save it in the authorized_keys file on both managed nodes.

nano /home/node/.ssh/authorized_keys

Add the managed nodes to control node Ansible hosts file

Login as root to the control node.

nano /etc/ansible/hosts

Insert the following with the required changes according to your setting.

[Dbservers]

db1 ansible_ssh_user=docker ansible_ssh_host=<first managed node IP address>

db2 ansible_ssh_user=docker ansible_ssh_host=<second managed node IP address>
Verify connectivity

ansible -m ping Dbservers

Create the Playbook - In control node - As root

nano <playbook name>.yml
- name: setup mysql 
  become: yes
  hosts: Dbservers
  vars:
    - user: test
    - password: M@#567uers
    - db: testdb
  tasks:
    - name: installing mysql and dependencies
      package:
       name: "{{item}}"
       state: present
       update_cache: yes
     loop:
       - mysql-server
       - mysql-client 
       - python3-mysqldb
       - libmysqlclient-dev
     become: yes
    - name: start and enable mysql service
      service:
        name: mysql
        state: started
        enabled: yes
    - name: creating mysql user 
      mysql_user:
        name: "{{user}}"
        password: "{{password}}"
        priv: '*.*:ALL'
        host: '%'
        state: present
    - name: creating db
      mysql_db:
        name: "{{db}}"
        state: present
  handlers:
    - name: restart mysql
      service:
        name: mysql
        state: restarted

Run the Playbook - In control node - As root

ansible-playbook <playbook name>.yml -e

Verify results - In managed nodes

mysql -u root -p
show databases;

Attachments (1)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.