216 lines
7.6 KiB
Bash
216 lines
7.6 KiB
Bash
|
#!/bin/bash
|
|||
|
###################################################################
|
|||
|
#
|
|||
|
# Скрипт для работы с Zabbix Rest API
|
|||
|
# Позволяет создавать группу узлов, шаблон, узел.
|
|||
|
# Создан по мотивам
|
|||
|
# https://www.reddit.com/r/zabbix/comments/bhdhgq/zabbix_api_example_using_just_bash_curl_and_jq/
|
|||
|
#
|
|||
|
# Автор: Сергей Калинин
|
|||
|
# https://nuk-svk.ru
|
|||
|
# svk@nuk-svk.ru
|
|||
|
#####################################################################
|
|||
|
#
|
|||
|
# Использование:
|
|||
|
# ./zabbix_create_host.sh
|
|||
|
#
|
|||
|
# Запуск без параметров создаст группу узлов, шаблон и узел если они
|
|||
|
# отсутствуют. Данные берутся из переменных окружения
|
|||
|
#####################################################################
|
|||
|
|
|||
|
|
|||
|
#####################################################################
|
|||
|
# Custom variables
|
|||
|
|
|||
|
BIN_DIR=${BIN_DIR:-/usr/local/bin}
|
|||
|
ETC_DIR=${ETC_DIR:-/usr/local/etc}
|
|||
|
LIB_DIR=${LIB_DIR:-/usr/local/lib}
|
|||
|
|
|||
|
zabbixServer=${ZABBIX_SERVER:-'http://zabbix.example.com'}
|
|||
|
zabbixUsername=${ZABBIX_USER}
|
|||
|
zabbixPassword=${ZABBIX_PASSWORD}
|
|||
|
zabbixHostGroup=${ZABBIX_HOST_GROUP:-'Virtual Hosts'}
|
|||
|
ZABBIX_HOST_NAME=${ZABBIX_HOST:-"Test Virtual Host"}
|
|||
|
ZABBIX_TEMPLATE_NAME=${ZABBIX_TEMPLATE_NAME:-"Some_Template"}
|
|||
|
|
|||
|
#End of custom variables
|
|||
|
#####################################################################
|
|||
|
|
|||
|
header='Content-Type:application/json'
|
|||
|
zabbixApiUrl="$zabbixServer/api_jsonrpc.php"
|
|||
|
|
|||
|
function exit_with_error() {
|
|||
|
echo '********************************'
|
|||
|
echo "$errorMessage"
|
|||
|
echo '--------------------------------'
|
|||
|
echo 'INPUT'
|
|||
|
echo '--------------------------------'
|
|||
|
echo "$json"
|
|||
|
echo '--------------------------------'
|
|||
|
echo 'OUTPUT'
|
|||
|
echo '--------------------------------'
|
|||
|
echo "$result"
|
|||
|
echo '********************************'
|
|||
|
exit 1
|
|||
|
}
|
|||
|
|
|||
|
#####################################################################
|
|||
|
# Auth to zabbix
|
|||
|
# https://www.zabbix.com/documentation/3.4/manual/api/reference/user/login
|
|||
|
function auth() {
|
|||
|
errorMessage='*ERROR* - Unable to get Zabbix authorization token'
|
|||
|
json=$(cat ${LIB_DIR}/user.login.json)
|
|||
|
json=${json/USER/$zabbixUsername}
|
|||
|
json=${json/PASSWORD/$zabbixPassword}
|
|||
|
#echo $json
|
|||
|
result=$(curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl)
|
|||
|
|
|||
|
auth=$(echo $result | jq '.result')
|
|||
|
echo "Auth: $auth"
|
|||
|
if [ -z "$auth" ]; then
|
|||
|
exit_with_error
|
|||
|
fi
|
|||
|
echo "Login successful - Auth ID: $auth"
|
|||
|
}
|
|||
|
|
|||
|
#####################################################################
|
|||
|
# Create hostgroup
|
|||
|
function create_host_group() {
|
|||
|
if [ -z "$auth" ]; then
|
|||
|
auth
|
|||
|
fi
|
|||
|
errorMessage="*ERROR* - Unable to create hostgroup ID for host group named '$zabbixHostGroup'"
|
|||
|
json=`cat ${LIB_DIR}/hostgroup.create.json`
|
|||
|
json=${json/HOSTGROUP/$zabbixHostGroup}
|
|||
|
json=${json/AUTHID/$auth}
|
|||
|
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
|
|||
|
HOSTGROUP_ID=`echo $result | jq -r '.result | .groupids | .[0]'`
|
|||
|
if [ "$HOSTGROUP_ID" == "null" ]; then
|
|||
|
exit_with_error
|
|||
|
fi
|
|||
|
echo "Hostgroup '$zabbixHostGroup' was created with ID: $HOSTGROUP_ID"
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
#####################################################################
|
|||
|
# Get hostgroup
|
|||
|
function get_host_group() {
|
|||
|
if [ -z "$auth" ]; then
|
|||
|
auth
|
|||
|
fi
|
|||
|
errorMessage="*ERROR* - Unable to get hostgroup ID for host group named '$zabbixHostGroup'"
|
|||
|
json=`cat ${LIB_DIR}/hostgroup.get.json`
|
|||
|
json=${json/HOSTGROUP/$zabbixHostGroup}
|
|||
|
json=${json/AUTHID/$auth}
|
|||
|
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
|
|||
|
HOSTGROUP_ID=`echo $result | jq -r '.result | .[0] | .groupid'`
|
|||
|
if [ "$HOSTGROUP_ID" == "null" ]; then
|
|||
|
create_host_group
|
|||
|
fi
|
|||
|
echo "Hostgroup ID for '$zabbixHostGroup': $HOSTGROUP_ID"
|
|||
|
}
|
|||
|
|
|||
|
#####################################################################
|
|||
|
# Create template
|
|||
|
function create_template(){
|
|||
|
if [ -z "$auth" ]; then
|
|||
|
auth
|
|||
|
fi
|
|||
|
echo "Creating zabbix template '$ZABBIX_TEMPLATE_NAME'"
|
|||
|
errorMessage="*ERROR* - Unable to create Template ID for '$ZABBIX_TEMPLATE_NAME'"
|
|||
|
json=`cat ${LIB_DIR}/template.create.json`
|
|||
|
TEMPLATE_XML=$(cat ${LIB_DIR}/$ZABBIX_TEMPLATE_NAME.xml)
|
|||
|
TEMPLATE_XML="$(echo $TEMPLATE_XML | sed 's/"/\\"/g')"
|
|||
|
json=${json/XMLSTRING/$TEMPLATE_XML}
|
|||
|
json=${json/AUTHID/$auth}
|
|||
|
#echo $json
|
|||
|
#echo "curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl"
|
|||
|
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
|
|||
|
#echo $result
|
|||
|
#exit
|
|||
|
#RESULT=`echo $result | jq -r '.result'`
|
|||
|
if [ "$RESULT" == "null" ]; then
|
|||
|
exit_with_error
|
|||
|
else
|
|||
|
get_template
|
|||
|
#echo "Template '$ZABBIX_TEMPLATE_NAME' was created with ID: $TEMPLATE_ID"
|
|||
|
fi
|
|||
|
}
|
|||
|
|
|||
|
#####################################################################
|
|||
|
# Get template
|
|||
|
function get_template(){
|
|||
|
if [ -z "$auth" ]; then
|
|||
|
auth
|
|||
|
fi
|
|||
|
errorMessage="*ERROR* - Unable to get Template ID for '$ZABBIX_TEMPLATE_NAME'"
|
|||
|
json=`cat ${LIB_DIR}/template.get.json`
|
|||
|
json=${json/TEMPLATE_NAME/$ZABBIX_TEMPLATE_NAME}
|
|||
|
json=${json/AUTHID/$auth}
|
|||
|
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
|
|||
|
TEMPLATE_ID=`echo $result | jq -r '.result | .[0] | .templateid'`
|
|||
|
if [ "$TEMPLATE_ID" == "null" ]; then
|
|||
|
create_template
|
|||
|
fi
|
|||
|
echo "Template ID for '$ZABBIX_TEMPLATE_NAME': $TEMPLATE_ID"
|
|||
|
}
|
|||
|
|
|||
|
#####################################################################
|
|||
|
# Get host
|
|||
|
function get_host() {
|
|||
|
if [ -z "$auth" ]; then
|
|||
|
auth
|
|||
|
fi
|
|||
|
# Проверяем наличие узла если он есть возвращаем ID если нет - создаем
|
|||
|
errorMessage="*ERROR* - Unable to get host ID for host '$zabbixHost'"
|
|||
|
json=`cat ${LIB_DIR}/host.get.json`
|
|||
|
json=${json/HOSTNAME/$ZABBIX_HOST_NAME}
|
|||
|
json=${json/AUTHID/$auth}
|
|||
|
#echo $json
|
|||
|
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
|
|||
|
#echo $result
|
|||
|
hostId=`echo $result | jq -r '.result | .[0] | .hostid'`
|
|||
|
# if [ "$hostId" == "null" ]; then exit_with_error; fi
|
|||
|
# echo "Host ID for '$zabbixHost': $hostId"
|
|||
|
if [ "$hostId" == "null" ]; then
|
|||
|
create_host
|
|||
|
#exit_with_error
|
|||
|
else
|
|||
|
echo "Host ID for '$zabbixHost': $hostId"
|
|||
|
fi
|
|||
|
}
|
|||
|
|
|||
|
#####################################################################
|
|||
|
# Create host
|
|||
|
function create_host() {
|
|||
|
if [ -z "$auth" ]; then
|
|||
|
auth
|
|||
|
fi
|
|||
|
# Проверяем наличие шаблона если он есть возвращаем ID если нет - создаем
|
|||
|
if [ -z "$TEMPLATE_ID" ]; then
|
|||
|
get_template
|
|||
|
fi
|
|||
|
# Проверяем наличие группы узлов если она есть возвращаем ID если нет - создаем
|
|||
|
if [ -z "$HOSTGROUP_ID" ]; then
|
|||
|
get_host_group
|
|||
|
fi
|
|||
|
|
|||
|
echo "Create host \"$ZABBIX_HOST_NAME\""
|
|||
|
errorMessage="*ERROR* - Host '$zabbixHost' does not created"
|
|||
|
json=$(cat ${LIB_DIR}/host.create.json)
|
|||
|
json=${json/HOSTNAME/$ZABBIX_HOST_NAME}
|
|||
|
json=${json/HOSTGROUPID/$HOSTGROUP_ID}
|
|||
|
json=${json/TEMPLATE_ID/$TEMPLATE_ID}
|
|||
|
json=${json/AUTHID/$auth}
|
|||
|
#echo $json
|
|||
|
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
|
|||
|
#echo $result
|
|||
|
HOST_ID=`echo $result | jq -r '.result | .hostids | .[0]'`
|
|||
|
if [ -z "$HOST_ID" ]; then
|
|||
|
exit_with_error
|
|||
|
else
|
|||
|
echo "Host \"${ZABBIX_HOST_NAME}\" was created with id $HOST_ID"
|
|||
|
fi
|
|||
|
}
|
|||
|
|
|||
|
get_host
|