2010-09-03 18:26:59 +00:00
#!/usr/bin/env php
2009-09-07 11:07:59 +00:00
< ? php
2008-03-12 20:01:46 +00:00
2012-05-09 10:01:42 +00:00
/**
2013-10-28 12:01:36 -07:00
* Observium
2011-09-08 12:24:18 +00:00
*
2013-10-28 12:01:36 -07:00
* This file is part of Observium.
2012-05-09 10:01:42 +00:00
*
2013-10-28 12:01:36 -07:00
* @package observium
2012-05-09 10:01:42 +00:00
* @subpackage cli
2013-10-28 12:01:36 -07:00
* @author Adam Armstrong <adama@memetic.org>
* @copyright (C) 2006 - 2012 Adam Armstrong
2011-09-08 12:24:18 +00:00
*/
2012-04-08 10:44:41 +00:00
chdir ( dirname ( $argv [ 0 ]));
2015-07-13 20:10:26 +02:00
require 'includes/defaults.inc.php' ;
require 'config.php' ;
require 'includes/definitions.inc.php' ;
require 'includes/functions.php' ;
2007-04-03 14:10:23 +00:00
2015-07-13 20:10:26 +02:00
$options = getopt ( 'g:f::' );
2015-03-19 22:06:13 +00:00
if ( isset ( $options [ 'g' ]) && $options [ 'g' ] >= 0 ) {
$cmd = array_shift ( $argv );
array_shift ( $argv );
array_shift ( $argv );
array_unshift ( $argv , $cmd );
$poller_group = $options [ 'g' ];
2015-07-13 20:10:26 +02:00
}
else if ( $config [ 'distributed_poller' ] === true ) {
2015-05-09 10:34:55 +01:00
$poller_group = $config [ 'distributed_poller_group' ];
2015-03-19 22:06:13 +00:00
}
2015-05-09 10:34:55 +01:00
2015-03-19 22:06:13 +00:00
if ( isset ( $options [ 'f' ]) && $options [ 'f' ] == 0 ) {
$cmd = array_shift ( $argv );
array_shift ( $argv );
array_unshift ( $argv , $cmd );
$force_add = 1 ;
}
2015-07-13 20:10:26 +02:00
if ( ! empty ( $argv [ 1 ])) {
$host = strtolower ( $argv [ 1 ]);
$community = $argv [ 2 ];
$snmpver = strtolower ( $argv [ 3 ]);
$port = 161 ;
$transport = 'udp' ;
if ( $snmpver === 'v3' ) {
$seclevel = $community ;
// These values are the same as in defaults.inc.php
$v3 = array (
'authlevel' => 'noAuthNoPriv' ,
'authname' => 'root' ,
'authpass' => '' ,
'authalgo' => 'MD5' ,
'cryptopass' => '' ,
'cryptoalgo' => 'AES' ,
);
if ( $seclevel === 'nanp' or $seclevel === 'any' or $seclevel === 'noAuthNoPriv' ) {
$v3 [ 'authlevel' ] = 'noAuthNoPriv' ;
$v3args = array_slice ( $argv , 4 );
while ( $arg = array_shift ( $v3args )) {
// parse all remaining args
if ( is_numeric ( $arg )) {
$port = $arg ;
}
else if ( preg_match ( '/^(' . implode ( '|' , $config [ 'snmp' ][ 'transports' ]) . ')$/' , $arg )) {
$transport = $arg ;
}
else {
// should add a sanity check of chars allowed in user
$user = $arg ;
}
}
if ( $seclevel === 'nanp' ) {
array_push ( $config [ 'snmp' ][ 'v3' ], $v3 );
}
$device_id = addHost ( $host , $snmpver , $port , $transport , 0 , $poller_group , $force_add );
2012-05-09 16:18:23 +00:00
}
2015-07-13 20:10:26 +02:00
else if ( $seclevel === 'anp' or $seclevel === 'authNoPriv' ) {
$v3 [ 'authlevel' ] = 'authNoPriv' ;
$v3args = array_slice ( $argv , 4 );
$v3 [ 'authname' ] = array_shift ( $v3args );
$v3 [ 'authpass' ] = array_shift ( $v3args );
while ( $arg = array_shift ( $v3args )) {
// parse all remaining args
if ( is_numeric ( $arg )) {
$port = $arg ;
}
else if ( preg_match ( '/^(' . implode ( '|' , $config [ 'snmp' ][ 'transports' ]) . ')$/i' , $arg )) {
$transport = $arg ;
}
else if ( preg_match ( '/^(sha|md5)$/i' , $arg )) {
$v3 [ 'authalgo' ] = $arg ;
}
else {
echo 'Invalid argument: ' . $arg . " \n " ;
return ;
}
}
array_push ( $config [ 'snmp' ][ 'v3' ], $v3 );
$device_id = addHost ( $host , $snmpver , $port , $transport , 0 , $poller_group , $force_add );
2012-05-09 16:18:23 +00:00
}
2015-07-13 20:10:26 +02:00
else if ( $seclevel === 'ap' or $seclevel === 'authPriv' ) {
$v3 [ 'authlevel' ] = 'authPriv' ;
$v3args = array_slice ( $argv , 4 );
$v3 [ 'authname' ] = array_shift ( $v3args );
$v3 [ 'authpass' ] = array_shift ( $v3args );
$v3 [ 'cryptopass' ] = array_shift ( $v3args );
while ( $arg = array_shift ( $v3args )) {
// parse all remaining args
if ( is_numeric ( $arg )) {
$port = $arg ;
}
else if ( preg_match ( '/^(' . implode ( '|' , $config [ 'snmp' ][ 'transports' ]) . ')$/i' , $arg )) {
$transport = $arg ;
}
else if ( preg_match ( '/^(sha|md5)$/i' , $arg )) {
$v3 [ 'authalgo' ] = $arg ;
}
else if ( preg_match ( '/^(aes|des)$/i' , $arg )) {
$v3 [ 'cryptoalgo' ] = $arg ;
}
else {
echo 'Invalid argument: ' . $arg . " \n " ;
return ;
}
} //end while
array_push ( $config [ 'snmp' ][ 'v3' ], $v3 );
$device_id = addHost ( $host , $snmpver , $port , $transport , 0 , $poller_group , $force_add );
2012-05-09 16:18:23 +00:00
}
2015-07-13 20:10:26 +02:00
else {
// Error or do nothing ?
} //end if
2012-05-09 16:18:23 +00:00
}
2015-07-13 20:10:26 +02:00
else {
$v2args = array_slice ( $argv , 2 );
while ( $arg = array_shift ( $v2args )) {
// parse all remaining args
if ( is_numeric ( $arg )) {
$port = $arg ;
}
else if ( preg_match ( '/(' . implode ( '|' , $config [ 'snmp' ][ 'transports' ]) . ')/i' , $arg )) {
$transport = $arg ;
}
else if ( preg_match ( '/^(v1|v2c)$/i' , $arg )) {
$snmpver = $arg ;
}
2012-05-09 16:18:23 +00:00
}
2012-05-15 15:18:57 +00:00
2015-07-13 20:10:26 +02:00
if ( $community ) {
$config [ 'snmp' ][ 'community' ] = array ( $community );
2012-05-09 16:18:23 +00:00
}
2012-05-15 15:18:57 +00:00
2015-07-13 20:10:26 +02:00
$device_id = addHost ( $host , $snmpver , $port , $transport , 0 , $poller_group , $force_add );
} //end if
2012-05-15 15:18:57 +00:00
2015-07-13 20:10:26 +02:00
if ( $snmpver ) {
$snmpversions [] = $snmpver ;
2012-05-09 16:18:23 +00:00
}
2015-07-13 20:10:26 +02:00
else {
$snmpversions = array (
'v2c' ,
'v3' ,
'v1' ,
);
2012-05-09 16:18:23 +00:00
}
2015-07-13 20:10:26 +02:00
while ( ! $device_id && count ( $snmpversions )) {
$snmpver = array_shift ( $snmpversions );
$device_id = addHost ( $host , $snmpver , $port , $transport , 0 , $poller_group , $force_add );
2012-05-09 16:18:23 +00:00
}
2012-05-15 15:18:57 +00:00
2015-07-13 20:10:26 +02:00
if ( $device_id ) {
$device = device_by_id_cache ( $device_id );
echo 'Added device ' . $device [ 'hostname' ] . ' (' . $device_id . " ) \n " ;
exit ;
}
} //end if
2011-03-22 20:27:39 +00:00
2015-07-13 20:10:26 +02:00
print $console_color -> convert (
" \n " . $config [ 'project_name_version' ] . ' Add Host Tool
2011-03-22 20:27:39 +00:00
2015-07-13 20:10:26 +02:00
Usage (SNMPv1/2c): ./addhost.php [-g <poller group>] [-f] <%Whostname%n> [community] [v1|v2c] [port] [' . implode ( '|' , $config [ 'snmp' ][ 'transports' ]) . ']
Usage (SNMPv3) : Config Defaults : ./addhost.php [-g <poller group>] [-f]<%Whostname%n> any v3 [user] [port] [' . implode ( '|' , $config [ 'snmp' ][ 'transports' ]) . ']
No Auth, No Priv : ./addhost.php [-g <poller group>] [-f]<%Whostname%n> nanp v3 [user] [port] [' . implode ( '|' , $config [ 'snmp' ][ 'transports' ]) . ']
Auth, No Priv : ./addhost.php [-g <poller group>] [-f]<%Whostname%n> anp v3 <user> <password> [md5|sha] [port] [' . implode ( '|' , $config [ 'snmp' ][ 'transports' ]) . ']
Auth, Priv : ./addhost.php [-g <poller group>] [-f]<%Whostname%n> ap v3 <user> <password> <enckey> [md5|sha] [aes|dsa] [port] [' . implode ( '|' , $config [ 'snmp' ][ 'transports' ]) . ']
2011-03-16 14:23:38 +00:00
2015-07-13 20:10:26 +02:00
-g <poller group> allows you to add a device to be pinned to a specific poller when using distributed polling. X can be any number associated with a poller group
-f forces the device to be added by skipping the icmp and snmp check against the host.
2007-04-03 14:10:23 +00:00
2015-07-13 20:10:26 +02:00
%rRemember to run discovery for the host afterwards.%n
2015-11-03 13:58:12 +01:00
'
2015-07-13 20:10:26 +02:00
);