Возможно, регулярное выражение, предоставляемое @ Thefourthbird , является лучшим решением.
Но для вашей проблемы это вызвано тем фактом, что действительно нет фильтра split
в Jinja, смотри там список: 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() }}
Учитывая playbook:
- 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