排序ansible输出

时间:2020-09-07 12:00:10

标签: sed ansible

下面是我的烦人的任务输出。

TASK [debug]     **************************************************************************************************** **************************************
ok: [server01] => {
    "my_updates.stdout_lines": [
        "",
        "",
        "Title : Definition Update for Windows Defender Antivirus - KB2267602 (Definition 1.297.486.0)",
        "",
        "",
        ""
    ]
}
ok: [server02] => {
    "my_updates.stdout_lines": [
        "",
        "",
        "Title : 2020-08 Cumulative Update for Windows Server 2016 for x64-based Systems",
        "",
        "",
        ""
    ]
}

我只想要条目

Definition Update for Windows Defender Antivirus - KB2267602 (Definition 1.297.486.0)
2020-08 Cumulative Update for Windows Server 2016 for x64-based Systems

所以我尝试了以下方法,

   - name: Fetch Update List
     shell: echo {{ my_updates.stdout_lines }} | tr -s '  ' | sed 's/[][]//g' | sed 's/u,//g' | sed 's/u //g' | sed 's/  u//g' | sed 's/),/)/g'
     delegate_to: 127.0.0.1
     register: my_sec_result
     when: ansible_os_family == "Windows" and my_updates.stdout_lines | length |int   > 0

   - debug:
      var: my_sec_result.stdout_lines

但这无济于事,它给了我下面的输出

TASK [debug] ******************************************************************************************************************************************
ok: [server01] => {
    "my_sec_result.stdout_lines": [
        "Title : Definition Update for Windows Defender Antivirus - KB2267602 (Definition 1.297.486.0) "
    ]
}
ok: [server02] => {
    "my_sec_result.stdout_lines": [
        "Title : 2020-08 Cumulative Update for Windows Server 2016 for x64-based Systems "
    ]
}

如何仅获取这些条目,目前在每个服务器上每个仅找到一个条目。可以有多个条目。

Definition Update for Windows Defender Antivirus - KB2267602 (Definition 1.297.486.0)
2020-08 Cumulative Update for Windows Server 2016 for x64-based Systems

1 个答案:

答案 0 :(得分:2)

在初始列表中,拒绝为空字符串的行,然后使用regexp_replace过滤器删除开头的“ Title:”。以下任务将全部完成:

- name: Display updates
      debug:
        msg: "{{ my_updates.stdout_lines | reject('eq', '') | map('regex_replace', 'Title : (.*)', '\\g<1>') | list }}"

更新:如@Vladimir所指出的,在这种情况下,您可以将reject替换为select以获得更干净的模板字符串:

  - name: Display updates
      debug:
        msg: "{{ my_updates.stdout_lines | select() | map('regex_replace', 'Title : (.*)', '\\g<1>') | list }}"
相关问题