backing up a cisco device using telnet

3,067 views
Skip to first unread message

Daley Okuwa

unread,
Feb 22, 2018, 9:08:11 AM2/22/18
to Ansible Project
Is there any information that allows me to backup a cisco device using telnet rather than ssh as the device do not support SSH

Kai Stian Olstad

unread,
Feb 23, 2018, 9:27:35 AM2/23/18
to ansible...@googlegroups.com
On Thursday, 22 February 2018 15.08.11 CET 'Daley Okuwa' via Ansible Project wrote:
> Is there any information that allows me to backup a cisco device using
> telnet rather than ssh as the device do not support SSH

You need to use the expect module for this.

--
Kai Stian Olstad

Daley Okuwa

unread,
Feb 23, 2018, 11:43:18 AM2/23/18
to Ansible Project
Thanks
Any examples as there is very scanty information on ansible website for this

Daley

Kai Stian Olstad

unread,
Feb 23, 2018, 4:01:32 PM2/23/18
to ansible...@googlegroups.com
On Friday, 23 February 2018 17.43.17 CET 'Daley Okuwa' via Ansible Project wrote:
> Thanks
> Any examples as there is very scanty information on ansible website for this

There are some in the list if you search the archive, one thread is this one
https://groups.google.com/forum/#!msg/ansible-project/iK29xd4QeaE/nNfmvjdOAAAJ


--
Kai Stian Olstad

Claudia de Luna

unread,
Feb 24, 2018, 8:21:32 AM2/24/18
to Ansible Project
Hi,

You can try using the new (as of Ansible 2.4) "preview" telnet  module:

telnet - Executes a low-down and dirty telnet command


Make sure your host file entries resolve in DNS or just use the IP.

Sample host file group:


[cisco]
arctic-sw01 host=10.1.10.100 port=22 username=cisco password=cisco
10.1.10.100 username=cisco password=cisco

Sample Playbook - here I am just getting the show inventory output (because its short) and saving it to a variable called output with is a data structure of all the output.  Then I take the part I want to save, the actual show inventory output and save it to a file called <hostname>.txt in the ./FACTs directory.
You can uncomment the term len 0 and show run commands and do the same.
---
- hosts: cisco 
  connection: local
  gather_facts: False
  ignore_errors: yes

  tasks:
    - name: run show commands via Telnet
      telnet:
        user: "{{ username }}"
        password: "{{ password }}"
        login_prompt: "Username: "
        prompts:
          - "[>|#]"
        command:
          # - terminal length 0
          # - show run
          - show inventory

      register: output

    - debug: var=output

    - local_action: copy content="{{ output.output[0] }}" dest="./FACTs/{{ inventory_hostname }}.txt"



Sample Run:
root@127c868b9dd3:/ansible/ansible2_4_base# ansible-playbook -i hosts ios_telnet.yml

PLAY [cisco] ********************************************************************************************************************************

TASK [run show commands via Telnet] *********************************************************************************************************
changed: [arctic-sw01]
changed: [10.1.10.100]

TASK [debug] ********************************************************************************************************************************
ok: [arctic-sw01] => {
    "output": {
        "changed": true,
        "failed": false,
        "output": [
            "show inventory\r\nNAME: \"arctic-sw01\", DESCR: \"Cisco Catalyst c2940 switch with 8 10/100 BaseTX ports and 1 10/100/1000 BaseT uplink port\"\r\nPID: WS-C2940-8TT-S    , VID: D0 , SN: FHK0834Y19X\r\n\r\n\r\narctic-sw01#"
        ]
    }
}
ok: [10.1.10.100] => {
    "output": {
        "changed": true,
        "failed": false,
        "output": [
            "show inventory\r\nNAME: \"arctic-sw01\", DESCR: \"Cisco Catalyst c2940 switch with 8 10/100 BaseTX ports and 1 10/100/1000 BaseT uplink port\"\r\nPID: WS-C2940-8TT-S    , VID: D0 , SN: FHK0834Y19X\r\n\r\n\r\narctic-sw01#"
        ]
    }
}

TASK [copy] *********************************************************************************************************************************
changed: [arctic-sw01 -> localhost]
changed: [10.1.10.100 -> localhost]

PLAY RECAP **********************************************************************************************************************************
10.1.10.100                : ok=3    changed=2    unreachable=0    failed=0
arctic-sw01                : ok=3    changed=2    unreachable=0    failed=0

root@127c868b9dd3:/ansible/ansible2_4_base# cd facts/
root@127c868b9dd3:/ansible/ansible2_4_base/facts# ls
10.1.10.100.txt  arctic-sw01.txt  nxos-spine1.txt  nxos-spine2.txt
root@127c868b9dd3:/ansible/ansible2_4_base/facts# cat 10.1.10.100.txt
show inventory
NAME: "arctic-sw01", DESCR: "Cisco Catalyst c2940 switch with 8 10/100 BaseTX ports and 1 10/100/1000 BaseT uplink port"
PID: WS-C2940-8TT-S    , VID: D0 , SN: FHK0834Y19X


arctic-sw01#root@127c868b9dd3:/ansible/ansible2_4_base/facts


Hope this helps.

The only other approach I'm aware of is to use the NTC modules which use Napalm and the Cisco IOS modules use Netmiko under the hood which supports Telnet although last I checked I didn't think the Telnet option was exposed.  

Note that the end goal of this module is to telnet to a device to enable SSH but I know that is sometimes not possible. 

Daley Okuwa

unread,
Feb 26, 2018, 9:32:25 AM2/26/18
to Ansible Project
Thanks for your reply 
it was very useful
but I am getting errors

ansible-playbook -i hosts  backup_config-cisco12.yml -vvv
ansible-playbook 2.4.2.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/ansible/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible-playbook
  python version = 2.7.12 (default, Dec  4 2017, 14:50:18) [GCC 5.4.0 20160609]
Using /etc/ansible/ansible.cfg as config file
Parsed /etc/ansible/hosts inventory source with ini plugin
PLAYBOOK: backup_config-cisco12.yml ********************************************
1 plays in backup_config-cisco12.yml
PLAY [cisco] *******************************************************************
META: ran handlers
TASK [run show command via Telnet] *********************************************
task path: /etc/ansible/backup_config-cisco12.yml:8
fatal: [10.101.250.12]: FAILED! => {
    "changed": true,
    "msg": "Telnet action failed: telnet connection closed",
    "output": []
}
...ignoring
TASK [debug] *******************************************************************
task path: /etc/ansible/backup_config-cisco12.yml:22
ok: [10.101.250.12] => {
    "output": {
        "changed": true,
        "failed": true,
        "msg": "Telnet action failed: telnet connection closed",
        "output": []
    }
}
TASK [copy] ********************************************************************
task path: /etc/ansible/backup_config-cisco12.yml:25
fatal: [10.101.250.12]: FAILED! => {
    "msg": "The task includes an option with an undefined variable. The error was: list object has no element 0\n\nThe error appears to have been in '/etc/ansible/backup_config-cisco12.yml': line 25, column 9, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n      - local_action: copy content=\"{{ output.output[0] }}\" dest=\"./etc/ansible/backup{{ inventory_hostname }}.txt\"\n        ^ here\nWe could be wrong, but this one looks like it might be an issue with\nmissing quotes.  Always quote template expression brackets when they\nstart a value. For instance:\n\n    with_items:\n      - {{ foo }}\n\nShould be written as:\n\n    with_items:\n      - \"{{ foo }}\"\n\nexception type: <class 'ansible.errors.AnsibleUndefinedVariable'>\nexception: list object has no element 0"
}
...ignoring
META: ran handlers
META: ran handlers
PLAY RECAP *********************************************************************
10.101.250.12              : ok=3    changed=1    unreachable=0    failed=0

This is the config below


---
- hosts: cisco
  connection: local
  gather_facts: False
  ignore_errors: yes
  tasks:
      - name: run show command via Telnet

        telnet:
          user: "{{  username  }}"
          password: "{{ password }}"
          login_prompt: "Username:  "
          prompts:
            - "[>|#]"
          command:
            # - terminal length 0
            # - show run
            - show inventory
        register: output
      - debug: var=output

      - local_action: copy content="{{ output.output[0] }}" dest="./etc/ansible/backup{{ inventory_hostname }}.txt"

Kai Stian Olstad

unread,
Feb 26, 2018, 10:02:40 AM2/26/18
to ansible...@googlegroups.com
On Monday, 26 February 2018 15.32.25 CET 'Daley Okuwa' via Ansible Project wrote:
> Thanks for your reply
> it was very useful
> but I am getting errors
>
> - local_action: copy content="{{ output.output[0] }}"
> dest="./etc/ansible/backup{{ inventory_hostname }}.txt"

In YAML the rule is if it start with a quote it must end with the same qoute and vice versa.

I recommend using YAML syntax and not Ansible syntax.

- local_action:
module: copy
content: "{{ output.output[0] }}"
dest: "./etc/ansible/backup{{ inventory_hostname }}.txt"

Or use delegate_to: localhost

- copy:
content: "{{ output.output[0] }}"
dest: "./etc/ansible/backup{{ inventory_hostname }}.txt"
delegate_to: localhost


For completenesses to make the Ansible syntax work

- local_action: 'copy content="{{ output.output[0] }}" dest="./etc/ansible/backup{{ inventory_hostname }}.txt"'

I think this also work

- local_action: copy content={{ output.output[0] }} dest=./etc/ansible/backup{{ inventory_hostname }}.txt

--
Kai Stian Olstad

Claudia de Luna

unread,
Feb 26, 2018, 10:18:55 AM2/26/18
to ansible...@googlegroups.com
It also looks like your telnet session is failing.  

One reason for the error below is an incorrect username or password for the device so check your hosts file.

TASK [configure new account via Telnet] ****************************************************************************************************
fatal: [10.1.10.100]: FAILED! => {"changed": true, "failed": true, "msg": "Telnet action failed: telnet connection closed", "output": []}
...ignoring

Finally..make sure the directory you are saving your files to exists so look carefully at your path..did you intend to make that relative to your current working directory (./)?


--
You received this message because you are subscribed to a topic in the Google Groups "Ansible Project" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/ansible-project/jQqwdz51W3c/unsubscribe.
To unsubscribe from this group and all its topics, send an email to ansible-project+unsubscribe@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/1970419.QqvOvDda1f%40x1.
For more options, visit https://groups.google.com/d/optout.

Daley Okuwa

unread,
Feb 26, 2018, 11:02:44 AM2/26/18
to Ansible Project
still having errors 

ERROR! Syntax Error while loading YAML.

The error appears to have been in '/etc/ansible/backup_config-cisco12.yml': line 26, column 1, but may

be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
         module: copy
         content: "{{ output.output[0] }}"
^ here

We could be wrong, but this one looks like it might be an issue with
missing quotes.  Always quote template expression brackets when they
start a value. For instance:
    with_items:
      - {{ foo }}
Should be written as:
    with_items:
      - "{{ foo }}"
exception type: <class 'yaml.parser.ParserError'>
exception: while parsing a block collection
  in "<unicode string>", line 2, column 1
did not find expected '-' indicator
  in "<unicode string>", line 26, column 1

Kai Stian Olstad

unread,
Feb 26, 2018, 11:16:09 AM2/26/18
to ansible...@googlegroups.com
On Monday, 26 February 2018 17.02.44 CET 'Daley Okuwa' via Ansible Project wrote:
> still having errors
>
> ERROR! Syntax Error while loading YAML.

Since you have syntax error you need to show the code.


--
Kai Stian Olstad

Daley Okuwa

unread,
Feb 26, 2018, 12:02:41 PM2/26/18
to Ansible Project
:x

Daley Okuwa

unread,
Feb 26, 2018, 12:03:31 PM2/26/18
to Ansible Project
ansible@ansible-new:/etc/ansible$ vi backup_config-cisco12.yml                    ignore_errors: yes
  tasks:
      - name: run show command via Telnet
        telnet:
          user: "{{  username  }}"
          password: "{{ password }}"
          login_prompt: "Username:  "
          prompts:
            - "[>|#]"
          command:
            # - terminal length 0
            # - show run
            - show inventory
        register: output
      - debug: var=output
       - local_action:
          module: copy
          content: "{{ output.output[0] }}"
          dest: "./etc/ansible/backup{{ inventory_hostname }}.txt"
                                                              27,1   

Kai Stian Olstad

unread,
Feb 26, 2018, 12:13:51 PM2/26/18
to ansible...@googlegroups.com
On Monday, 26 February 2018 18.03.30 CET 'Daley Okuwa' via Ansible Project wrote:
> ansible@ansible-new:/etc/ansible$ vi
> backup_config-cisco12.yml ignore_errors: yes
> tasks:
> - name: run show command via Telnet
> telnet:
> user: "{{ username }}"
> password: "{{ password }}"
> login_prompt: "Username: "
> prompts:
> - "[>|#]"
> command:
> # - terminal length 0
> # - show run
> - show inventory
> register: output
> - debug: var=output
> - local_action:
> module: copy
> content: "{{ output.output[0] }}"
> dest: "./etc/ansible/backup{{ inventory_hostname }}.txt"

The "- local_action" line is indented one space to much.
In YAML indentation is very impotent and it need to be consistent.


--
Kai Stian Olstad

Claudia de Luna

unread,
Feb 26, 2018, 12:18:55 PM2/26/18
to ansible...@googlegroups.com
As Kai Stian Olstad mentioned, spacing is very important.

Use a good text editor to make sure everything lines up.  Below is the playbook using Sublime.  Note the subtle lines to help you make sure everything lines up.



Inline image 1





--
Kai Stian Olstad

--
You received this message because you are subscribed to a topic in the Google Groups "Ansible Project" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/ansible-project/jQqwdz51W3c/unsubscribe.
To unsubscribe from this group and all its topics, send an email to ansible-project+unsubscribe@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.

Daley Okuwa

unread,
Feb 27, 2018, 6:26:50 AM2/27/18
to Ansible Project
Thanks
but still getting errors 

this is my code

---
  hosts: cisco 
  connection: local
  ignore_errors: yes
  tasks:
      - name: run show commands via Telnet

        telnet:
          user: "{{ username }}"
          password: "{{ password }}"
          login_prompt: "Username: "
          prompts:
            - "[>|#]"
          command:
            # - terminal length 0
            # - show run
            - show inventory
        register: output
      - debug: var=output.output
      - local_action: copy content="{{ output.output[0] }}" dest="./etc/ansible/backup/{{ inventory_hostname }}.txt"
and my errors message

ansible@ansible-new:/etc/ansible$ ansible-playbook -i hosts backup-cisconew.yml -vvv
ansible-playbook 2.4.2.0
  config file = /etc/ansible/ansible.cfg

  configured module search path = [u'/home/ansible/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible-playbook
  python version = 2.7.12 (default, Dec  4 2017, 14:50:18) [GCC 5.4.0 20160609]
Using /etc/ansible/ansible.cfg as config file
Parsed /etc/ansible/hosts inventory source with ini plugin
ERROR! Syntax Error while loading YAML.

The error appears to have been in '/etc/ansible/backup-cisconew.yml': line 3, column 1, but may

be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
  hosts: cisco
  connection: local
^ here
exception type: <class 'yaml.parser.ParserError'>
exception: did not find expected <document start>
  in "<unicode string>", line 3, column

and also my hosts file

ansible@ansible-new:/etc/ansible$ more hosts
##[all:vars]
##ansible_python_interpreter=/usr/bin/python
##ansible_connection=local
[local]
#localhost
[cisco]
10.101.250.12 port=22 username=admin password=xxxxxx#
10.101.250.12 username=admin password=xxxxxx#

##[cisco:vars]
##device_type=cisco_ios
##username=ansible
##password=test123
To unsubscribe from this group and all its topics, send an email to ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.

Claudia de Luna

unread,
Feb 27, 2018, 8:42:35 AM2/27/18
to ansible...@googlegroups.com
Hi,

I mentioned this before. Are you certain this is the correct path "./etc...."

This means that relative to where you are running your playbook you nave a directory called etc/ansible/backup/

if you are trying to save your backup files to /etc/ansible/backup (absolute path) then you do not need the ".".

and you must make sure that directory exists.

 local_action: copy content="{{ output.output[0] }}" dest="./etc/ansible/backup/{{ inventory_hostname }}.txt"
To unsubscribe from this group and all its topics, send an email to ansible-project+unsubscribe@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/a54d9b9b-d657-4ee1-9626-ee01419da93a%40googlegroups.com.

Kai Stian Olstad

unread,
Feb 27, 2018, 9:11:28 AM2/27/18
to ansible...@googlegroups.com
On Tuesday, 27 February 2018 12.26.50 CET 'Daley Okuwa' via Ansible Project wrote:
> Thanks
> but still getting errors
>
> this is my code
>
> ---
> hosts: cisco

You are now missing the dash infront of hosts.

I think it's time that you read the documentation and this is a good start
https://docs.ansible.com/ansible/latest/YAMLSyntax.html
https://docs.ansible.com/ansible/latest/playbooks_intro.html

Study the examples and pay attention to indentation, then look at you code and compare them.


> connection: local
> ignore_errors: yes
> tasks:
> - name: run show commands via Telnet
> telnet:
> user: "{{ username }}"
> password: "{{ password }}"
> login_prompt: "Username: "
> prompts:
> - "[>|#]"
> command:
> # - terminal length 0
> # - show run
> - show inventory
> register: output
> - debug: var=output.output
> - local_action: copy content="{{ output.output[0] }}"
> dest="./etc/ansible/backup/{{ inventory_hostname }}.txt"
> and my errors message

And you are back to using code that doesn't work.


--
Kai Stian Olstad

Claudia de Luna

unread,
Feb 27, 2018, 9:14:32 AM2/27/18
to ansible...@googlegroups.com
Also, make sure your playbook is in proper YAML (I suspect your directory does exist as you would get an explicit error for that if it did not)

---
- hosts: cisco 
  connection: local
  gather_facts: False
  ignore_errors: yes
On Tue, Feb 27, 2018 at 5:42 AM, Claudia de Luna <del...@gmail.com> wrote:
Hi,

I mentioned this before. Are you certain this is the correct path "./etc...."

This means that relative to where you are running your playbook you nave a directory called etc/ansible/backup/

if you are trying to save your backup files to /etc/ansible/backup (absolute path) then you do not need the ".".

and you must make sure that directory exists.

 local_action: copy content="{{ output.output[0] }}" dest="./etc/ansible/backup/{{ inventory_hostname }}.txt"

Daley Okuwa

unread,
Feb 27, 2018, 9:23:12 AM2/27/18
to Ansible Project
Thanks

Claudia,

I have removed the . from est="./etc/ansible/backup/{{ inventory_hostname }}.txt" but still having this errors 
it says the hosts I cannot see anything wrong with my hosts or connection 

The error appears to have been in '/etc/ansible/backup-cisconew.yml': line 3, column 1, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
- hosts: cisco
  connection: local
^ here
exception type: <class 'yaml.parser.ParserError'>

exception: while parsing a block collection
  in "<unicode string>", line 2, column 1
did not find expected '-' indicator
  in "<unicode string>", line 3, column

Daley Okuwa

unread,
Feb 27, 2018, 10:36:01 AM2/27/18
to Ansible Project

Thanks

I am also, seeing this on YAML editing file 







On Tuesday, February 27, 2018 at 2:14:32 PM UTC, Claudia de Luna wrote:
Also, make sure your playbook is in proper YAML (I suspect your directory does exist as you would get an explicit error for that if it did not)

---
- hosts: cisco 
  connection: local
  gather_facts: False
  ignore_errors: yes
On Tue, Feb 27, 2018 at 5:42 AM, Claudia de Luna <del...@gmail.com> wrote:
Hi,

I mentioned this before. Are you certain this is the correct path "./etc...."

This means that relative to where you are running your playbook you nave a directory called etc/ansible/backup/

if you are trying to save your backup files to /etc/ansible/backup (absolute path) then you do not need the ".".

and you must make sure that directory exists.

 local_action: copy content="{{ output.output[0] }}" dest="./etc/ansible/backup/{{ inventory_hostname }}.txt"

Claudia de Luna

unread,
Feb 27, 2018, 11:45:55 AM2/27/18
to ansible...@googlegroups.com
excellent..I was going to suggest checking it with YAML Lint!  You addressed the proper YAML syntax for hosts (the dash) and the local_action line works for me in many playbooks but Kia Stian Oldsad is right that spacing is critical.  If you want to attach your playbook I'd be happy to take a look at it.  

To unsubscribe from this group and all its topics, send an email to ansible-project+unsubscribe@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/bf1c18a9-0b41-43af-b6ae-a23060794a37%40googlegroups.com.

Daley Okuwa

unread,
Feb 28, 2018, 12:28:09 PM2/28/18
to Ansible Project
it is me again
I just amended my YAML scripts still having errors I have use lint to check the spacing and indenting and it looks fine

My code 
---
  hosts: cisco
  connection: local
  gather_facts: False

  ignore_errors: yes
  tasks:
- name: run show command via Telnet
  telnet:
    user: "{{  username  }}"
    password: "{{ password }}"
    login_prompt: "Username:  "
    prompts:
      - "[>|#]"
    command:
      # - terminal length 0
      # - show run
     - show inventory
  register: output
- debug: var=output
- local_action: copy content="{{ output.output[0] }}" dest=."/etc/ansible/backup/{{ inventory_hostname }}.txt"

My error message 

ansible@ansible-new:/etc/ansible$ ansible-playbook -i hosts backup-cisconew.yml -vvv
ansible-playbook 2.4.2.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/ansible/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible-playbook
  python version = 2.7.12 (default, Dec  4 2017, 14:50:18) [GCC 5.4.0 20160609]
Using /etc/ansible/ansible.cfg as config file
Parsed /etc/ansible/hosts inventory source with ini plugin
ERROR! Syntax Error while loading YAML.

The error appears to have been in '/etc/ansible/backup-cisconew.yml': line 3, column 1, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
  hosts: cisco
  connection: local
^ here
exception type: <class 'yaml.parser.ParserError'>
exception: did not find expected <document start>
  in "<unicode string>", line 3, column 1

Jonathan Tam

unread,
May 11, 2018, 8:01:28 PM5/11/18
to Ansible Project
maybe you can try ntc-ansible. https://github.com/networktocode/ntc-ansible


On Thursday, February 22, 2018 at 6:08:11 AM UTC-8, Daley Okuwa wrote:

Saurav Gupta

unread,
Feb 28, 2022, 9:47:39 AM2/28/22
to Ansible Project
Hi,

I would like to thank for telnet playbook that you provided. I am able to run show inventory command but for show run command, I am running with term len 0 and it does not store any output from show run.

cat vic-7yar-es-06-18.txt
terminal length 0

below is my playbook- 

- name: show version
  hosts: vic-7yar-es-06-18
  gather_facts: false
  connection: local
  tasks:
    - name: telnet sw
      telnet:
        user: 
        password: 
        login_prompt: "Username: "
        prompts:
          - '[>|#]'
        ios_command:
          - terminal length 0
          - show version


      register: output

    - debug: var=output

    - local_action: copy content="{{ output.output[0] }}" dest="device_backups/{{ inventory_hostname }}.txt"
Reply all
Reply to author
Forward
0 new messages