我正在开发一个用于 ios 闪存文件备份的 Ansible 剧本,它显示了 cisco 路由器的“flash:”,并尝试从多行字符串中选取所有文件名到列表中。稍后它将创建一个具有主机名称的目录并迭代转储每个文件。
---
- name: Backup Flash Files from Cisco Devices
hosts: cisco
gather_facts: no
tasks:
- name: List flash files
ios_command:
commands:
- "show flash:"
register: flash_files
- name: Debug flash files output
debug:
var: flash_files.stdout_lines
- name: Extract file names
set_fact:
files: "{{ flash_files.stdout_lines | select('search', '\\+00:00\\s+.*') | map('regex_replace', '^.*\\+00:00\\s+(.*)$', '\\1') | list }}"
- name: Create directory on local
delegate_to: localhost
ansible.builtin.file:
path: "/ios_backup/{{ inventory_hostname }}"
state: directory
- name: Copy flash files to local
fetch:
src: "flash:{{ item }}"
dest: "/ios_backup/{{ inventory_hostname }}/"
flat: yes
loop: "{{ files }}"
我可以看到
flash_files.stdout_lines
确实包含了我需要的一切,以某种模式
<serial number> <timestamp> 00:00 <filename>
但是,正则表达式仅将最后一个文件名查找到变量
files
。有什么建议可能会出问题吗?
分割线并获取最后一个元素
files: "{{ flash_files.stdout_lines | map('split') | map('last') }}"