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
Ansible Fundamental tutorial by Manish in 2020
Ansible Advance Tutorial for Beginners with Demo 2020 — By DevOpsSchool
Ansible with network module (Part 01) — By DevOpsSchool
Ansible with network module (Part 02) — By DevOpsSchool
Ansible with network module (Part 03) — By DevOpsSchool
Ansible with network module (Part 04) — By DevOpsSchool
Ansible with network module (Part 05) — By DevOpsSchool
Ansible with network module (Part 06) — By DevOpsSchool
Ansible with network module (Part 07) — By DevOpsSchool
Ansible with network module (Part 08) — By DevOpsSchool
Ansible with network module (Part 09) — By DevOpsSchool
Ansible with network module (Part 10) — By DevOpsSchool
Ansible with network module (Part 11) — By DevOpsSchool
Ansible with network module (Part 12) — By DevOpsSchool
Ansible with network module (Part 13) — By DevOpsSchool
Latest posts by Rajesh Kumar (see all)
- Installing Jupyter: Get up and running on your computer - November 2, 2024
- An Introduction of SymOps by SymOps.com - October 30, 2024
- Introduction to System Operations (SymOps) - October 30, 2024