diff --git a/plugins/lookup/nb_lookup.py b/plugins/lookup/nb_lookup.py index 4a9cb23bb..f79e3d828 100644 --- a/plugins/lookup/nb_lookup.py +++ b/plugins/lookup/nb_lookup.py @@ -330,6 +330,20 @@ def run(self, terms, variables=None, **kwargs): if netbox_api_filter: filter = build_filters(netbox_api_filter) + if "id" in filter: + Display().vvvv( + u"Filter is: %s and includes id, will use .get instead of .filter" + % (filter) + ) + try: + id = int(filter["id"][0]) + nb_data = endpoint.get(id) + data = dict(nb_data) + Display().vvvvv(pformat(data)) + return [data] + except pynetbox.RequestError as e: + raise AnsibleError(e.error) + Display().vvvv("filter is %s" % filter) # Make call to NetBox API and capture any failures @@ -338,13 +352,14 @@ def run(self, terms, variables=None, **kwargs): ) for data in nb_data: - Display().vvvvv(pformat(dict(data))) + data = dict(data) + Display().vvvvv(pformat(data)) if netbox_raw_return: - results.append(dict(data)) + results.append(data) else: - key = dict(data)["id"] - result = {key: dict(data)} + key = data["id"] + result = {key: data} results.extend(self._flatten_hash_to_list(result)) return results diff --git a/tests/integration/targets/latest/tasks/netbox_lookup.yml b/tests/integration/targets/latest/tasks/netbox_lookup.yml index e4f7c5589..3217f1c7b 100644 --- a/tests/integration/targets/latest/tasks/netbox_lookup.yml +++ b/tests/integration/targets/latest/tasks/netbox_lookup.yml @@ -75,3 +75,8 @@ - "'L2' in {{ query_result |json_query('[*].display_name') }}" vars: 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) }}" + +- name: "NETBOX_LOOKUP 10: Device query by ID" + assert: + that: + - "{{ query('netbox.netbox.nb_lookup', 'devices', api_filter='id=1', api_endpoint='http://localhost:32768', token='0123456789abcdef0123456789abcdef01234567') }}" diff --git a/tests/integration/targets/v2.8/tasks/netbox_lookup.yml b/tests/integration/targets/v2.8/tasks/netbox_lookup.yml index e4f7c5589..3217f1c7b 100644 --- a/tests/integration/targets/v2.8/tasks/netbox_lookup.yml +++ b/tests/integration/targets/v2.8/tasks/netbox_lookup.yml @@ -75,3 +75,8 @@ - "'L2' in {{ query_result |json_query('[*].display_name') }}" vars: 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) }}" + +- name: "NETBOX_LOOKUP 10: Device query by ID" + assert: + that: + - "{{ query('netbox.netbox.nb_lookup', 'devices', api_filter='id=1', api_endpoint='http://localhost:32768', token='0123456789abcdef0123456789abcdef01234567') }}"