【发布时间】:2018-01-05 17:09:41
【问题描述】:
我尝试使用 Ansible regex_replace 从状态消息中过滤子字符串“application_1514971620021_4505”。 在 shell 中,消息如下所示:
我在 Ansible 中运行这段代码:
---
- hosts: [npif]
remote_user: root
tasks:
- block:
- name: Admin submit check
command: chdir=/usr/spring-xd-1.3.1.RELEASE-yarn/ bin/xd-yarn submitted
register: admininfo
- debug: msg="{{ admininfo.stdout }}"
- debug: msg="{{ admininfo.stdout | regex_replace('^.*(application\_\d.*\_\d*)\s.*', '\\1') }}"
become: yes
become_user: ingestdev
debug: msg="{{ admininfo.stdout }}" 以不同于 shell 的格式返回状态消息:
ok: [npif] => {
"msg": " APPLICATION ID USER NAME QUEUE TYPE STARTTIME FINISHTIME STATE FINALSTATUS ORIGINAL TRACKING URL\n ------------------------------ --------- --------- -------- ---- -------------- ---------- ------- ----------- ------------------------\n application_1514971620021_4505 ingestdev spring-xd batch_cb XD 1/3/18 2:49 PM N/A RUNNING UNDEFINED http://x.x.x.x:9394"
}
当我使用 regex_replace 运行第二个调试时,我得到与第一个调试输出相同的输出 - 没有应用 regex_replace 过滤器。正则表达式过滤器是正确的 - 我已经在外部对其进行了测试。基本上 Ansible 代码也可以正常工作 - 我已经用下面的行进行了测试,并按预期得到了“测试”。
- debug: msg="{{ 'test.home.com' | regex_replace('^([^.]*).*', '\\1') }}"
你有什么想法,我的方法有什么问题?
【问题讨论】:
-
^([^.]*).*作用于什么字符串?如果没有.,它将删除该行。如果总是有一个.,最好用这个\..*替换。 -
您提到的字符串仅用于测试 - 看看, regex_replace 工作。我对主代码中正则表达式的问题: regex_replace('^.*(application_\d.*_\d*)\s.*' - 它是正确的,但不适用于 Ansible
-
您遇到的具体问题是什么?
-
问题中有很好的描述。
-
请不要张贴图片的文字。只需发布文本本身。如果有人想在回答问题时进行测试,这将使其更易于阅读、更易于搜索并且更易于复制和粘贴。