Ansible regex_search stdout不工作,但在regex101.com工作 &g



我已经在这里阅读了上千个关于Ansible regex_search的问题,但没有找到一个令人满意的答案。

这是测试剧本。backup_stdout的设置与我从备份实用程序中获得的设置相同:

---
- hosts: localhost
connection: local
gather_facts: no
vars:
backup_stdout: |-
Saving active configuration...
/var/local/ucs/f5-apm-1625-081021.ucs is saved.
tasks:
- name: Get the backup name
ansible.builtin.set_fact:
backup_name: "{{ backup_stdout | regex_search(stdout_regex, multiline=True) }}"
vars:
stdout_regex: '"/var.*ucsb"gm'
failed_when: backup_name == ''
- debug:
var: backup_name

我不能让regex_search产生匹配。下面是regex101上的相同代码,这表明它确实匹配。我尝试了以下方法:

  • 带/不带multiline
  • 表达式
  • 中带/不带末尾的'\1'
  • 有/没有传递结果给| first过滤器
  • 使用^/var.*ucs代替单词边界(也匹配regex101)

到目前为止,无论我怎么努力,我都无法让Ansible匹配。谢谢你的帮助。

你的正则表达式中有一些奇怪的引号导致了问题。因为你写了:

stdout_regex: '"/var.*ucsb"gm'

将文字值"/var.*ucsb"gm传递给regex_search。在backup_stdout的内容中没有引号(也没有gm),所以这永远不会匹配。

我想你要:

- hosts: localhost
connection: local
gather_facts: no
vars:
backup_stdout: |-
Saving active configuration...
/var/local/ucs/f5-apm-1625-081021.ucs is saved.
tasks:
- name: Get the backup name
ansible.builtin.set_fact:
backup_name: "{{ backup_stdout | regex_search(stdout_regex, multiline=True) }}"
vars:
stdout_regex: '/var.*ucsb'
failed_when: backup_name == ''
- debug:
var: backup_name

生产:

TASK [debug] *******************************************************************
ok: [localhost] => {
"backup_name": "/var/local/ucs/f5-apm-1625-081021.ucs"
}

最新更新