Ansible 正则表达式对于多行字符串无法按预期工作

问题描述 投票:0回答:1

我正在开发一个用于 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
。有什么建议可能会出问题吗?

regex ansible ansible-2.x ansible-template
1个回答
0
投票

分割线并获取最后一个元素

files: "{{ flash_files.stdout_lines | map('split') | map('last') }}"
© www.soinside.com 2019 - 2024. All rights reserved.