NetBox Execution Module

NetBox

Module to query NetBox

codeauthor:Zach Moody <zmoody@do.co>
maturity:new
depends:pynetbox

Note

This code, distributed as part of salt-sproxy, has been copied from the main Salt project, maintained by SaltStack, to provide various enhancements and fixes to the original module.

The following config should be in the minion config file. In order to work with secrets you should provide a token and path to your private key file:

netbox:
  url: <NETBOX_URL>
  token: <NETBOX_USERNAME_API_TOKEN (OPTIONAL)>
  keyfile: </PATH/TO/NETBOX/KEY (OPTIONAL)>

New in version 2018.3.0: This module has been introduced in Salt release 2018.3.0.

In salt-sproxy, this module has been included beginning with version 2019.10.0.

_modules.netbox.create_circuit(name, provider_id, circuit_type, description=None)[source]

New in version 2019.2.0.

Create a new Netbox circuit

name
Name of the circuit
provider_id
The netbox id of the circuit provider
circuit_type
The name of the circuit type
asn
The ASN of the circuit provider
description
The description of the circuit

CLI Example:

salt myminion netbox.create_circuit NEW_CIRCUIT_01 Telia Transit 1299 "New Telia circuit"
_modules.netbox.create_circuit_provider(name, asn=None)[source]

New in version 2019.2.0.

Create a new Netbox circuit provider

name
The name of the circuit provider
asn
The ASN of the circuit provider

CLI Example:

salt myminion netbox.create_circuit_provider Telia 1299
_modules.netbox.create_circuit_termination(circuit, interface, device, speed, xconnect_id=None, term_side='A')[source]

New in version 2019.2.0.

Terminate a circuit on an interface

circuit
The name of the circuit
interface
The name of the interface to terminate on
device
The name of the device the interface belongs to
speed
The speed of the circuit, in Kbps
xconnect_id
The cross-connect identifier
term_side
The side of the circuit termination

CLI Example:

salt myminion netbox.create_circuit_termination NEW_CIRCUIT_01 xe-0/0/1 myminion 10000 xconnect_id=XCON01
_modules.netbox.create_circuit_type(name)[source]

New in version 2019.2.0.

Create a new Netbox circuit type.

name
The name of the circuit type

CLI Example:

salt myminion netbox.create_circuit_type Transit
_modules.netbox.create_device(name, role, model, manufacturer, site)[source]

New in version 2019.2.0.

Create a new device with a name, role, model, manufacturer and site. All these components need to be already in Netbox.

name
The name of the device, e.g., edge_router
role
String of device role, e.g., router
model
String of device model, e.g., MX480
manufacturer
String of device manufacturer, e.g., Juniper
site
String of device site, e.g., BRU

CLI Example:

salt myminion netbox.create_device edge_router router MX480 Juniper BRU
_modules.netbox.create_device_role(role, color)[source]

New in version 2019.2.0.

Create a device role

role
String of device role, e.g., router

CLI Example:

salt myminion netbox.create_device_role router
_modules.netbox.create_device_type(model, manufacturer)[source]

New in version 2019.2.0.

Create a device type. If the manufacturer doesn’t exist, create a new manufacturer.

model
String of device model, e.g., MX480
manufacturer
String of device manufacturer, e.g., Juniper

CLI Example:

salt myminion netbox.create_device_type MX480 Juniper
_modules.netbox.create_interface(device_name, interface_name, mac_address=None, description=None, enabled=None, lag=None, lag_parent=None, form_factor=None)[source]

New in version 2019.2.0.

Attach an interface to a device. If not all arguments are provided, they will default to Netbox defaults.

device_name
The name of the device, e.g., edge_router
interface_name
The name of the interface, e.g., TenGigE0/0/0/0
mac_address
String of mac address, e.g., 50:87:89:73:92:C8
description
String of interface description, e.g., NTT
enabled
String of boolean interface status, e.g., True
lag:
Boolean of interface lag status, e.g., True
lag_parent
String of interface lag parent name, e.g., ae13
form_factor
Integer of form factor id, obtained through _choices API endpoint, e.g., 200

CLI Example:

salt myminion netbox.create_interface edge_router ae13 description="Core uplink"
_modules.netbox.create_interface_connection(interface_a, interface_b)[source]

New in version 2019.2.0.

Create an interface connection between 2 interfaces

interface_a
Interface id for Side A
interface_b
Interface id for Side B

CLI Example:

salt myminion netbox.create_interface_connection 123 456
_modules.netbox.create_inventory_item(device_name, item_name, manufacturer_name=None, serial='', part_id='', description='')[source]

New in version 2019.2.0.

Add an inventory item to an existing device.

device_name
The name of the device, e.g., edge_router.
item_name
String of inventory item name, e.g., Transceiver.
manufacturer_name
String of inventory item manufacturer, e.g., Fiberstore.
serial
String of inventory item serial, e.g., FS1238931.
part_id
String of inventory item part id, e.g., 740-01234.
description
String of inventory item description, e.g., SFP+-10G-LR.

CLI Example:

salt myminion netbox.create_inventory_item edge_router Transceiver part_id=740-01234
_modules.netbox.create_ipaddress(ip_address, family, device=None, interface=None)[source]

New in version 2019.2.0.

Add an IP address, and optionally attach it to an interface.

ip_address
The IP address and CIDR, e.g., 192.168.1.1/24
family
Integer of IP family, e.g., 4
device
The name of the device to attach IP to, e.g., edge_router
interface
The name of the interface to attach IP to, e.g., ae13

CLI Example:

salt myminion netbox.create_ipaddress 192.168.1.1/24 4 device=edge_router interface=ae13
_modules.netbox.create_manufacturer(name)[source]

New in version 2019.2.0.

Create a device manufacturer.

name
The name of the manufacturer, e.g., Juniper

CLI Example:

salt myminion netbox.create_manufacturer Juniper
_modules.netbox.create_platform(platform)[source]

New in version 2019.2.0.

Create a new device platform

platform
String of device platform, e.g., junos

CLI Example:

salt myminion netbox.create_platform junos
_modules.netbox.create_site(site)[source]

New in version 2019.2.0.

Create a new device site

site
String of device site, e.g., BRU

CLI Example:

salt myminion netbox.create_site BRU
_modules.netbox.delete_interface(device_name, interface_name)[source]

New in version 2019.2.0.

Delete an interface from a device.

device_name
The name of the device, e.g., edge_router.
interface_name
The name of the interface, e.g., ae13

CLI Example:

salt myminion netbox.delete_interface edge_router ae13
_modules.netbox.delete_inventory_item(item_id)[source]

New in version 2019.2.0.

Remove an item from a devices inventory. Identified by the netbox id

item_id
Integer of item to be deleted

CLI Example:

salt myminion netbox.delete_inventory_item 1354
_modules.netbox.delete_ipaddress(ipaddr_id)[source]

New in version 2019.2.0.

Delete an IP address. IP addresses in Netbox are a combination of address and the interface it is assigned to.

id
The Netbox id for the IP address.

CLI Example:

salt myminion netbox.delete_ipaddress 9002
_modules.netbox.filter_(app, endpoint, **kwargs)[source]

Get a list of items from NetBox.

app
String of netbox app, e.g., dcim, circuits, ipam
endpoint
String of app endpoint, e.g., sites, regions, devices
kwargs
Optional arguments that can be used to filter. All filter keywords are available in Netbox, which can be found by surfing to the corresponding API endpoint, and clicking Filters. e.g., role=router

Returns a list of dictionaries

salt myminion netbox.filter dcim devices status=1 role=router
_modules.netbox.get_(app, endpoint, id=None, **kwargs)[source]

Get a single item from NetBox.

app
String of netbox app, e.g., dcim, circuits, ipam
endpoint
String of app endpoint, e.g., sites, regions, devices

Returns a single dictionary

To get an item based on ID.

salt myminion netbox.get dcim devices id=123

Or using named arguments that correspond with accepted filters on the NetBox endpoint.

salt myminion netbox.get dcim devices name=my-router
_modules.netbox.get_circuit_provider(name, asn=None)[source]

New in version 2019.2.0.

Get a circuit provider with a given name and optional ASN.

name
The name of the circuit provider
asn
The ASN of the circuit provider

CLI Example:

salt myminion netbox.get_circuit_provider Telia 1299
_modules.netbox.get_interfaces(device_name=None, **kwargs)[source]

New in version 2019.2.0.

Returns interfaces for a specific device using arbitrary netbox filters

device_name
The name of the device, e.g., edge_router
kwargs
Optional arguments to be used for filtering

CLI Example:

salt myminion netbox.get_interfaces edge_router name="et-0/0/5"
_modules.netbox.get_ipaddresses(device_name=None, **kwargs)[source]

New in version 2019.2.0.

Filters for an IP address using specified filters

device_name
The name of the device to check for the IP address
kwargs
Optional arguments that can be used to filter, e.g., family=4

CLI Example:

salt myminion netbox.get_ipaddresses device_name family=4
_modules.netbox.make_interface_child(device_name, interface_name, parent_name)[source]

New in version 2019.2.0.

Set an interface as part of a LAG.

device_name
The name of the device, e.g., edge_router.
interface_name
The name of the interface to be attached to LAG, e.g., xe-1/0/2.
parent_name
The name of the LAG interface, e.g., ae13.

CLI Example:

salt myminion netbox.make_interface_child xe-1/0/2 ae13
_modules.netbox.make_interface_lag(device_name, interface_name)[source]

New in version 2019.2.0.

Update an interface to be a LAG.

device_name
The name of the device, e.g., edge_router.
interface_name
The name of the interface, e.g., ae13.

CLI Example:

salt myminion netbox.make_interface_lag edge_router ae13
_modules.netbox.openconfig_interfaces(device_name=None)[source]

New in version 2019.2.0.

Return a dictionary structured as standardised in the openconfig-interfaces YANG model, containing physical and configuration data available in Netbox, e.g., IP addresses, MTU, enabled / disabled, etc.

device_name: None
The name of the device to query the interface data for. If not provided, will use the Minion ID.

CLI Example:

salt '*' netbox.openconfig_interfaces
salt '*' netbox.openconfig_interfaces device_name=cr1.thn.lon
_modules.netbox.openconfig_lacp(device_name=None)[source]

New in version 2019.2.0.

Return a dictionary structured as standardised in the openconfig-lacp YANG model, with configuration data for Link Aggregation Control Protocol (LACP) for aggregate interfaces.

Note

The interval and lacp_mode keys have the values set as SLOW and ACTIVE respectively, as this data is not currently available in Netbox, therefore defaulting to the values defined in the standard. See interval and lacp-mode for further details.

device_name: None
The name of the device to query the LACP information for. If not provided, will use the Minion ID.

CLI Example:

salt '*' netbox.openconfig_lacp
salt '*' netbox.openconfig_lacp device_name=cr1.thn.lon
_modules.netbox.slugify(value)[source]

‘ Slugify given value. Credit to Djangoproject https://docs.djangoproject.com/en/2.0/_modules/django/utils/text/#slugify

_modules.netbox.update_device(name, **kwargs)[source]

New in version 2019.2.0.

Add attributes to an existing device, identified by name.

name
The name of the device, e.g., edge_router
kwargs
Arguments to change in device, e.g., serial=JN2932930

CLI Example:

salt myminion netbox.update_device edge_router serial=JN2932920
_modules.netbox.update_interface(device_name, interface_name, **kwargs)[source]

New in version 2019.2.0.

Update an existing interface with new attributes.

device_name
The name of the device, e.g., edge_router
interface_name
The name of the interface, e.g., ae13
kwargs
Arguments to change in interface, e.g., mac_address=50:87:69:53:32:D0

CLI Example:

salt myminion netbox.update_interface edge_router ae13 mac_address=50:87:69:53:32:D0