== 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.[[BR]] In Virtualbox, 'Extension pack' should be installed. A wired internet connection is preferred. [[BR]] '''Virtual Machine (VM) Setup''' Download VM from the following Link. https://docs.learn.ac.lk/index.php/s/YcojJ2544b40Zw4 Import the VM to Virtualbox.[[BR]] Username and Password: '''docker''' [[BR]] May have to create Virtualbox Host-Only Network Adapter[[BR]] {{{ File > Host Network Manager > Create }}} Test internet connectivity.[[BR]] 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. [[BR]] '''Setup Network''' Connect all VMs to 'Internal Network'. {{{ Settings > Network > Adpater 3 }}} [[Image(internal net.png)]] 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 }}} '''Setup Passwordless SSH''' Login to control node as normal user. {{{ ssh-keygen -t rsa }}} Continue by entering the prompts. {{{ cat /home/docker/.ssh/id_rsa.pub }}} Copy the ssh keys (the output of the above command) generated on the control node, paste and save it in the authorized_keys file on both managed nodes. {{{ nano /home/docker/.ssh/authorized_keys }}} Verify passwordless ssh from control node to other nodes. {{{ ssh docker@ }}} '''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= db2 ansible_ssh_user=docker ansible_ssh_host= }}} {{{ Verify connectivity }}} {{{ ansible -m ping Dbservers }}} '''Create the Playbook - In control node - As root''' {{{ nano .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 .yml -e }}} '''Verify results - In managed nodes''' {{{ mysql -u root -p show databases; }}}