下面是我试图解析的输出:
hostname#show bgp vrf vrfname summary | i 1.1
BGP Route Distinguisher: 1.1.1.1:0
BGP router identifier 1.1.1.1, local AS number 2222
1.1.1.3 0 64512 349608 316062 896772 0 0 2w4d 1我有下面的正则表达式,它只匹配最后一行。现在,我需要拆分该行并查看最后一个索引。在本例中,它是"1",但如果该值是"0“,我希望失败。
- name: debug test
debug:
msg: "{{show_bgp_sessions.data | regex_findall('\\d+\\.\\d+\\.\\d+\\.\\d+\\s\\s.*')}}"我尝试在"msg“行的末尾添加几种不同格式的拆分,这样就可以在failed_when语句中获取最后一个索引进行比较:
msg: "{{show_bgp_sessions.data | regex_findall('\\d+\\.\\d+\\.\\d+\\.\\d+\\s\\s.*') | split(' ')}}"但是我得到了以下错误消息:
"template error while templating string: no filter named 'split'. String:我还尝试使用几种不同形式的"ends_with“来验证字符串中的最后一个索引,因为我在python经验中经常使用它,但我不能让它在ansible中工作。我不能创建一个新任务来解析数据并单独执行拆分,因为我需要通过循环运行此验证。
发布于 2020-07-15 03:43:13
选择该行时,反转字符串,然后拆分第一个项目。例如
msg: "{{ (my_line|reverse).split()|first }}"发布于 2020-07-15 03:37:35
@Thefourthbird提供的正则表达式可能是更好的解决方案。
但是对于你手头的问题,这是由Jinja中确实没有过滤器split的事实引起的,请参见列表:https://jinja.palletsprojects.com/en/2.11.x/templates/#list-of-builtin-filters。
没有这样的过滤器的原因很简单:split()是Python String的一个函数,因为Jinja是Python,所以您可以直接使用它。
还要记住,由于regex_findall用于多个匹配,因此您必须选择列表的第一个元素,例如,使用过滤器first。
所以你的消息最终是:
msg: "{{ (show_bgp_sessions.data | regex_findall('\\d+\\.\\d+\\.\\d+\\.\\d+\\s\\s.*') | first).split() }}给定攻略:
- hosts: all
gather_facts: no
vars:
show_bgp_sessions:
data: |
hostname#show bgp vrf vrfname summary | i 1.1
BGP Route Distinguisher: 1.1.1.1:0
BGP router identifier 1.1.1.1, local AS number 2222
1.1.1.3 0 64512 349608 316062 896772 0 0 2w4d 1
tasks:
- debug:
msg: "{{ (show_bgp_sessions.data | regex_findall('\\d+\\.\\d+\\.\\d+\\.\\d+\\s\\s.*') | first).split() }}"给出了总结:
PLAY [all] *********************************************************************************************
TASK [debug] *******************************************************************************************
ok: [localhost] => {
"msg": [
"1.1.1.3",
"0",
"64512",
"349608",
"316062",
"896772",
"0",
"0",
"2w4d",
"1"
]
}
PLAY RECAP *********************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 https://stackoverflow.com/questions/62901208
复制相似问题