Ansible Pilot

Ansible Troubleshooting: Destination Does Not Exist Error

How to reproduce the destination does not exist error in Ansible, troubleshooting, and fix to be able to successfully download a file from an URL in a home directory with your Ansible playbook.

December 1, 2023
Access the Complete Video Course and Learn Quick Ansible by 200+ Practical Lessons

Introduction

Welcome to another episode of Ansible Pilot! I’m Luca Berton, and today we’ll dive into troubleshooting Ansible, specifically focusing on the notorious “destination does not exist error.” This error often occurs when attempting to download a file from a URL using Ansible, and it can be a stumbling block for many users. In this article, I’ll walk you through the error, demonstrate how to reproduce it, and provide a fix to ensure a smooth Ansible playbook execution.

The destination does not exist Error

Let’s start by examining the error through a live demo. Below is a simplified Ansible playbook (destinationdoesnotexist_error.yml) that attempts to download a file using the get_url module:

---
- name: Get_url module demo
  hosts: all
  become: false
  vars:
    myurl: "https://releases.ansible.com/ansible/ansible-2.9.25.tar.gz"
    mycrc: "sha256:https://releases.ansible.com/ansible/ansible-2.9.25.tar.gz.sha"
    mydest: "ansible-2.9.25.tar.gz"
  tasks:
    - name: Download file
      ansible.builtin.get_url:
        url: "{{ myurl }}"
        dest: "{{ mydest }}"
        checksum: "{{ mycrc }}"
        mode: '0644'

Upon execution, you might encounter the following error:

$ ansible-playbook -i inventory destinationdoesnotexist_error.yml

PLAY [Get_url module demo] ******************************************************************

TASK [Gathering Facts] **********************************************************************
ok: [demo.example.com]

TASK [Download file] ************************************************************************
fatal: [demo.example.com]: FAILED! => {"changed": false, "checksum_dest": null, "checksum_src": "574e24659f555fe370571167d3d44704671f1773", "dest": "ansible-2.9.25.tar.gz", "elapsed": 3, "msg": "Destination  does not exist", "src": "/home/devops/.ansible/tmp/ansible-tmp-1640555219.326019-1431-267536126421544/tmpmx_ra0hd", "url": "https://releases.ansible.com/ansible/ansible-2.9.25.tar.gz"}

PLAY RECAP **********************************************************************************
demo.example.com           : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   

The error message clearly indicates that the destination does not exist.

Reproducing and Fixing the Error

Reproducing the Error

To reproduce the error, we can use the provided playbook (destinationdoesnotexist_error.yml). This playbook attempts to download the Ansible archive into the home directory, resulting in the “destination does not exist” error.

The Best Resources For Ansible

Certifications

Video Course

Printed Book

eBooks

Fixing the Error

Let’s address the issue by modifying the playbook. In the fixed version (destinationdoesnotexist_fix.yml), we adjust the destination path to include the current directory:

---
- name: Get_url module demo
  hosts: all
  become: false
  vars:
    myurl: "https://releases.ansible.com/ansible/ansible-2.9.25.tar.gz"
    mycrc: "sha256:https://releases.ansible.com/ansible/ansible-2.9.25.tar.gz.sha"
    mydest: "ansible-2.9.25.tar.gz"
  tasks:
    - name: Download file
      ansible.builtin.get_url:
        url: "{{ myurl }}"
        dest: "./{{ mydest }}"
        checksum: "{{ mycrc }}"
        mode: '0644'

Now, when you execute this playbook, you should observe a successful download without encountering the “destination does not exist” error.

$ ansible-playbook -i inventory destinationdoesnotexist_fix.yml 

PLAY [Get_url module demo] ******************************************************************

TASK [Gathering Facts] **********************************************************************
ok: [demo.example.com]

TASK [download file] ************************************************************************
changed: [demo.example.com]

PLAY RECAP **********************************************************************************
demo.example.com           : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Verification

To confirm the success, log in to the target machine and check if the file has been downloaded to the specified directory:

$ ssh [email protected]
[devops@demo ~]$ ls -al
total 13964
drwx------. 4 devops wheel      140 Dec 26 21:47 .
...
-rw-r--r--. 1 devops wheel 14280306 Dec 26 21:47 ansible-2.9.25.tar.gz

Conclusion

In this article, we explored the Ansible “destination does not exist” error, reproduced it in a live demo, and provided a fix. Now you have the knowledge to troubleshoot and overcome this common issue in your Ansible playbooks. If you found this tutorial helpful, consider subscribing for more Ansible tips and tricks. Happy automating!

Subscribe to the YouTube channel, Medium, and Website, X (formerly Twitter) to not miss the next episode of the Ansible Pilot.

Academy

Learn the Ansible automation technology with some real-life examples in my

My book Ansible By Examples: 200+ Automation Examples For Linux and Windows System Administrator and DevOps

BUY the Complete PDF BOOK to easily Copy and Paste the 250+ Ansible code

Want to keep this project going? Please donate

Access the Complete Video Course and Learn Quick Ansible by 200+ Practical Lessons
Follow me

Subscribe not to miss any new releases