Last Updated on February 18, 2023 by cscontents
Introduction
Ansible is a very powerful automation tool. It is written in Python language. It has plenty of modules which we can use to automate many task like software installation, configuration etc. You can go through below article for complete high level information about ansible.
Introduction to Ansible | High Level Understanding of Ansible
If you want to learn Ansible basics then please check out the below course from KodeKloud which offers one of the best learning material in DevOps world.
Link of Training Course: Ansible for absolute beginners
Note: The above links are affiliate links, if you enroll this course using the above link, then it would help us to get some monetary benefit from KodeKloud. It won’t cost you anything.
In this article we will share some issue/error which we faced while using Ansible for automation.
Error/Issue faced with get_url module of ansible and its solution
Using get_url module, it tries to download the file at first in /tmp directory. Here by default, it chooses the /tmp directory.
Error Message:
“msg”: “failed to create temporary content file: [Errno 28] No space left on device”
Ansible Version:
For ansible version 2.5 & greater this error is noticed.
For example, you mentioned a directory in the playbook where you have enough space to download the file, but it won’t download it if you don’t have enough space in /tmp
directory (by default).
Let say, your file size is 4 GB, and you have 2 GB left in /tmp directory, in that case below ansible task will throw error.
- name: Download file get_url: url: download_url url_username: user url_password: password dest: /disk1/test-dir/file.zip
Solution:
If we see the official documentation of Ansible, it is mentioned we need to mention another parameter which is tmp_dest
if we want to change the default directory which is /tmp
.
Link of documentation: https://docs.ansible.com/ansible/latest/collections/ansible/builtin/get_url_module.html#parameter-tmp_dest
Below is one such example where we have used tmp_dest parameter to avoid the above issue.
- name: Download file get_url: url: download_url url_username: user url_password: password tmp_dest: /disk1/test-dir dest: /disk1/test-dir/file.zip
In the above task, we kept tmp_dest
& dest
same directory. You can mention any other directory where you have enough space.
Error/Issue faced with unarchive module of ansible and its solution
The issue we faced with unarchive module is below –
We had a 4 GB zip file, and we wanted to unzip it using unarchive module of Ansible, but it was not able to unzip it.
Error message:
Command \”/usr/bin/unzip\” could not handle archive
Solution:
This issue might not be with Ansible, we tried to manually unzip it using unzip command, but it was throwing “zip bomb” error.
Finally, we were able to unzip it using the below command.
jar -xf test_file.zip
To use jar, we need to install Java on the target/remote machine where ansible will execute the task. If above command throws an error like “jar not found”, then you need to provide the full path of jar from JAVA_HOME/bin
directory. Below is the command.
/opt/jdk-18.0.2.1/bin/jar -xf test_file.zip
Where, JAVA_HOME=/opt/jdk-18.0.2.1
Accordingly, we adopted it in Ansible. For this we used “shell” module of ansible. Below is the ansible task.
- name: unzip test_file.zip shell: chdir: /disk1/test-dir cmd: /opt/jdk-18.0.2.1/bin/jar -xf test_file.zip
Thank You
If you are interested in learning DevOps, please have a look at the below articles, which will help you greatly.
- Kubernetes Series: Part 1 – Introduction to Kubernetes | Background of Kubernetes
- Kubernetes Series: Part 2 – Components of Kubernetes cluster | Kubernetes cluster in detail
- Kubernetes Series: Part 3 – What is Minikube and How to create a Kubernetes cluster (on Linux) using Minikube?
- Introduction to Ansible | High Level Understanding of Ansible
- Basics of automation using Ansible | Automate any task
- Automation of Java installation – using Ansible
- Automation of JBoss EAP installation – using ansible
- Jenkins Pipeline as code – High level information
- Jenkins pipeline script to build Java application and push artifacts into repository
- Jenkins pipeline script to build & deploy application on web server
- Jenkins pipeline code to build & deploy application in Kubernetes
- What is End-to-End Monitoring of any web application, and Why do we need it?
- What is “Monitoring” in DevOps? Why do we need to Monitor App/DB servers, Transactions etc.?
- How To Be A Good DevOps Engineer?
- How to do git push, git pull, git add, git commit etc. with Bitbucket