Skip to content

Commit d559d1c

Browse files
Bugfix: Lookup - Allow OR operations in api_filters (#250)
1 parent 23f2001 commit d559d1c

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

plugins/lookup/nb_lookup.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
from ansible.errors import AnsibleError
1717
from ansible.plugins.lookup import LookupBase
18-
from ansible.parsing.splitter import parse_kv
18+
from ansible.parsing.splitter import parse_kv, split_args
1919
from ansible.utils.display import Display
2020

2121
import pynetbox
@@ -230,7 +230,16 @@ def run(self, terms, variables=None, **kwargs):
230230
)
231231

232232
if netbox_api_filter:
233-
filter = parse_kv(netbox_api_filter)
233+
args_split = split_args(netbox_api_filter)
234+
args = [parse_kv(x) for x in args_split]
235+
filter = {}
236+
for arg in args:
237+
for k, v in arg.items():
238+
if k not in filter:
239+
filter[k] = list()
240+
filter[k].append(v)
241+
else:
242+
filter[k].append(v)
234243

235244
Display().vvvv("filter is %s" % filter)
236245

tests/integration/targets/latest/tasks/netbox_lookup.yml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
name: "L2"
5151
device_type: "Cisco Test"
5252
device_role: "Core Switch"
53-
site: "Test Site"
53+
site: "Test Site2"
5454
status: "Staged"
5555
tags:
5656
- "lookup"
@@ -67,3 +67,11 @@
6767
that: "{{ query_result|json_query('[?display_name==`L2`]')|count }} == 1"
6868
vars:
6969
query_result: "{{ query('netbox.netbox.nb_lookup', 'devices', api_filter='role=core-switch tag=lookup', api_endpoint='http://localhost:32768', token='0123456789abcdef0123456789abcdef01234567', raw_data=True) }}"
70+
71+
- name: "NETBOX_LOOKUP 9: Device query specifying multiple sites, Make sure L1 and L2 are in the results"
72+
assert:
73+
that:
74+
- "'L1' in {{ query_result |json_query('[*].display_name') }}"
75+
- "'L2' in {{ query_result |json_query('[*].display_name') }}"
76+
vars:
77+
query_result: "{{ query('netbox.netbox.nb_lookup', 'devices', api_filter='role=core-switch site=test-site site=test-site2', api_endpoint='http://localhost:32768', token='0123456789abcdef0123456789abcdef01234567', raw_data=True) }}"

0 commit comments

Comments
 (0)