1#!/usr/local/bin/php 2<?php 3 4/** 5 * Observium 6 * 7 * This file is part of Observium. 8 * 9 * @package observium 10 * @subpackage scripts 11 * @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2019 Observium Limited 12 * 13 */ 14 15chdir(dirname($argv[0]).'/..'); 16$scriptname = basename($argv[0]); 17 18$options = getopt("d"); 19if (isset($options['d'])) { array_shift($argv); } // for compatibility 20 21include_once("includes/sql-config.inc.php"); 22 23//$config['rancid_version'] = '3.7.1'; 24 25// Detect configured version 26if (isset($config['rancid_version'])) 27{ 28 // Rancid version set manually 29 $rancid_config_version = ltrim($config['rancid_version'], 'vV'); 30 list($rancid_config_base) = explode('.', $rancid_config_version); 31 // $rancid_message = "Used RANCID version configured manually in \$config['rancid_version']: $rancid_version"; 32 // // v3 delimiter 33 // $rancid_version_base = '3'; 34 // $delimiter = ';'; 35} else { 36 // Dummy version for compare 37 $rancid_config_version = 0; 38 $rancid_config_base = 0; 39} 40 41// Detect locally installed version 42if ($rancid_cmd = external_exec('which rancid-run')) 43{ 44 list(, $rancid_cmd_version) = explode(' ', external_exec($rancid_cmd . ' -V')); 45 list($rancid_cmd_base) = explode('.', $rancid_cmd_version); 46} else { 47 // Dummy version for compare 48 $rancid_cmd_version = 0; 49 $rancid_cmd_version = 0; 50} 51 52if ($rancid_config_base > 0 && $rancid_cmd_base > 0 && $rancid_config_base != $rancid_cmd_base) 53{ 54 // If configured version base different from detected, than prefer configured (ie, for force v2 delimiter 55 $rancid_version_base = $rancid_config_base; 56 $rancid_version = $rancid_config_version; 57 $rancid_message = "Used RANCID version configured manually in \$config['rancid_version']: $rancid_version"; 58} 59elseif (version_compare($rancid_cmd_version, $rancid_config_version, '>')) 60{ 61 // RANCID locally detected, use maximum version 62 $rancid_version_base = $rancid_cmd_version; 63 $rancid_version = $rancid_cmd_version; 64 $rancid_message = "Used RANCID version detected on system: $rancid_version"; 65} 66elseif (version_compare($rancid_config_version, '0', '>')) 67{ 68 // RANCID not detected, but version configured 69 $rancid_version_base = $rancid_config_base; 70 $rancid_version = $rancid_config_version; 71 $rancid_message = "Used RANCID version configured manually in \$config['rancid_version']: $rancid_version"; 72} else { 73 // Last compat version 74 $rancid_version_base = '2'; 75 $rancid_version = '2'; 76 $rancid_message = "Used default RANCID version: $rancid_version"; 77} 78 79// Set delimiter 80if ($rancid_version_base < 3) 81{ 82 $delimiter = ':'; 83} else { 84 $delimiter = ';'; 85} 86 87print_debug($rancid_message); 88 89?> 90# RANCID router.db autogenerated by <?php echo realpath($_SERVER['SCRIPT_FILENAME']) . PHP_EOL; ?> 91# <?php echo $rancid_message . PHP_EOL; ?> 92# Do not edit this file directly! 93 94<?php 95 96foreach (dbFetchRows("SELECT `hostname`, `os`, `disabled`, `status` FROM `devices` ORDER BY `hostname`") as $device) 97{ 98 if ($device['disabled'] || !$device['status']) 99 { 100 $status = "down"; 101 } else { 102 $status = "up"; 103 } 104 105 if (isset($config['rancid']['os_map'][$device['os']])) 106 { 107 // Common os map for both v2/v3 108 echo($device['hostname'] . $delimiter . $config['rancid']['os_map'][$device['os']] . $delimiter . $status . PHP_EOL); 109 } 110 111 if ($rancid_version_base > 2) 112 { 113 $rancid_version = rtrim($rancid_version, '.0'); 114 // Rancid v3.x 115 foreach (array_keys($config['rancid']) as $key) 116 { 117 if (!str_starts($key, 'os_map_')) { continue; } 118 119 $version = str_replace('os_map_', '', $key); // os_map_3.3 -> 3.3 120 $version = rtrim($version, '.0'); 121 // Compare used rancid version with os map 122 if (version_compare($version, $rancid_version, '<=') && isset($config['rancid'][$key][$device['os']])) 123 { 124 // Version specific os maps 125 //echo($device['hostname'] . $delimiter . $config['rancid'][$key][$device['os']] . $delimiter . $status . " $version <= $rancid_version" . PHP_EOL); 126 echo($device['hostname'] . $delimiter . $config['rancid'][$key][$device['os']] . $delimiter . $status . PHP_EOL); 127 } 128 } 129 130 } 131} 132 133// EOF 134