Index: html/pages/device.inc.php
===================================================================
--- html/pages/device.inc.php (revision 10968)
+++ html/pages/device.inc.php (working copy)
@@ -593,6 +593,19 @@
$navbar['options']['nfsen'] = array('text' => 'Netflow', 'icon' => $config['icon']['nfsen']);
}
+ // If Netbox is enabled, check for the device url
+ if ($config['netbox_enable'])
+ {
+ $netbox_device_url = get_netbox_device_url($device['serial']);
+ }
+
+ // Print the Netbox tab if we have a netbox url
+ if ($netbox_device_url)
+ {
+ $navbar['options']['netbox'] = array('text' => 'Netbox', 'icon' => $config['icon']['info']);
+ $navbar['options']['netbox']['url'] = $netbox_device_url;
+ }
+
$navbar['options']['notes'] = array('text' => '', 'icon' => $config['icon']['eventlog'], 'right' => TRUE, 'class' => "dropdown-toggle");
if (isset($attribs['notes']))
{
Index: html/includes/functions.inc.php
===================================================================
--- html/includes/functions.inc.php (revision 10968)
+++ html/includes/functions.inc.php (working copy)
@@ -2044,6 +2044,39 @@
return FALSE;
}
+/**
+
+ * Calls a Netbox REST API and queries for device serial number
+ *
+ * @param string $device_serial
+ * @return URL to Device in Netbox or false
+
+ */
+function get_netbox_device_url($device_serial)
+{
+ global $config;
+
+ $netbox_api_url = $config['netbox_api_base_url'] . 'dcim/devices/?serial=' . $device_serial;
+
+ $opts = array('http' =>
+ array(
+ 'method' => 'GET',
+ 'header' => 'Authorization: Token ' . $config['netbox_api_token']
+ ),
+ 'ssl' =>
+ array(
+ 'verify_peer' => false,
+ 'verify_peer_name' => false,
+ )
+ );
+ $response = json_decode(file_get_contents($netbox_api_url, false, stream_context_create($opts)), true);
+
+ if($response['results'][0]['serial'] == $device_serial && $device_serial != '')
+ return str_replace("/api", "", $response['results'][0]['url']);
+ else
+ return false;
+}
+
// Note, by default text NOT escaped.
// TESTME needs unit testing
// DOCME needs phpdoc block