

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: startedCode language: JavaScript (javascript)
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
Code language: JavaScript (javascript)
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
Code language: JavaScript (javascript)
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
Code language: JavaScript (javascript)
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
Code language: JavaScript (javascript)
I’m Rajesh Kumar, a DevOps, SRE, DevSecOps, Cloud, and Platform Engineering expert passionate about sharing practical knowledge, real-world experiences, and industry best practices. I have worked at Cotocus and regularly write about technology, travel, investing, health, product reviews, and digital marketing through my various platforms.
I publish technical articles at DevOps School, travel stories at Holiday Landmark, stock market insights at Stocks Mantra, health and fitness guidance at My Medic Plus, product reviews at TrueReviewNow, and SEO and digital marketing strategies at Wizbrand.
Find Trusted Cardiac Hospitals
Compare heart hospitals by city and services — all in one place.
Explore Hospitals