Ansible Roles (deel 2)

Als je hier beland bent, moet je eerst even de stappen uit deel 1 uitvoeren.
In deel 2 gaan we zorgen dat de nfsserver geïnstalleerd wordt en dat de haproxy in orde gemaakt wordt.
In deel 1 hadden we al een role aangemaakt voor de nfsserver. In de role nfsserver wijzigen we de main.yml in tasks als volgt:

---
# tasks file for nfsserver
- name: Install NFS Server
  yum:
    name: nfs-utils
    state: latest
- name: Disable SELinux
  selinux:
    state: disabled
- name: Disable Firewall
  firewalld:
    service: nfs
    permanent: yes
    state: enabled
  ignore_errors: True
- name: Copy config
  copy: 
    src: exports
    dest: /etc/exports
    owner: root
    group: root
    mode: 0644
- name: Create NFS Directory
  file:
    path: /mnt/nfsserver
    state: directory
    mode: '0777' 
- name:
  service:
    name: nfs-server
    state: started
    enabled: yes

Zoals je kunt zien gebruiken we de copy module om een bestand te kopiëren. Dit bestand wordt gekopieerd vanuit de roles/nfsserver/files directory en ziet er als volgtuit:

/mnt/nfsserver 192.168.57.1/24(rw,sync,no_root_squash)

Dit is het exports bestand voor de nfs server. Dit is alles wat nodig is voor de role nfsserver. Het enige dat nog over blijft is het playbook. Deze maken we aan in ~/ansible/nfsserver.yml en ziet er als volgt uit:

---
- hosts: test3
  become: yes
  name: Install nfsserver
  roles: 
    - role: nfsserver

Nu kunnen we dit playbook runnen om de nfsserver te installeren:

ansible-playbook nfsserver.yml

Vervolgens kunnen we ook de webservers gaan installeren met

ansible-playbook install_webserver.yml

Nu blijft alleen nog de haproxy over.
De role hadden we in deel 1 al aangemaakt nu hoeven we alleen nog de files aan te passen.
Te beginnen met de main.yml in tasks:

---
# tasks file for haproxy
- name: Install HAProxy
  yum:
    name: haproxy
    state: latest
- name: Config
  template:
    src: haproxy.j2
    dest: /etc/haproxy/haproxy.cfg
- name: Set Service
  service:
    name: haproxy
    state: started
    enabled: yes
- name: Disable SELinux
  selinux:
    state: disabled
- name: Disable Firewall
  service: 
    name: firewalld
    state: stopped
  ignore_errors: true

Zoals ook hier te zien is maken we gebruik van een template. Deze is te vinden in roles/haproxy/templates en ziet er als volgt uit:

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    log         127.0.0.1 local2     #Log configuration
 
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000                
    user        haproxy             #Haproxy running under user and group "haproxy"
    group       haproxy
    daemon
 
    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000  
#---------------------------------------------------------------------
#HAProxy Monitoring Config
#---------------------------------------------------------------------
listen haproxy3-monitoring *:8080                #Haproxy Monitoring run on port 8080
    mode http
    option forwardfor
    option httpclose
    stats enable
    stats show-legends
    stats refresh 5s
    stats uri /stats                             #URL for HAProxy monitoring
    stats realm Haproxy\ Statistics
    stats auth howtoforge:howtoforge            #User and Password for login to the monitoring dashboard
    stats admin if TRUE
    default_backend app-main                    #This is optionally for monitoring backend
#---------------------------------------------------------------------
# FrontEnd Configuration
#---------------------------------------------------------------------
frontend main
    bind *:80
    option http-server-close
    option forwardfor
    default_backend app-main
 
#---------------------------------------------------------------------
# BackEnd roundrobin as balance algorithm
#---------------------------------------------------------------------
backend app-main
    balance roundrobin                                     #Balance algorithm
    option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost    #Check the server application is up and healty - 200 status code
    {% for item in ipservers %}
    server {{ item }} check                 #Nginx1 
    {% endfor %} 

In dit bestand staat de inlognaam en het wachtwoord plain in. Eventueel kan je dat met ansible-vault nog beveiligen.
Ook kun je zien dat er in het laatste gedeelte gebruik gemaakt wordt van een variabele ipservers. Dit bestand moeten we dus ook nog aanmaken en dat doen we in roles/haproxy/vars/main.yml:

---
# vars file for haproxy
ipservers:
  - ansibletest1 192.168.57.101:80
  - ansibletest2 192.168.57.102:80

Dit bestand kunnen we aanpassen naar gelang er server bijkomen of af gaan.
Tenslotte moeten we nog een playbook aanmaken in ~/ansible/haproxy.yml:

---
- hosts: test3
  become: yes
  name: Install haproxy
  roles: 
    - role: haproxy

Als we nu dit playbook runnen, dan hebben we de haproxy ook geregeld en kun je met de webbrowser naar 192.168.57.103 om te kijken of de pagina die of de nfs share staat het doet.