

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

















I’m a DevOps/SRE/DevSecOps/Cloud Expert passionate about sharing knowledge and experiences. I am working at Cotocus. I blog tech insights at DevOps School, travel stories at Holiday Landmark, stock market tips at Stocks Mantra, health and fitness guidance at My Medic Plus, product reviews at I reviewed , and SEO strategies at Wizbrand.
Please find my social handles as below;
Rajesh Kumar Personal Website
Rajesh Kumar at YOUTUBE
Rajesh Kumar at INSTAGRAM
Rajesh Kumar at X
Rajesh Kumar at FACEBOOK
Rajesh Kumar at LINKEDIN
Rajesh Kumar at PINTEREST
Rajesh Kumar at QUORA
Rajesh Kumar at WIZBRAND