Upgrade & Secure Your Future with DevOps, SRE, DevSecOps, MLOps!

We spend hours on Instagram and YouTube and waste money on coffee and fast food, but won’t spend 30 minutes a day learning skills to boost our careers.
Master in DevOps, SRE, DevSecOps & MLOps!

Learn from Guru Rajesh Kumar and double your salary in just one year.


Get Started Now!

Ansible Template and Handlers explained with Example

We can declare variables in

  • playbook
  • inventory
  • commands

Which can be used & Intropolate only in playbook Tasks but not in the files used in playbook.

Solution: Template
Using Template module you can Intropolate vars mentioned in the files used in playbook.

Rule for using template Module

  • A file must be .j2 ext
  • Must use a module call “template”

Example Code for Cento/RHEL


---
- name: Update web servers
  hosts: web
  vars:
    myname: "Rajesh Kumar"

  tasks:
  - name: Install Apache in centos7
    ansible.builtin.yum:
      name: httpd
      state: latest
  - name: Copy index.html
    ansible.builtin.copy:
      src: index.html
      dest: /var/www/html/index.html
  - name: Template index.html
    template:
      src: index.html.j2
      dest: /var/www/html/index-template.html
  - name: Starting a Apache Server
    ansible.builtin.service:
      name: httpd
      state: started

index.html.j2

Project Requirement

  • When you Change APACHE STATIC HTML Content -> HTTPD restart is not required
  • When you Change APACHE Conf -> HTTPD restart is not required
  • HTTP should be run 90
  • No restart should be done on STATIC
  • Restart must be done at conf changes

---
- name: Update web servers
  hosts: web
  vars:
    myname: "Rajesh Kumar"
    httpport: 8090

  tasks:
  - name: Install Apache in centos7
    ansible.builtin.yum:
      name: httpd
      state: latest
  - name: Copy index.html
    ansible.builtin.copy:
      src: index.html
      dest: /var/www/html/index.html
  - name: Starting a Apache Server
    ansible.builtin.service:
      name: httpd
      state: started
  - name: stopped a Apache Server
    ansible.builtin.service:
      name: httpd
      state: stopped
  - name: Template for httpd.conf
    template:
      src: httpd.conf.j2
      dest: /etc/httpd/conf/httpd.conf
  - name: Starting a Apache Server
    ansible.builtin.service:
      name: httpd
      state: started

Example code for Template for Ubuntu


---
- name: Update web servers
  hosts: web
  vars:
    myname: "Rajesh Kumar"
    port: 81

  tasks:
  - name: Install Apache in Ubuntu
    ansible.builtin.apt:
      name: apache2
      state: latest
  - name: Copy index.html
    ansible.builtin.copy:
      src: index.html
      dest: /var/www/html/index.html
  - name: stopped a Apache Server
    ansible.builtin.service:
      name: apache2
      state: stopped
  - name: Template for httpd.conf
    template:
      src: ports.conf.j2
      dest: /etc/apache2/ports.conf
  - name: Starting a Apache Server
    ansible.builtin.service:
      name: apache2
      state: started

Problems

  • No change in config file but STOP and START happening

Solution

  • Handlers

What is Handlers?

  • A section is plyabook similar to tasks section
  • It contains multiple task similar to tasks section
  • The Handler task would execute when you call from tasks’s task
  • BUT one condition – ONLY when calling tasks’s task is CHANGED == TRUE

---
- name: Update web servers
  hosts: web
  vars:
    myname: "Rajesh Kumar"
    httpport: 8090

  tasks:
  - name: Install Apache in centos7
    ansible.builtin.yum:
      name: httpd
      state: latest
  - name: Copy index.html
    ansible.builtin.copy:
      src: index.html
      dest: /var/www/html/index.html
  - name: Starting a Apache Server
    ansible.builtin.service:
      name: httpd
      state: started
  - name: Template for httpd.conf
    template:
      src: httpd.conf.j2
      dest: /etc/httpd/conf/httpd.conf
    notify:
      - ReStarting a Apache Server

  handlers:
  - name: ReStarting a Apache Server
    ansible.builtin.service:
      name: httpd
      state: restarted



Handlers Code Example for Ubuntu


---
- name: Update web servers
  hosts: localhost
  vars:
    myname: "Rajesh Kumar"
    port: 81

  tasks:
  - name: Install Apache in Ubuntu
    ansible.builtin.apt:
      name: apache2
      state: latest
  - name: Copy index.html
    ansible.builtin.copy:
      src: index.html
      dest: /var/www/html/index.html
  - name: Template for httpd.conf
    template:
      src: ports.conf.j2
      dest: /etc/apache2/ports.conf
    notify:
      - ReStarting a Apache Server
  - name: Starting a Apache Server
    ansible.builtin.service:
      name: apache2
      state: started

  handlers:
  - name: ReStarting a Apache Server
    ansible.builtin.service:
      name: apache2
      state: restarted

Certification Courses

DevOpsSchool has introduced a series of professional certification courses designed to enhance your skills and expertise in cutting-edge technologies and methodologies. Whether you are aiming to excel in development, security, or operations, these certifications provide a comprehensive learning experience. Explore the following programs:

DevOps Certification, SRE Certification, and DevSecOps Certification by DevOpsSchool

Explore our DevOps Certification, SRE Certification, and DevSecOps Certification programs at DevOpsSchool. Gain the expertise needed to excel in your career with hands-on training and globally recognized certifications.