Ansible modules are the small programs which will execute in remote systems through ssh protocol. The library of modules resides in any machines which is called by the playbooks on timely manner and executes it. I will introduce some common modules which is used in ansible and its working examples ..
1. The setup module
This module is used to pullout configuration details of remote machines which is called as facts.Let's create a temp inventory file called inventory.1
[unixchips@unixchips-server ~]$ cat inventory.1
unixchips
use the below command to collect all the details from the remote host
[unixchips@unixchips-server ~]$ ansible -m setup -i inventory.1 all
[DEPRECATION WARNING]: Distribution Ubuntu 16.04 on host unixchips should use
/usr/bin/python3, but is using /usr/bin/python for backward compatibility with
prior Ansible releases. A future Ansible release will default to using the
discovered platform python for this host. See https://docs.ansible.com/ansible/
2.8/reference_appendices/interpreter_discovery.html for more information. This
feature will be removed in version 2.12. Deprecation warnings can be disabled
by setting deprecation_warnings=False in ansible.cfg.
unixchips | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"192.168.56.1",
"192.168.2.16"
],
"ansible_all_ipv6_addresses": [
"fe80::800:27ff:fe00:0",
"fe80::766b:d730:8352:3325"
],
"ansible_apparmor": {
"status": "enabled"
},
"ansible_architecture": "x86_64",
"ansible_bios_date": "01/11/2011",
"ansible_bios_version": "81ET49WW (1.25 )",
"ansible_cmdline": {
"BOOT_IMAGE": "/boot/vmlinuz-4.15.0-50-generic",
"quiet": true,
"ro": true,
"root": "UUID=4f41e130-df1e-4a41-b2ae-2539efa5f605",
"splash": true,
----------------<output omitted>------------------------------------------------------------
Use the below command to use the filter option to filter particular facts. Below command will provide the memory details
[unixchips@unixchips-server ~]$ ansible -m setup -i inventory.1 unixchips -a 'filter=ansible_*_mb'
[DEPRECATION WARNING]: Distribution Ubuntu 16.04 on host unixchips should use /usr/bin/python3, but is using /usr/bin/python for backward
compatibility with prior Ansible releases. A future Ansible release will default to using the discovered platform python for this host. See
https://docs.ansible.com/ansible/2.8/reference_appendices/interpreter_discovery.html for more information. This feature will be removed in
version 2.12. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
unixchips | SUCCESS => {
"ansible_facts": {
"ansible_memfree_mb": 3482,
"ansible_memory_mb": {
"nocache": {
"free": 5136,
"used": 2637
},
"real": {
"free": 3482,
"total": 7773,
"used": 4291
},
"swap": {
"cached": 0,
"free": 7986,
"total": 7986,
"used": 0
}
},
"ansible_memtotal_mb": 7773,
"ansible_swapfree_mb": 7986,
"ansible_swaptotal_mb": 7986,
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
}
Now if we want too get the outputs of the facts in a play book we have use the facts like below . Below ply book will provide the memory details
[unixchips@unixchips-server ~]$ cat os_mem.yml
- name: print out operating system
hosts: all
gather_facts: True
tasks:
- debug: var=ansible_memory_mb
[unixchips@unixchips-server ~]$ ansible-playbook os_mem.yml
[DEPRECATION WARNING]: The TRANSFORM_INVALID_GROUP_CHARS settings is set to allow bad characters in group names by default, this will change,
but still be user configurable on deprecation. This feature will be removed in version 2.10. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
PLAY [print out operating system] *************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************************
ok: [unixchips]
TASK [debug] **********************************************************************************************************************************
ok: [unixchips] => {
"ansible_memory_mb": {
"nocache": {
"free": 4849,
"used": 2924
},
"real": {
"free": 3193,
"total": 7773,
"used": 4580
},
"swap": {
"cached": 0,
"free": 7986,
"total": 7986,
"used": 0
}
}
}
PLAY RECAP ************************************************************************************************************************************
unixchips : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
2.The File module
first let's take the file details using below command
---------------------------------------------------------------------------------
[unixchips@unixchips-server ~]$ ansible unixchips -m file -a 'path=/etc/fstab'
unixchips | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"gid": 0,
"group": "root",
"mode": "0664",
"owner": "root",
"path": "/etc/fstab",
"size": 594,
"state": "file",
"uid": 0
}
create a file using file module
---------------------------------------------------------
[unixchips@unixchips-server ~]$ cat file.yml
- hosts: all
tasks:
- name: Ansible create file if it doesn't exist example
file:
path: "/tmp/devops_server.txt"
state: touch
[unixchips@unixchips-server ~]$ ansible-playbook file.yml
[DEPRECATION WARNING]: The TRANSFORM_INVALID_GROUP_CHARS settings is set to allow bad characters in group names by default, this will change,
but still be user configurable on deprecation. This feature will be removed in version 2.10. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
PLAY [all] ************************************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************************
ok: [unixchips]
TASK [Ansible create file if it doesn't exist example] ****************************************************************************************
changed: [unixchips]
PLAY RECAP ************************************************************************************************************************************
unixchips : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
if we login to the unixchips machine we can see that file is created
unixchips@unixchips:/tmp$ ls -lrt |grep *.txt
-rw-rw-r-- 1 unixchips unixchips 0 Jun 4 13:47 devops_server.txt
-------------------------------------------------------------------------------------
Now let's create a file with owner as root and permission as 777
[unixchips@unixchips-server ~]$ cat file.yml
- hosts: all
become: yes
tasks:
- name: Ansible create file if it doesn't exist example
file:
path: "/tmp/foo.txt"
state: touch
mode: 0777
owner: root
[unixchips@unixchips-server ~]$ ansible-playbook file.yml
PLAY [all] *******************************************************************************************************************************************
TASK [Gathering Facts] *******************************************************************************************************************************
ok: [unixchips]
TASK [Ansible create file if it doesn't exist example] ***********************************************************************************************
changed: [unixchips]
PLAY RECAP *******************************************************************************************************************************************
unixchips : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
if we check the output
unixchips@unixchips:/tmp$ ls -lrt |grep foo
-rwxrwxrwx 1 root root 0 Jun 4 14:16 foo.txt
To create a file using a content we have to use copy module as below
-----------------------------------------------------------------------------------------
[unixchips@unixchips-server ~]$ cat text.yml
- hosts: all
tasks:
- name: Ansible create file with content example
copy:
dest: "/tmp/unixchips.txt"
content: |
welcome to unixchips
To create a file using a content we have to use copy module as below
-----------------------------------------------------------------------------------------
[unixchips@unixchips-server ~]$ cat text.yml
- hosts: all
tasks:
- name: Ansible create file with content example
copy:
dest: "/tmp/unixchips.txt"
content: |
welcome to unixchips
unixchips@unixchips:/tmp$ cat unixchips.txt
welcome to unixchips
*************************************************************************
3. The Pause module
If we are in a situation where certain actions needs to be performed after the inputs from the user we have to pause the playbook execution till that time. The pause module is using for that
[unixchips@unixchips-server ~]$ cat pause.yml
- name: Pause prompt on localhost
hosts: localhost
tasks:
- name: Prompt
pause:
prompt: "Do you want to install mysql (yes/no)?"
[unixchips@unixchips-server ~]$ cat pause.yml
- name: Pause prompt on localhost
hosts: localhost
tasks:
- name: Prompt
pause:
prompt: "Do you want to install mysql (yes/no)?"
output
----------
[unixchips@unixchips-server ~]$ ansible-playbook pause.yml
PLAY [Pause prompt on localhost] **************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************************
ok: [localhost]
TASK [Prompt] *********************************************************************************************************************************
[Prompt]
Do you want to install mysql (yes/no)?:
[ [ok: [localhost]
PLAY RECAP ************************************************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
4. The WaitFor module
The waitfor module is using to check some conditions , for example in below example we will wait the apache2 need to be installed and started to complete the execution
[unixchips@unixchips-server ~]$ cat waitfor.yml
--- # The wait for module
- hosts: all
sudo: yes
gather_facts: no
tasks:
- name: Installing Apache Tomcat
action: apt name=apache2 state=installed
- name: Waiting for the port 80 to listen
wait_for:
port: 80
state: started
[unixchips@unixchips-server ~]$ cat waitfor.yml
--- # The wait for module
- hosts: all
sudo: yes
gather_facts: no
tasks:
- name: Installing Apache Tomcat
action: apt name=apache2 state=installed
- name: Waiting for the port 80 to listen
wait_for:
port: 80
state: started
output
------------
[unixchips@unixchips-server ~]$ ansible-playbook waitfor.yml
[DEPRECATION WARNING]: The TRANSFORM_INVALID_GROUP_CHARS settings is set to allow bad characters in group names by default, this will change,
but still be user configurable on deprecation. This feature will be removed in version 2.10. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and make sure become_method is 'sudo' (default). This feature will be
removed in version 2.9. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
PLAY [all] ************************************************************************************************************************************
TASK [Installing Apache Tomcat] ***************************************************************************************************************
[WARNING]: Could not find aptitude. Using apt-get instead
[DEPRECATION WARNING]: State 'installed' is deprecated. Using state 'present' instead.. This feature will be removed in version 2.9.
Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
[DEPRECATION WARNING]: Distribution Ubuntu 16.04 on host unixchips should use /usr/bin/python3, but is using /usr/bin/python for backward
compatibility with prior Ansible releases. A future Ansible release will default to using the discovered platform python for this host. See
https://docs.ansible.com/ansible/2.8/reference_appendices/interpreter_discovery.html for more information. This feature will be removed in
version 2.12. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
changed: [unixchips]
TASK [Waiting for the port 80 to listen] ******************************************************************************************************
ok: [unixchips]
PLAY RECAP ************************************************************************************************************************************
unixchips : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
We can see 2 tasks are get executed succesfully and ansible wait for the port 80 comes up to complete the task
from the client side we can see apache2 is installed and listening to the port
unixchips@unixchips:/tmp$ service apache2 status
● apache2.service - LSB: Apache2 web server
Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since Thu 2019-06-06 00:14:46 IST; 1min 16s ago
Docs: man:systemd-sysv-generator(8)
CGroup: /system.slice/apache2.service
├─15058 /usr/sbin/apache2 -k start
├─15061 /usr/sbin/apache2 -k start
└─15062 /usr/sbin/apache2 -k start
Jun 06 00:14:45 unixchips systemd[1]: Starting LSB: Apache2 web server...
Jun 06 00:14:45 unixchips apache2[15036]: * Starting Apache httpd web server apache2
Jun 06 00:14:45 unixchips apache2[15036]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.
Jun 06 00:14:46 unixchips apache2[15036]: *
Jun 06 00:14:46 unixchips systemd[1]: Started LSB: Apache2 web server.
from the client side we can see apache2 is installed and listening to the port
unixchips@unixchips:/tmp$ service apache2 status
● apache2.service - LSB: Apache2 web server
Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since Thu 2019-06-06 00:14:46 IST; 1min 16s ago
Docs: man:systemd-sysv-generator(8)
CGroup: /system.slice/apache2.service
├─15058 /usr/sbin/apache2 -k start
├─15061 /usr/sbin/apache2 -k start
└─15062 /usr/sbin/apache2 -k start
Jun 06 00:14:45 unixchips systemd[1]: Starting LSB: Apache2 web server...
Jun 06 00:14:45 unixchips apache2[15036]: * Starting Apache httpd web server apache2
Jun 06 00:14:45 unixchips apache2[15036]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.
Jun 06 00:14:46 unixchips apache2[15036]: *
Jun 06 00:14:46 unixchips systemd[1]: Started LSB: Apache2 web server.
***********************************************************
5. The yum module
The yum module can be tested in local host ( ansible server) as the client is in ubuntu . We can install any packages using the yum module and the sample is below
[unixchips@unixchips-server ~]$ cat waitfor.yml
--- # The wait for module
- hosts: localhost
sudo: yes
gather_facts: no
tasks:
- name: Installing Ansible
action: yum name=ansible state=installed
[unixchips@unixchips-server ~]$ ansible-playbook yum.yml
[DEPRECATION WARNING]: The TRANSFORM_INVALID_GROUP_CHARS settings is set to allow bad characters in group names by default, this will change,
but still be user configurable on deprecation. This feature will be removed in version 2.10. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
PLAY [localhost] ******************************************************************************************************************************
TASK [Installing Ansible] *********************************************************************************************************************
ok: [localhost]
PLAY RECAP ************************************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
In the above example as we have already installed the ansible the task will be executed succesfully without any changes. If we want to update any packagesusing yum module instead of state installed we need to give as latest. It will search in the repository and update to the latest version
6. The shell module
If we need to execute multiple commands in a remote machine we can use the shell module. For example if we want to create multiple files in the client machine use the shell module as below
[unixchips@unixchips-server ~]$ cat shell.yml
- hosts: all
sudo: yes
tasks:
- name: Ansible shell module multiple commands
shell: "touch {{ item }} "
with_items:
- hello.txt
- hello2.txt
- hello3.txt
args:
chdir: /tmp
[unixchips@unixchips-server ~]$ cat shell.yml
- hosts: all
sudo: yes
tasks:
- name: Ansible shell module multiple commands
shell: "touch {{ item }} "
with_items:
- hello.txt
- hello2.txt
- hello3.txt
args:
chdir: /tmp
[unixchips@unixchips-server ~]$ ansible-playbook shell.yml
PLAY [all] ************************************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************************
ok: [unixchips]
TASK [Ansible shell module multiple commands] *************************************************************************************************
changed: [unixchips] => (item=hello.txt)
changed: [unixchips] => (item=hello2.txt)
changed: [unixchips] => (item=hello3.txt)
[WARNING]: Consider using the file module with state=touch rather than running 'touch'. If you need to use command because file is
insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message.
This module can be useful if we need to execute multiple commands in remote machine. For example
[unixchips@unixchips-server ~]$ cat shell_new.yml
- hosts: all
sudo: yes
tasks:
- name: Ansible shell module multiple commands
shell: |
ls -lrt
touch "ubuntu.txt"
args:
chdir: /tmp
register: SEQOUT
- debug: msg={{SEQOUT.stdout_lines}}
[unixchips@unixchips-server ~]$ ansible-playbook shell_new.yml
PLAY [all] ************************************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************************
ok: [unixchips]
TASK [Ansible shell module multiple commands] *************************************************************************************************
changed: [unixchips]
TASK [debug] **********************************************************************************************************************************
ok: [unixchips] => {
"msg": [
"total 24",
"drwx------ 3 root root 4096 Jun 5 11:38 systemd-private-7ccc3280b7b2446c8f016430e315661d-systemd-timesyncd.service-vM8Mv4",
"drwx------ 3 root root 4096 Jun 5 11:38 systemd-private-7ccc3280b7b2446c8f016430e315661d-rtkit-daemon.service-t32t2T",
"-rw------- 1 unixchips unixchips 0 Jun 5 11:46 config-err-q2fjTB",
"-rw-rw-r-- 1 unixchips unixchips 0 Jun 5 11:46 unity_support_test.0",
"drwx------ 3 root root 4096 Jun 5 11:46 systemd-private-7ccc3280b7b2446c8f016430e315661d-colord.service-YGKa2X",
"-rw-rw-r-- 1 unixchips unixchips 22 Jun 5 13:09 unixchips.txt",
"drwx------ 2 unixchips unixchips 4096 Jun 6 06:55 gnome-software-GHVV2Z",
"-rw-r--r-- 1 root root 0 Jun 6 13:11 hello.txt",
"-rw-r--r-- 1 root root 0 Jun 6 13:11 hello2.txt",
"-rw-r--r-- 1 root root 0 Jun 6 13:11 hello3.txt",
"drwx------ 2 root root 4096 Jun 6 13:58 ansible_command_payload_jmXznO"
]
}
PLAY RECAP ************************************************************************************************************************************
unixchips : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
7. The command module
command module can also be used to execute system commands, but we cannot execute multiple commands using this. For example if we want to check the uptime of the unixchips node
[unixchips@unixchips-server ~]$ cat command.yml
- hosts: all
sudo: yes
tasks:
- name: Ansible shell module multiple commands
command: "uptime"
register: SEQOUT
- debug: msg={{SEQOUT.stdout_lines}}
[unixchips@unixchips-server ~]$ ansible-playbook command.yml
PLAY [all] ************************************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************************
ok: [unixchips]
TASK [Ansible shell module multiple commands] *************************************************************************************************
changed: [unixchips]
TASK [debug] **********************************************************************************************************************************
ok: [unixchips] => {
"msg": [
" 23:59:57 up 5 min, 2 users, load average: 0.70, 1.38, 0.76"
]
}
PLAY RECAP ************************************************************************************************************************************
unixchips : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
8. The user module
This module is used to create , delete users and also add/remove the users from the groups . For example , we can create the user using below playbook .
first we have to add the password in md5 format in the playbook, let's generate the password in encrypted format
[unixchips@unixchips-server ~]$ openssl passwd -1
Password:
Verifying - Password:
$1$C7ScacjV$xEeePriRC74kJlGdnT1jm.
first we have to add the password in md5 format in the playbook, let's generate the password in encrypted format
[unixchips@unixchips-server ~]$ openssl passwd -1
Password:
Verifying - Password:
$1$C7ScacjV$xEeePriRC74kJlGdnT1jm.
Let's add the user first
[unixchips@unixchips-server ~]$ cat useradd.yml
- hosts: all
sudo: yes
tasks:
- name: Ansible create user example.
user:
name: ansibletest
password: $1$C7ScacjV$xEeePriRC74kJlGdnT1jm.
[unixchips@unixchips-server ~]$ ansible-playbook useradd.yml
PLAY [all] ************************************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************************
ok: [unixchips]
TASK [Ansible create user example.] ***********************************************************************************************************
changed: [unixchips]
PLAY RECAP ************************************************************************************************************************************
unixchips : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Now if we check the unixchips host we can see that the mentoned user is added
root@unixchips:~# cat /etc/shadow | grep ansible
ansibletest:$1$C7ScacjV$xEeePriRC74kJlGdnT1jm.:18053:0:99999:7:::
-------------------------------------------------------------------------------------------
Let's add a user to an existing group as below
[unixchips@unixchips-server ~]$ cat usrgrp.yml
- hosts: all
sudo: yes
tasks:
- name: Ansible create user example.
user:
name: ansibletest
groups: testgroup
[unixchips@unixchips-server ~]$ ansible-playbook usrgrp.yml
PLAY [all] ************************************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************************
ok: [unixchips]
TASK [Ansible create user example.] ***********************************************************************************************************
changed: [unixchips]
PLAY RECAP ************************************************************************************************************************************
unixchips : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
output
root@unixchips:~# groups ansibletest
ansibletest : ansibletest testgroup
Add a user to multiple groups
------------------------------------
Ok let's add the ansible test user to 2 more groups called aws and azure as below
[unixchips@unixchips-server ~]$ cat append.yml
- hosts: all
sudo: yes
tasks:
- name: Ansible create user example.
user:
name: ansibletest
groups: aws, azure
append: yes
[unixchips@unixchips-server ~]$ ansible-playbook append.yml
PLAY [all] ************************************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************************
ok: [unixchips]
TASK [Ansible create user example.] ***********************************************************************************************************
changed: [unixchips]
PLAY RECAP ************************************************************************************************************************************
unixchips : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
root@unixchips:~# groups ansibletest
ansibletest : ansibletest testgroup aws azure
Now deleting the user
[unixchips@unixchips-server ~]$ cat userdel.yml
- hosts: all
sudo: yes
tasks:
- name: Ansible create user example.
user:
name: ansibletest
state: absent
[unixchips@unixchips-server ~]$ ansible-playbook userdel.yml
PLAY [all] ************************************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************************
ok: [unixchips]
TASK [Ansible create user example.] ***********************************************************************************************************
changed: [unixchips]
PLAY RECAP ************************************************************************************************************************************
unixchips : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
output
root@unixchips:~# id ansibletest
id: ‘ansibletest’: no such user
9.The file system & mount module
This module is used to format the file system and mount it to the required mount point using the playbooks
First i have created the disk as normal way
Device Boot Start End Blocks Id System
/dev/sdb1 2048 2596473 1297213 83 Linux
now let's create a playbook to format the file system as ext3
[root@unixchips-server ~]# cat filesystem.yml
--- #file system module example
- hosts: localhost
sudo: yes
gather_facts: no
tasks:
- name: format the disk
filesystem: fstype=ext4 dev=/dev/sdb1 opts="-cc"
[root@unixchips-server ~]# ansible-playbook filesystem.yml
PLAY [localhost] ***************************************************************
TASK [format the disk] *********************************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
we can check the status by manually mounting the file system to a directory.
Now let's mount it to the mount point using the mount module
[unixchips@unixchips-server ~]$ cat mount.yml
--- #file system module example
- hosts: localhost
sudo: yes
gather_facts: no
tasks:
- name: mount the file system
mount: name=/tmp/test src=/dev/sdb1 fstype=ext4 opts=rw state=present
[unixchips@unixchips-server ~]$ ansible-playbook mount.yml
PLAY [localhost] ******************************************************************************************************************************
TASK [mount the file system] ******************************************************************************************************************
changed: [localhost]
PLAY RECAP ************************************************************************************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
if we check the /etc/fstab the entry is added automatically
[unixchips@unixchips-server ~]$ cat /etc/fstab |grep /dev/sdb
/dev/sdb1 /tmp/test ext4 rw 0 0
we can see the file system is mounted succesfully
[unixchips@unixchips-server ~]$ mount |grep /dev/sdb
/dev/sdb1 on /tmp/test type ext4 (rw,relatime,seclabel,data=ordered)
Let's create a jinja temple as beow inside the file directory of ansible server
[root@unixchips-server files]# cat test.conf.j2
# configuration file for testing
<connectivity>
connection type {{ connectionType }}
</connectivity>
<accountInfo>
username {{ username }}
password {{ password }}
</accountInfo>
<system_info>
DistributionType {{ ansible_os_family }}
</DistributionType>
if we check the test.conf in both the nodes we can see the output as below
in localhost ( ansible-server)
------------------------------------------------
[unixchips@unixchips-server ~]$ cat test.conf
# configuration file for testing
<connectivity>
connection type ssh
</connectivity>
<accountInfo>
username unixchips
password Onm0bile
</accountInfo>
<system_info>
DistributionType RedHat
</DistributionType>
10 The temple module
The temple module is used when we need to copy any configuration files with in the nodes where any of the variables need to be changed automatically according the node details . We are using a temple called jinja2 temple with an extension of j2.Let's create a jinja temple as beow inside the file directory of ansible server
[root@unixchips-server files]# cat test.conf.j2
# configuration file for testing
<connectivity>
connection type {{ connectionType }}
</connectivity>
<accountInfo>
username {{ username }}
password {{ password }}
</accountInfo>
<system_info>
DistributionType {{ ansible_os_family }}
</DistributionType>
Now we will call this jinja temple inside the playbook using temple module . Lets create the playbook as below
[unixchips@unixchips-server ~]$ cat templete.yml
--- # Testing the J2 templete module
- hosts: localhost,ansible-test
sudo: yes
gather_facts: yes
vars:
username: unixchips
password: Onm0bile
connectionType: ssh
tasks:
- name: install the test config file
template: src=/etc/ansible/files/test.conf.j2 dest=/home/unixchips/test.conf owner=unixchips group=unixchips
[unixchips@unixchips-server ~]$ ansible-playbook templete.yml
PLAY [localhost,ansible-test] *****************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************************
ok: [localhost]
ok: [unixchips]
TASK [install the test config file] ***********************************************************************************************************
changed: [localhost]
changed: [unixchips]
PLAY RECAP ************************************************************************************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
unixchips : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
in localhost ( ansible-server)
------------------------------------------------
[unixchips@unixchips-server ~]$ cat test.conf
# configuration file for testing
<connectivity>
connection type ssh
</connectivity>
<accountInfo>
username unixchips
password Onm0bile
</accountInfo>
<system_info>
DistributionType RedHat
</DistributionType>
in client ( unixchips)
-----------------------------------------
unixchips@unixchips:~$ cat test.conf
# configuration file for testing
<connectivity>
connection type ssh
</connectivity>
<accountInfo>
username unixchips
password Onm0bile
</accountInfo>
<system_info>
DistributionType Debian
</DistributionType>
We have many more modules which can be useful along with ansible for system operations and i will discus that in another part
Thank you for reading
No comments:
Post a Comment