Introduction

Welcome to another episode of Ansible Pilot! I'm Luca Berton, and today we'll delve into Ansible troubleshooting, focusing on the "Destination does not exist" error with return code 257. This error typically occurs when attempting to edit a file that doesn't exist on the target file system. We'll explore the root causes and Playbooknstrate how to resolve this issue using the Ansible lineinfile module.

Understanding the Error

The fatal error message "Destination does not exist" with return code 257 arises when Ansible attempts to modify a file that is either misspelled or entirely absent on the target system. This error is commonly encountered while configuring SSH settings, particularly when enabling PasswordAuthentication.

I'm Luca Berton, and let's dive into today's Ansible troubleshooting session.

Demo

To illustrate the troubleshooting process, we'll jump into a live Playbook. In this scenario, we'll attempt to edit a configuration file, /etc/ssh/sshd_config2, which is misspelled on our target system.

Error Code

Let's examine the Ansible playbook (destinationdoesnotexist_257_error.yml) triggering the error:

``yaml

---

  • name: PasswordAuthentication enabled

hosts: all

become: true

gather_facts: false

tasks:

- name: ssh PasswordAuthentication

ansible.builtin.lineinfile:

dest: /etc/ssh/sshd_config2

regexp: '^PasswordAuthentication'

line: "PasswordAuthentication yes"

state: present

notify: ssh restart

handlers:

- name: ssh restart

ansible.builtin.service:

name: sshd

state: restarted

`

Upon execution, the playbook results in a fatal error with return code 257:

`bash

$ ansible-playbook -i virtualmachines/demo/inventory troubleshooting/destinationdoesnotexist_257_error.yml

PLAY [PasswordAuthentication enabled] *

TASK [ssh PasswordAuthentication] *

fatal: [demo.example.com]: FAILED! => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"}, "changed": false, "msg": "Destination /etc/ssh/sshad_config2 does not exist !", "rc": 257}

PLAY RECAP **

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

`

Fix Code

Let's correct the playbook to reference the correct file (/etc/ssh/sshd_config) in the fixed version (destinationdoesnotexist_257_fix.yml):

``yaml

---

  • name: PasswordAuthentication enabled

hosts: all

become: true

gather_facts: false

tasks:

- name: ssh PasswordAuthentication

ansible.builtin.lineinfile:

dest: /etc/ssh/sshd_config

regexp: '^PasswordAuthentication'

line: "PasswordAuthentication yes"

state: present

notify: ssh restart

handlers:

- nam