Essentially, I want to do something like:
['hello', 'apple', 'rare', 'trim', 'three'] | select(match('.*a[rp].*'))
Which would yield:
['apple', 'rare']
The match
filter and select
filter. My issue arises from the fact that the select filter only supports unary "tests".
I'm on Ansible 1.9.x.
...is closer to:
lookup('dig', ip_address, qtype="PTR", wantList=True) | select(match("mx\\..*\\.example\\.com"))
So, I want to get all the PTR records associated with an IP and then filter out all the ones that don't fit a given regex. I'd also want to ensure that there's only one element in the resulting list, and output that element, but that's a different concern.
I found the following trick if you want to filter a list in Ansible (get the list with null values and make difference with null list) :
---
- hosts: localhost
connection: local
vars:
regexp: '.*a[rp].*'
empty: [null]
tasks:
- set_fact: matches="{{ ['hello', 'apple', 'rare', 'trim', 'three'] | map('regex_search',regexp) | list|difference(empty) }}"
- debug: msg="{{ matches }}"
Here is the output :
ok: [localhost] => {
"msg": [
"apple",
"rare"
]
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With