netbox.netbox.nb_lookup – Queries and returns elements from NetBox

Note

This plugin is part of the netbox.netbox collection (version 3.4.0).

You might already have this collection installed if you are using the ansible package. It is not included in ansible-core. To check whether it is installed, run ansible-galaxy collection list.

To install it, use: ansible-galaxy collection install netbox.netbox.

To use it in a playbook, specify: netbox.netbox.nb_lookup.

New in version 2.9: of netbox.netbox

Synopsis

  • Queries NetBox via its API to return virtually any information capable of being held in NetBox.

  • If wanting to obtain the plaintext attribute of a secret, private_key or key_file must be provided.

Requirements

The below requirements are needed on the local controller node that executes this lookup.

  • pynetbox

Parameters

Parameter Choices/Defaults Configuration Comments
_terms
string / required
The NetBox object type to query
api_endpoint
string / required
env:NETBOX_API
env:NETBOX_URL
The URL to the NetBox instance to query
api_filter
string
The api_filter to use. Filters should be key value pairs separated by a space.
key_file
string
The location of the private key tied to user account. Mutually exclusive with private_key.
plugin
string
The NetBox plugin to query
private_key
string
The private key as a string. Mutually exclusive with key_file.
raw_data
boolean
    Choices:
  • no
  • yes
Whether to return raw API data with the lookup/query or whether to return a key/value dict
token
string
env:NETBOX_TOKEN
env:NETBOX_API_TOKEN
The API token created through NetBox
This may not be required depending on the NetBox setup.
validate_certs
string
Default:
"yes"
Whether or not to validate SSL of the NetBox instance

Examples

tasks:
  # query a list of devices
  - name: Obtain list of devices from NetBox
    debug:
      msg: >
        "Device {{ item.value.display_name }} (ID: {{ item.key }}) was
         manufactured by {{ item.value.device_type.manufacturer.name }}"
    loop: "{{ query('netbox.netbox.nb_lookup', 'devices',
                    api_endpoint='http://localhost/',
                    token='<redacted>') }}"

# This example uses an API Filter

tasks:
  # query a list of devices
  - name: Obtain list of devices from NetBox
    debug:
      msg: >
        "Device {{ item.value.display_name }} (ID: {{ item.key }}) was
         manufactured by {{ item.value.device_type.manufacturer.name }}"
    loop: "{{ query('netbox.netbox.nb_lookup', 'devices',
                    api_endpoint='http://localhost/',
                    api_filter='role=management tag=Dell'),
                    token='<redacted>') }}"

# Obtain a secret for R1-device
tasks:
  - name: "Obtain secrets for R1-Device"
    debug:
      msg: "{{ query('netbox.netbox.nb_lookup', 'secrets', api_filter='device=R1-Device', api_endpoint='http://localhost/', token='<redacted>', key_file='~/.ssh/id_rsa') }}"

# Fetch bgp sessions for R1-device
tasks:
  - name: "Obtain bgp sessions for R1-Device"
    debug:
      msg: "{{ query('netbox.netbox.nb_lookup', 'bgp_sessions',
                     api_filter='device=R1-Device',
                     api_endpoint='http://localhost/',
                     token='<redacted>',
                     plugin='mycustomstuff') }}"

      msg: "{{ query('netbox.netbox.nb_lookup', 'secrets', api_filter='device=R1-Device', api_endpoint='http://localhost/', token='<redacted>', key_file='~/.ssh/id_rsa') }}"

Return Values

Common return values are documented here, the following are the fields unique to this lookup:

Key Returned Description
_list
list / elements=string
success
list of composed dictionaries with key and value



Authors

  • Chris Mills (@cpmills1975)