2016-04-12 15:28:29 +02:00
# Call api function
# $1 - query string
zaf_zbxapi_do( ) {
local result
if ! zaf_fromcache " $1 " ; then
2016-04-12 18:38:19 +02:00
zaf_trc " Zabbix API: $1 "
2016-04-12 15:28:29 +02:00
result = $( curl -s -f -L -X POST -H 'Content-Type: application/json-rpc' -d " $1 " " $ZAF_ZBXAPI_URL " )
2016-04-12 18:38:19 +02:00
if [ $? = 0 ] && echo $result | grep -q '"result":' ; then
zaf_tocache " $1 " " $result " 60
echo $result
else
zaf_err " Error processing API request. ( $? , $result ) "
fi
2016-04-12 15:28:29 +02:00
fi
}
# Extract result from JSON response
zaf_zbxapi_getresult( ) {
sed -e 's/\({"jsonrpc":"2.0","result":\)\(.*\),\("id":.*\)/\2/g' | sed -e 's/^\[\]$//'
}
# Extract XML result from JSON response
zaf_zbxapi_getxml( ) {
zaf_zbxapi_getresult | sed -e 's/{"jsonrpc":"2.0","result":"//' | sed -e 's/","id"\:1}//' | sed -e 's#\\\([<">/]\)#\1#g'
}
# Extract string from JSON response result
zaf_zbxapi_getstring( ) {
sed -e 's/^"//' -e 's/"$//' -e 's/\\n/' \\ n'/g'
}
# Extract value from JSON response result
# $1 key
zaf_zbxapi_getvalue( ) {
tr ',' '\n' | grep " \" $1 \": " | cut -d '"' -f 4
}
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-04-12 15:28:29 +02:00
"method" : "user.login" ,
2016-04-12 10:36:39 +02:00
"params" : {
"password" : " ' $ZAF_ZBXAPI_PASS ' " ,
"user" : " ' $ZAF_ZBXAPI_USER ' "
} ,
"id" : 0,
2016-04-12 15:28:29 +02:00
"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
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-)
fi
result = $( zaf_zbxapi_do " $authstr " )
ZAF_ZBXAPI_AUTH = $( echo $result | zaf_zbxapi_getresult| zaf_zbxapi_getstring)
2016-04-12 10:36:39 +02:00
zaf_dbg " Logged into zabbix API ( $ZAF_ZBXAPI_AUTH ) "
}
2016-04-12 15:28:29 +02:00
# $1 hostgroup name
zaf_zbxapi_gethostgroupid( ) {
local hstr
local filter
local gfilter
hstr = ' {
"method" : "hostgroup.get" ,
"jsonrpc" : "2.0" ,
"auth" : " ' $ZAF_ZBXAPI_AUTH ' " ,
"params" : {
"filter" : {
"name" : [ " ' $1 ' " ]
} ,
"output" : "shorten"
} ,
"id" : 1
} '
zaf_zbxapi_do " $hstr " | zaf_zbxapi_getresult | tr ',' '\n' | cut -d '"' -f 4
}
# $1 hostname
zaf_zbxapi_gethostid( ) {
local hstr
local host
local groupid
local filter
local gfilter
host = " $1 "
if [ -n " $host " ] ; then
filter = '"filter": { "host": [ "' $host '" ] },'
fi
hstr = ' {
"method" : "host.get" ,
"jsonrpc" : "2.0" ,
"auth" : " ' $ZAF_ZBXAPI_AUTH ' " ,
"params" : {
'$filter'
"output" : "shorten"
} ,
"id" : 1
} '
zaf_zbxapi_do " $hstr " | zaf_zbxapi_getresult | tr ',' '\n' | cut -d '"' -f 4
2016-04-12 10:36:39 +02:00
}
2016-04-12 15:28:29 +02:00
# $1 hostid
zaf_zbxapi_gethost( ) {
2016-04-12 10:36:39 +02:00
local hstr
2016-04-12 15:28:29 +02:00
local host
local groupid
2016-04-12 10:36:39 +02:00
local filter
2016-04-12 15:28:29 +02:00
local gfilter
2016-04-12 10:36:39 +02:00
2016-04-12 15:28:29 +02:00
hostid = " $1 "
if [ -n " $hostid " ] ; then
filter = '"hostids": [ "' $hostid '" ],'
fi
2016-04-12 10:36:39 +02:00
hstr = ' {
2016-04-12 15:28:29 +02:00
"method" : "host.get" ,
2016-04-12 10:36:39 +02:00
"jsonrpc" : "2.0" ,
2016-04-12 15:28:29 +02:00
"auth" : " ' $ZAF_ZBXAPI_AUTH ' " ,
"params" : {
'$filter'
"output" : "extend"
} ,
"id" : 1
} '
zaf_zbxapi_do " $hstr " | zaf_zbxapi_getresult | zaf_zbxapi_getvalue host
}
# $1 hostgroupid
zaf_zbxapi_gethostsingroup( ) {
local hstr
local host
local groupid
local filter
local gfilter
groupid = " $1 "
if [ -n " $groupid " ] ; then
gfilter = '"groupids": [ "' $groupid '" ],'
fi
hstr = ' {
2016-04-12 10:36:39 +02:00
"method" : "host.get" ,
2016-04-12 15:28:29 +02:00
"jsonrpc" : "2.0" ,
2016-04-12 10:36:39 +02:00
"auth" : " ' $ZAF_ZBXAPI_AUTH ' " ,
2016-04-12 15:28:29 +02:00
"params" : {
'$gfilter'
'$filter'
"output" : "shorten"
} ,
"id" : 1
2016-04-12 10:36:39 +02:00
} '
2016-04-12 15:28:29 +02:00
zaf_zbxapi_do " $hstr " | zaf_zbxapi_getresult | tr ',' '\n' | cut -d '"' -f 4
2016-04-12 10:36:39 +02:00
}
# Host backup
# $1 hostid
zaf_zbxapi_backuphost( ) {
local bkpstr
host = " $1 "
bkpstr = '
{
"method" : "configuration.export" ,
2016-04-12 15:28:29 +02:00
"jsonrpc" : "2.0" ,
2016-04-12 10:36:39 +02:00
"params" : {
"options" : {
"hosts" : [
" ' $host ' "
]
} ,
"format" : "xml"
} ,
"auth" : " ' $ZAF_ZBXAPI_AUTH ' " ,
"id" : 1
} '
2016-04-12 15:28:29 +02:00
zaf_zbxapi_do " $bkpstr " | zaf_zbxapi_getxml
2016-04-12 10:36:39 +02:00
}