2016-04-14 14:31:01 +02:00
# Call api function and use cache
2016-04-12 15:28:29 +02:00
# $1 - query string
zaf_zbxapi_do( ) {
2016-04-14 14:31:01 +02:00
local result
2016-04-20 09:39:24 +02:00
local query
2016-04-19 15:48:12 +02:00
local tmpfile
tmpfile = $ZAF_TMP_DIR /zapi$$
2016-04-20 09:39:24 +02:00
query = " $1 "
zaf_trc " Zabbix API: $query "
curl -s -f -L -X POST -H 'Content-Type: application/json-rpc' -d " $query " " $ZAF_ZBXAPI_URL " >$tmpfile
2016-12-07 14:25:34 +01:00
if [ $? = 0 ] && $ZAF_LIB_DIR /JSON.sh -b <$tmpfile | grep -q '"result"' ; then
2016-04-14 14:31:01 +02:00
zaf_trc "API OK"
2016-04-19 15:48:12 +02:00
cat $tmpfile
rm -f $tmpfile
2016-04-14 14:31:01 +02:00
else
2016-04-19 15:48:12 +02:00
zaf_err " Error processing API request. ( $? , $tmpfile ) "
2016-04-14 14:31:01 +02:00
fi
}
# Call api function and cache results
# $1 - query string
zaf_zbxapi_do_cache( ) {
2016-04-12 15:28:29 +02:00
local result
2016-04-19 15:48:12 +02:00
local tmpfile
2016-04-20 09:39:24 +02:00
local query
2016-04-19 15:48:12 +02:00
2016-04-20 09:39:24 +02:00
query = " $( echo $1 | tr '\n' ' ' ) "
2016-04-19 15:48:12 +02:00
tmpfile = $ZAF_TMP_DIR /zcapi$$
2016-04-12 15:28:29 +02:00
if ! zaf_fromcache " $1 " ; then
2016-04-19 15:48:12 +02:00
zaf_zbxapi_do " $1 " >$tmpfile
2016-04-20 09:39:24 +02:00
[ -s " $tmpfile " ] && cat $tmpfile | zaf_tocache_stdin " $query " 60
2016-04-19 15:48:12 +02:00
rm -f $tmpfile
2016-04-12 15:28:29 +02:00
fi
}
2016-04-19 15:48:12 +02:00
# Extract one result from JSON response
2016-04-12 15:28:29 +02:00
zaf_zbxapi_getresult( ) {
2016-04-19 15:48:12 +02:00
$ZAF_LIB_DIR /JSON.sh -b | grep '\["result"\]' | tr '\t' ' ' | cut -d ' ' -f 2-
2016-04-12 15:28:29 +02:00
}
# Extract XML result from JSON response
zaf_zbxapi_getxml( ) {
2016-04-19 15:48:12 +02:00
zaf_zbxapi_getstring | zaf_strunescape '</">' | zaf_far '\\n' "\n"
2016-04-12 15:28:29 +02:00
}
# Extract string from JSON response result
zaf_zbxapi_getstring( ) {
2016-04-19 15:48:12 +02:00
zaf_zbxapi_getresult | sed -e 's/^"//' -e 's/"$//'
2016-04-12 15:28:29 +02:00
}
# Extract value from JSON response result
# $1 key
2016-04-19 15:48:12 +02:00
zaf_zbxapi_getvalues( ) {
2016-12-07 14:25:34 +01:00
$ZAF_LIB_DIR /JSON.sh -b | grep '\["result",.*,"' $1 '"]' | tr '\t' ' ' | cut -d ' ' -f 2- | sed -e 's/^"//' -e 's/"$//'
2016-04-12 15:28:29 +02:00
}
2016-04-12 10:36:39 +02:00
# Zabbix API related functions
# Parameters in global variables ZAF_ZBX_API_*
# returns auth on stdout or false
zaf_zbxapi_login( ) {
local authstr
local user
local pass
2016-04-12 15:28:29 +02:00
local result
2016-04-12 10:36:39 +02:00
2016-04-15 08:51:50 +02:00
[ -z " $ZAF_ZBXAPI_URL " ] || [ -z " $ZAF_ZBXAPI_USER " ] || [ -z " $ZAF_ZBXAPI_PASS " ] && zaf_err "Zabbix Api parameters not set! Set ZAF_ZBXAPI_URL, ZAF_ZBXAPI_USER and ZAF_ZBXAPI_PASS and try again."
2016-04-12 10:36:39 +02:00
authstr = ' {
2016-12-07 14:25:34 +01:00
"method" : "user.login" ,
"params" : {
"password" : " ' $ZAF_ZBXAPI_PASS ' " ,
"user" : " ' $ZAF_ZBXAPI_USER ' "
} ,
"id" : 0,
"jsonrpc" : "2.0"
2016-04-12 10:36:39 +02:00
} '
2016-04-12 15:28:29 +02:00
if [ " $ZAF_ZBXAPI_AUTHTYPE " = "http" ] ; then
2016-12-07 14:25:34 +01:00
ZAF_ZBXAPI_URL = $( echo $ZAF_ZBXAPI_URL | cut -d '/' -f 1) //$ZAF_ZBXAPI_USER :$ZAF_ZBXAPI_PASS @$( echo $ZAF_ZBXAPI_URL | cut -d '/' -f 3-)
2016-04-12 15:28:29 +02:00
fi
2016-04-14 14:31:01 +02:00
result = $( zaf_zbxapi_do_cache " $authstr " )
2016-04-19 15:48:12 +02:00
ZAF_ZBXAPI_AUTH = $( echo $result | zaf_zbxapi_getstring)
2016-04-14 14:31:01 +02:00
[ -z " $ZAF_ZBXAPI_AUTH " ] && zaf_err "Cannot login into API"
2016-04-12 10:36:39 +02:00
zaf_dbg " Logged into zabbix API ( $ZAF_ZBXAPI_AUTH ) "
}
2016-04-18 09:20:57 +02:00
# Get object from zabbix API
# $1 object_type
# $2 filter
# $3 params
# $4 output
# $5 id
zaf_zbxapi_get_object( ) {
local obj
local filter
local params
local str
local output
local id
local result
obj = $1
filter = $2
params = $3
output = $4
id = $5
[ -z " $id " ] && id = 1
[ -n " $filter " ] && filter = '"filter": {' $filter '},' ;
[ -z " $output " ] && output = "shorten" ;
if [ -n " $params " ] ; then
params = '"params": {' $params ', ' $filter ' "output":"' $output '"}' ;
else
params = '"params": {' $filter ' "output":"' $output '"}' ;
fi
str = '{ "method": "' $obj '.get", "jsonrpc": "2.0", "auth": "' $ZAF_ZBXAPI_AUTH '",' $params ', "id": "' $id '" }'
2016-04-19 15:48:12 +02:00
result = $( zaf_zbxapi_do_cache " $str " )
2016-04-18 09:20:57 +02:00
[ -z " $result " ] && zaf_dbg " API call result empty or error! ( $str ) "
echo $result
}
2016-04-12 15:28:29 +02:00
# $1 hostgroup name
zaf_zbxapi_gethostgroupid( ) {
2016-04-18 09:20:57 +02:00
local result
2016-12-07 14:25:34 +01:00
result = $( zaf_zbxapi_get_object "hostgroup" '"name": ["' $1 '"]' )
[ -z " $result " ] && zaf_err " HostGroup $1 not found! "
echo $result | zaf_zbxapi_getvalues groupid
2016-04-12 15:28:29 +02:00
}
2016-04-18 10:24:55 +02:00
# $1 hostid
# $2 property or null for all
zaf_zbxapi_gethost( ) {
local result
2016-12-07 14:25:34 +01:00
result = $( zaf_zbxapi_get_object "host" '' '"hostids": ["' $1 '"]' 'extend' )
[ -z " $result " ] && zaf_err " Hostid $1 not found! "
if [ -z " $2 " ] ; then
echo $result
2016-04-18 10:24:55 +02:00
else
2016-04-19 15:48:12 +02:00
echo $result | zaf_zbxapi_getvalues $2
2016-04-18 10:24:55 +02:00
fi
}
2016-04-12 15:28:29 +02:00
# $1 hostname
zaf_zbxapi_gethostid( ) {
2016-04-18 09:20:57 +02:00
local result
2016-12-07 14:25:34 +01:00
result = $( zaf_zbxapi_get_object "host" '"host": ["' $1 '"]' )
[ -z " $result " ] && zaf_err " Host $1 not found! "
echo $result | zaf_zbxapi_getvalues hostid
2016-04-14 14:31:01 +02:00
}
# $1 hostname
2016-04-18 10:24:55 +02:00
# $2 inv field or empty for json
zaf_zbxapi_gethostinventory( ) {
2016-04-18 09:20:57 +02:00
local result
2016-12-07 14:25:34 +01:00
result = $( zaf_zbxapi_get_object "host" '"host": ["' $1 '"]' '"withInventory": "true", "selectInventory": "extend"' )
[ -z " $result " ] && zaf_err " Host $1 not found! "
2016-04-18 10:24:55 +02:00
if [ -z " $2 " ] ; then
2016-12-07 14:25:34 +01:00
echo $result
2016-04-18 10:24:55 +02:00
else
2016-04-19 15:48:12 +02:00
echo $result | zaf_zbxapi_getvalues $2
2016-04-18 10:24:55 +02:00
fi
2016-04-12 10:36:39 +02:00
}
2016-04-18 10:24:55 +02:00
# $1 hostname
zaf_zbxapi_gettemplateid( ) {
2016-04-18 09:20:57 +02:00
local result
2016-12-07 14:25:34 +01:00
result = $( zaf_zbxapi_get_object "template" '"host": ["' $1 '"]' )
[ -z " $result " ] && zaf_err " Template $1 not found! "
echo $result | zaf_zbxapi_getvalues templateid
2016-04-12 15:28:29 +02:00
}
2016-04-14 14:31:01 +02:00
# $1 templateid
2016-04-18 10:24:55 +02:00
# $2 property or null for all
2016-04-14 14:31:01 +02:00
zaf_zbxapi_gettemplate( ) {
2016-04-18 09:20:57 +02:00
local result
2016-04-14 14:31:01 +02:00
2016-12-07 14:25:34 +01:00
result = $( zaf_zbxapi_get_object "template" '' '"templateids": ["' $1 '"]' 'extend' )
[ -z " $result " ] && zaf_err " Templateid $1 not found! "
if [ -z " $2 " ] ; then
echo $result
2016-04-18 10:24:55 +02:00
else
2016-04-19 15:48:12 +02:00
echo $result | zaf_zbxapi_getvalues $2
2016-04-18 10:24:55 +02:00
fi
2016-04-18 09:20:57 +02:00
}
2016-04-14 14:31:01 +02:00
2016-04-18 09:20:57 +02:00
# $1 hostgroupid
2016-04-12 15:28:29 +02:00
zaf_zbxapi_gethostsingroup( ) {
2016-04-18 09:20:57 +02:00
local result
2016-04-12 15:28:29 +02:00
2016-12-07 14:25:34 +01:00
result = $( zaf_zbxapi_get_object "host" '' '"groupids": ["' $1 '"]' )
[ -z " $result " ] && zaf_wrn " No hosts in groupid ' $1 ' "
echo $result | zaf_zbxapi_getvalues "hostid"
2016-04-18 09:20:57 +02:00
}
# Get all hostids in system
zaf_zbxapi_gethostids( ) {
local result
2016-12-07 14:25:34 +01:00
result = $( zaf_zbxapi_get_object "host" )
echo $result | zaf_zbxapi_getvalues "hostid"
2016-04-18 09:20:57 +02:00
}
# Get all templateids in system
zaf_zbxapi_gettemplateids( ) {
local result
2016-12-07 14:25:34 +01:00
result = $( zaf_zbxapi_get_object "template" )
echo $result | zaf_zbxapi_getvalues "templateid"
2016-04-18 09:20:57 +02:00
}
# $1 hostgroupid
zaf_zbxapi_gettemplatesingroup( ) {
local result
2016-12-07 14:25:34 +01:00
result = $( zaf_zbxapi_get_object "template" '' '"groupids": ["' $1 '"]' )
[ -z " $result " ] && zaf_wrn " No templates in groupid ' $1 ' "
echo $result | zaf_zbxapi_getvalues "templateid"
2016-04-18 09:20:57 +02:00
}
# $1 map or null for all
zaf_zbxapi_getmapid( ) {
local result
if [ -n " $1 " ] ; then
2016-12-07 14:25:34 +01:00
result = $( zaf_zbxapi_get_object "map" '"name": ["' $1 '"]' )
2016-04-18 09:20:57 +02:00
else
2016-12-07 14:25:34 +01:00
result = $( zaf_zbxapi_get_object "map" )
2016-04-18 09:20:57 +02:00
fi
2016-12-07 14:25:34 +01:00
[ -z " $result " ] && zaf_err " Map $1 not found "
echo $result | zaf_zbxapi_getvalues "sysmapid"
2016-04-18 09:20:57 +02:00
}
# $1 mapid
2016-04-18 10:24:55 +02:00
# $2 property or null for all
2016-04-18 09:20:57 +02:00
zaf_zbxapi_getmap( ) {
local result
2016-12-07 14:25:34 +01:00
result = $( zaf_zbxapi_get_object "map" '' '"sysmapids": ["' $1 '"]' 'extend' )
[ -z " $result " ] && zaf_err " Mapid $1 not found "
if [ -z " $2 " ] ; then
echo $result
2016-04-18 10:24:55 +02:00
else
2016-04-19 15:48:12 +02:00
echo $result | zaf_zbxapi_getvalues $2
2016-04-18 10:24:55 +02:00
fi
2016-04-12 10:36:39 +02:00
}
2016-04-14 15:10:42 +02:00
# Object backup
# $1 object
# $2 id
zaf_zbxapi_export_object( ) {
2016-04-12 10:36:39 +02:00
local bkpstr
2016-04-14 15:10:42 +02:00
local obj
local id
2016-04-12 10:36:39 +02:00
2016-04-14 15:10:42 +02:00
obj = " $1 "
id = " $2 "
2016-04-12 10:36:39 +02:00
bkpstr = '
{
2016-12-07 14:25:34 +01:00
"method" : "configuration.export" ,
"jsonrpc" : "2.0" ,
"params" : {
"options" : {
" ' $obj ' " : [
" ' $id ' "
]
} ,
"format" : "xml"
} ,
"auth" : " ' $ZAF_ZBXAPI_AUTH ' " ,
"id" : 1
2016-04-12 10:36:39 +02:00
} '
2016-04-14 14:31:01 +02:00
zaf_zbxapi_do_cache " $bkpstr " | zaf_zbxapi_getxml
}
2016-04-14 15:10:42 +02:00
# Host backup
# $1 hostid
zaf_zbxapi_export_host( ) {
zaf_zbxapi_export_object hosts " $1 "
}
2016-04-14 14:31:01 +02:00
# Template backup
# $1 templateid
zaf_zbxapi_export_template( ) {
2016-04-14 15:10:42 +02:00
zaf_zbxapi_export_object templates " $1 "
}
# Map backup
# $1 mapid
zaf_zbxapi_export_map( ) {
zaf_zbxapi_export_object maps " $1 "
2016-04-14 14:31:01 +02:00
}
# Import template into zabbix
# $1 template file or stdin
2016-04-14 15:10:42 +02:00
zaf_zbxapi_import_config( ) {
local xmlstr
2016-04-14 14:31:01 +02:00
local impstr
if [ -z " $1 " ] ; then
2016-12-07 14:25:34 +01:00
xmlstr = $( zaf_strescape '"' )
2016-04-14 14:31:01 +02:00
else
2016-12-07 14:25:34 +01:00
! [ -f " $1 " ] && return 1
xmlstr = $( zaf_strescape '"\n\r' <$1 )
2016-04-14 14:31:01 +02:00
fi
impstr = '
{
2016-12-07 14:25:34 +01:00
"method" : "configuration.import" ,
"jsonrpc" : "2.0" ,
"params" : {
"format" : "xml" ,
"rules" : {
"applications" : {
"createMissing" : true,
"updateExisting" : true
} ,
"discoveryRules" : {
"createMissing" : true,
"updateExisting" : true
} ,
"graphs" : {
"createMissing" : true,
"updateExisting" : true
} ,
"hosts" : {
"createMissing" : true,
"updateExisting" : true
} ,
"items" : {
"createMissing" : true,
"updateExisting" : true
} ,
"templates" : {
"createMissing" : true,
"updateExisting" : true
} ,
"triggers" : {
"createMissing" : true,
"updateExisting" : true
} ,
"maps" : {
"createMissing" : true,
"updateExisting" : true
} ,
"screens" : {
"createMissing" : true,
"updateExisting" : true
} ,
"items" : {
"createMissing" : true,
"updateExisting" : true
} ,
"valueMaps" : {
"createMissing" : true,
"updateExisting" : true
}
} ,
2016-04-14 15:10:42 +02:00
"source" : " ' $xmlstr ' "
2016-12-07 14:25:34 +01:00
} ,
"auth" : " ' $ZAF_ZBXAPI_AUTH ' " ,
"id" : 3
2016-04-14 14:31:01 +02:00
} '
zaf_zbxapi_do " $impstr " | zaf_zbxapi_getresult | grep -q true
2016-04-12 10:36:39 +02:00
}