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.
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.
“msg”: “failed to create temporary content file: [Errno 28] No space left on device”
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
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
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
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.
Command \”/usr/bin/unzip\” could not handle archive
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-220.127.116.11/bin/jar -xf test_file.zip
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.104.22.168/bin/jar -xf test_file.zip
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