Ansible Files
In DevOps Pipelines, it will necessary to download/copy the package built by build system (Maven, Msbuild, make) to the Node.
To Download the file into node use module get_url
To copy the file from ACS to node use copy
Now lets use the same lamp playbook and create a file called as info.php with following contnets
<?php
phpinfo();
?>
Now lets add the copy module to the existing playbook
---
- hosts: webservers
become: yes
tasks:
- name: fail if it is unsupported os
fail:
msg: This playbook is supported only on redhat and debain variants
when: ansible_facts['os_family'] != "RedHat" and ansible_facts['os_family'] != "Debian"
- name: install apache
package:
name: "{{ package_name }}"
state: present
notify:
- restart and enable apache
- name: printing php modules
debug:
var: php_modules
- name: install php modules
package:
name: "{{ item }}"
state: present
loop: "{{ php_modules }}"
- name: copy the home page
copy:
src: info.php
dest: /var/www/html/info.php
notify:
- restart and enable apache
#- name: Download info php page
# get_url:
# url: https://qt-s3-new-testing.s3-us-west-2.amazonaws.com/info.php
# dest: /var/www/html/info.php
# notify:
# - restart and enable apache
handlers:
- name: restart and enable apache
service:
name: "{{ package_name }}"
enabled: yes
state: restarted
Exercise
Create a file called as Readme.txt in the root folder.
The contents of the file should be
Create by Ansible
Os family is <os >
Os distribution is <distribution>
version is <version>
Solution to above Exercise
Whenever you have dynamic values, ansible has a templating system which is widely used in python based developments. That templating system is Jinja
Jinja templates are the files with extension .j2
Lets try to solve the above situation
Create a Readme.txt.j2 file with following content
Create by Ansible
Os family is {{ ansible_os_family }}
Os distribution is {{ ansible_distribution }}
version is {{ ansible_distribution_version }}
Write a simple playbook with following content
---
- hosts: all
tasks:
- name: copy the readme
template:
src: Readme.txt.j2
dest: "{{ ansible_user_dir }}/Readme.txt"
Run this playbook and check the results
In the J2 file facts and variables (user defined) can be used.
Individual find and replaces can be done with a module lineinfile
Pre-Tasks and Post-Tasks
Pre-Tasks are the tasks which get executed before execution of tasks
Post-Tasks are the tasks which get executed after execution of tasks
---
- hosts: all
become: yes
pre_tasks:
- name: write a message
debug:
msg: "Starting Execution of Playbook"
tasks:
- name: install tree
package:
name: tree
state: present
post_tasks:
- debug:
msg: Playbook execution completed
How to Reuse Playbooks
You already have lamp.yaml, now you want to use same lamp installation along with some other configurations
You can call existing playbooks using include or import playbooks. Refer
Lets write a simple playbook to call other playbook
---
- hosts: all
become: yes
tasks:
- name: call lamp playbook
import_playbook: lamp.yaml
- name: install mysql
package:
name: mysql-server
state: present
Ansible roles
Its all about reusability
Using others automation efforts in ansible is simplified using roles
Any user can share the work by converting playbook to ansible role and submit to ansible community. Ansible community which shares these roles is Ansible Galaxy
As an example lets install java using Ansible Galaxy role. Refer Here
Download the Ansible Role by executing ansible-galaxy install geerlingguy.java
Now to install java lets write a playbook
---
- hosts: all
become: yes
roles:
- role: geerlingguy.java
Creating Ansible Roles
Sample folder structure
Login into the ACS and create a new directory called roles and execute the following command
ansible-galaxy init lamp
Now use lamp playbook to copy tasks in to tasks\main.yml, and do the same for handlers
if you have any files or templates copy them in files or templates folder
Now cd into playbooks folder and create one more folder called as environments
playbooks
roles
environments
DEV (file)
TEST (file)
UAT (file)
myplaybook.yml
Edit myplaybook.yml file with
---
- hosts: webservers
become: yes
roles:
- role: lamp
To create DEV Environment execute
ansible-playbook -i environments/DEV myplaybook.yml
Like this: Like Loading...