下面是我的烦人的任务输出。
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
答案 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 }}"